# Blux React Native SDK 행동데이터 연동 안내 문서

### iOS 프로젝트 설정

#### (1) 앱 푸시 발송 권한 추가

앱 푸시 발송 권한을 추가합니다. Target의 Signing & Capabilities 으로 들어와 좌상단의 + Capacity > Push Notifications 를 선택하여 추가합니다.

<img src="./guide1.png" alt="Document image" style="zoom:50%;" />

#### (2) Notification Service Extension 생성

Xcode에서 File > New > Target 에서 Notification Service Extension을 선택합니다.

<img src="./guide2.png" alt="Document image" style="zoom:50%;" />

Product Name에 적절한 이름을 입력한 후 Finish를 눌러주세요. Language는 Swift를 권장드리고 있습니다.

<img src="./guide3.png" alt="Document image" style="zoom:50%;" />

다음과 같은 화면이 나오면 Cancel을 클릭하여 별도의 Scheme은 활성화하지 않도록 해주세요.

<img src="./guide4.png" alt="Document image" style="zoom:50%;" />

#### (3) Minimum Deployments 버전 설정

Notification Service Extension Target의 Minimum Deployments 버전을 현재 사용 중인 매인 앱의 Target 버전과 동일하게 설정해주세요.

<img src="./guide5.png" alt="Document image" style="zoom:80%;" />

#### (4) Podfile 수정

ios 디렉토리 내의 Podfile을 열고 다음과 같이 추가합니다.

```dylan

// 파일 최하단의 아래 줄 추가
// 앞서 입력한 Extension의 Product Name을 target 이름으로 설정합니다.
target 'BluxNotificationServiceExtension' do
  pod 'BluxClient'
end
```

이후 pod install을 실행하면 SDK 설치가 완료됩니다. 이후 XCode를 실행하여 생성한 Extension 파일을 수정합니다. 자동으로 채워진 코드들을 지우고 블럭스가 제공하는 클래스를 상속하도록 수정하시면 됩니다.

```swift
import BluxClient

class NotificationService: BluxNotificationServiceExtension {
}
```

### Installation

#### npm or yarn

npm/yarn을 이용하여 blux의 react-native SDK를 설치해주세요.

```shell
// NPM 이용
npm install --save @blux.ai/react-native

// Yarn 이용
yarn add @blux.ai/react-native
```

#### CocoaPods

아래와 같은 명령어를 실행해주세요.

```shell
cd ios
pod install
```

### **Initialize**

---

- 필요 변수 : `클라이언트 ID`, `API 키`
- setLogLevel 을 제외한 다른 모든 메소드는 `initialize`로 SDK가 초기화 된 이후에 호출해야 합니다.

```typescript
BluxClient.setLogLevel('debug');
BluxClient.initialize(
  '{client_id}',
  '{blux_api_key}',
  true
}).then(()=> {
  setInitialized(true)
});
```

### **setLogLevel** : 연동 관련하여 디버깅을 하기 위해서 로깅을 활성화할 수 있습니다. 해당 설정은 정적이므로 BluxClient를 초기화하기 전에 호출하실 수 있습니다.

- `'debug'`
- `'log'`
- `'warning'`
- `'error'`
- `'fatal'`

### signIn

- 회원 유저에 대해서 부여하고 계시는 유저 ID를 넘겨주시면 됩니다.
- Blux 서비스에서 같은 `UserId`를 가지는 유저는 같은 유저로 식별됩니다.
- 비회원 유저에서 회원 유저로 식별되는 시점에 아래 함수를 호출해주세요.
- 회원 유저가 앱을 실행하는 시점 (자동 로그인이 되어 있는 경우)에도 `initialize` 메소드 호출 이후에 실행되어야 합니다.

```typescript
BluxClient.signIn('USER ID');
```

### signOut

- 유저가 서비스에서 로그아웃 한 경우 호출해주시면 됩니다.
- 유저들을 더 잘 식별하기위해 사용됩니다.

```typescript
BluxClient.signOut();
```

### sendEvent

#### 상품 상세 페이지 진입

: 유저가 제품 상세보기 페이지에 들어가거나, 영상을 시청하는 등 클릭을 통해 어떠한 아이템에 대해 관심을 보이는 행동을 보일 때 사용 가능한 이벤트입니다.

---

```typescript
BluxClient.sendEvent(
  new AddProductDetailViewEvent({
    itemId: 'ITEM_ID',
  })
);
```

#### 상품 좋아요

: 유저가 제품이나 영상 등에 좋아요를 누르거나, 찜을 해두는 등 적극적인 관심을 보이는 행동을 할 때 사용 가능한 이벤트입니다.

---

```typescript
BluxClient.sendEvent(
  new AddLikeEvent({
    itemId: 'ITEM_ID',
  })
);
```

#### 상품 장바구니 담기

: 이커머스에서 유저가 제품을 장바구니에 담는 행동을 할 때 사용 가능한 이벤트입니다.

---

```typescript
BluxClient.sendEvent(
  new AddCartaddEvent({
    itemId: 'ITEM_ID',
  })
);
```

#### 상품 구매

: 유저가 제품을 구매했을 때 사용 가능한 이벤트입니다. 추가 인풋으로 `price`가 요구되며, 제품의 구매 당시 가격을 기록하면 됩니다.

---

- **_동일 상품 복수 구매_**
  - price 파라미터의 경우, 해당 상품 판매를 통한 총 매출을 계산할 때 활용됩니다. 추천에 의한 매출 기여액 지표를 보여드릴 때 사용되는 값으로 만약 5,000원짜리 상품을 5개 구매하였다면, 25,000 을 입력하시면 됩니다.
- **_복수 상품 구매_**
  - `AddPurchaseEvent` 객체를 각 상품 구매건에 맞춰서 생성한 후 list 형태로 넘겨주시면 됩니다.

```typescript
BluxClient.sendEvent(
  new AddPurchaseEvent({
    itemId: 'ITEM_ID',
    price: 1000,
  })
);
```

```typescript
// 복수 상품을 구매한 경우
BluxClient.sendEvent([
  new AddPurchaseEvent({
    itemId: 'ITEM_ID_1',
    price: 1000,
  }),
  new AddPurchaseEvent({
    itemId: 'ITEM_ID_2',
    price: 2000,
  }),
]);
```
