> For the complete documentation index, see [llms.txt](https://nsl-solution.gitbook.io/livesolution/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nsl-solution.gitbook.io/livesolution/viewer/sdk-ios/callback.md).

# 콜백 설정

`AppDelegate`의 `didFinishLaunchingWithOptions` (또는 뷰어 실행 전 다른곳 에서)에서 다음을 설정해 주세요.

### 1. 시청시간 콜백 설정

{% hint style="warning" %}
해당 externalServiceId에 설정된 시청시간 보상 설정여부가 false인 경우, 콜백이 제공되지 않습니다. 설정 변경을 위해서는 네이버 담당자에게 문의해주세요.
{% endhint %}

유저의 방송 시청시간에 따른 콜백을 수신하여, 필요한 비즈니스 로직을 구현할 수 있습니다.&#x20;

> **예시** 3분 시청시 100포인트 지급&#x20;

#### 01 시청시간에 따른 콜백 주기 설정

설정된 시간마다 주기적으로 콜백을 수신합니다. 디폴트 콜백 주기는 **60초**이며, 다음 예제와 같이 설정 시간을 변경할 수 있습니다.

```swift
ShoppingLive.watchingTimeCallbackIntervalMilliseconds = 30000
```

#### 02 콜백 설정 추가

시청시간 콜백 수신시 동작을 정의합니다. 콜백 설정이 필요한 경우, 다음 예제와 같이 추가합니다.

```swift
public var stayingTimeChanged: ((_ seconds: Int) -> Void)?
```

{% code title="예제" %}

```swift
ShoppingLive.stayingTimeChanged = stayingTimeChanged

func stayingTimeChanged(_ seconds: Int) {
   print("\(seconds) ")
}
```

{% endcode %}

### 2. 방송상태 콜백 설정&#x20;

방송상태에 따른 비즈니스로직을 정의하고자 하는 경우, 다음 예제와 같이 추가합니다.&#x20;

<table><thead><tr><th width="233">콜백</th><th>정의</th></tr></thead><tbody><tr><td><strong><code>onViewerStarted</code></strong></td><td>뷰어가 실행된 경우 호출합니다. <code>id와 viewerType을</code>파라미터로 전달합니다.</td></tr><tr><td><strong><code>onViewerFinished</code></strong></td><td>뷰어가 종료된 경우 호출합니다. <code>id viewerType,</code>종료 시점의 상태값을 전달합니다.</td></tr><tr><td><strong><code>onBroadcastChanged</code></strong></td><td>뷰어 내에서 방송이 변경된 경우 호출합니다.<code>previousId, previousViewerType</code>및<code>currentId, currentViewerType을</code>전달합니다.</td></tr></tbody></table>

```swift
public var onViewerStarted: ((_ id: Int, _ viewerType: String) -> Void)?
public var onViewerFinished: ((_ id: Int, _ viewerType: String, _ status: String?) -> Void?) // status: "READY", "ONAIR", "END"
public var onBroadcastChanged: ((_ previousId: Int, _ previousViewerType: String, _ currentId: Int, _ currentViewerType: String) -> Void)?
```

{% code title="예제" %}

```swift
ShoppingLive.onViewerStarted = onViewerStarted

func onViewerStarted (_ id: Int, _ viewerType: String) {
    print("broadcast started")
}
```

{% endcode %}

### 3. 좌상단 로고 클릭 콜백

뷰어 좌상단의 서비스로고 클릭 시 콜백을 수신하여, 필요한 랜딩 동작을 정의할 수 있습니다.&#x20;

이 때, [서버에 설정한 로고 URL](#user-content-fn-1)[^1] `link`을 전달 받습니다.

```swift
ShoppingLive.onServiceLogoClicked = onServiceLogoClicked

func onServiceLogoClicked(_ link: String) {
    ShoppingLive.showToastMessage(message: "onServiceLogoClicked callback link = \(link)")
}
```

### 4. 라이브 예고페이지 랜딩 버튼 콜백&#x20;

**뷰어>라이브소개>라이브 정보 자세히 보기** 버튼 클릭시 호출합니다. 서드파티 별도의 라이브 예고페이지를 구현하여, 랜딩을 변경하고자하는 경우 설정합니다.&#x20;

{% hint style="warning" %}
디폴트로 네이버에서 제공하는 기본 예고페이지로 랜딩됩니다. 본 콜백을 사용하고자하는 경우, 네이버 담당자에게 문의하세요.
{% endhint %}

```swift
ShoppingLive.onBridgeGoToButtonInWebClicked = onBridgeGoToButtonInWebClicked

func onBridgeGoToButtonInWebClicked(_ broadcastId: Int) {
    LiveViewerSDKManager.showSnackBar(message: "onBridgeGoToButtonInWebClicked callback broadcastId = \(broadcastId)")
}
```

### 5. 자사몰 상품 클릭 콜백

뷰어에서 자사몰 상품을 클릭한 경우 호출합니다. 서드파티에서 별도로 페이지 랜딩 처리를 하고자하는 경우 설정합니다.

{% hint style="warning" %}
디폴트로 네이티브뷰어 SDK의 자체 모달 웹뷰에서 랜딩합니다.. 본 콜백을 사용하고자하는 경우, 네이버 담당자에게 문의해주세요.
{% endhint %}

**01 서드파티 앱 자체 웹뷰 사용 설정**

```swift
ShoppingLive.useServiceAppProductDetailWebView = true
```

로 설정합니다.

**02 콜백 설정 추가**

자사몰 상품 클릭 콜백 수신시 동작을 정의합니다. 콜백 설정이 필요한 경우, 다음 예제와 같이 추가합니다.

```swift
func onServiceAppWebViewOpenRequested(_ link: String) {
    ShoppingLive.showToastMessage(message: "onServiceAppWebViewOpenRequested callback url = \(link)")
}
```

[^1]: 변경이 필요한 경우 네이버 담당자에 문의하세요.
