> 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-android/callback.md).

# 콜백 설정

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

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

`ShoppingLiveSolutionConfigs` 부모 클래스를 상속받고 다음과 같은 값을 오버라이딩합니다. 유저의 방송 시청시간에 따른 콜백을 수신하여, 필요한 비즈니스 로직을 구현할 수 있습니다.&#x20;

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

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

설정된 시간마다 주기적으로 콜백을 수신합니다. `watchingTimeCallbackIntervalMilliseconds`에 밀리초 단위로 콜백 주기를 설정하며, 설정하지 않는 경우 디폴트값은 **60초**입니다.

#### 02 이벤트 리스너 추가

시청시간 콜백 수신시 동작을 정의합니다. 콜백 설정이 필요한 경우, 다음 예제와 같이 이벤트리스너를 추가합니다. 필요한 동작을 `onWatchingTimeMillisecondsReceived()`를 추가하여 정의합니다.&#x20;

```kotlin
class SampleSolutionConfigs: ShoppingLiveSolutionConfigs() {
  /** 시청시간 콜백 주기 설정*/
  override val watchingTimeCallbackIntervalMilliseconds: Long = 10_000L 

  /** 이벤트리스너 설정*/
  override var shoppingLiveEventListener: ShoppingLiveEventListener? = object :
    ShoppingLiveEventListener {
      override fun onWatchingTimeMillisecondsReceived(milliseconds: Long) {
          Log.i(TAG, "콜백, 시청시간 : milliseconds=$milliseconds")
    }
}
```

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

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

<table><thead><tr><th width="233">콜백</th><th>정의</th></tr></thead><tbody><tr><td><strong><code>onViewerStarted</code></strong></td><td>뷰어가 실행된 경우 호출합니다.</td></tr><tr><td><strong><code>onViewerFinished</code></strong></td><td>뷰어가 종료된 경우 호출합니다.</td></tr><tr><td><strong><code>onBroadcastChanged</code></strong></td><td>뷰어 내에서 방송이 변경된 경우 호출합니다.</td></tr></tbody></table>

**01** 파라미터 설명

* broadcastId
  * 라이브, 다시보기 : 방송 id
  * 숏클립 : 숏클립 id
* viewerType
  * 라이브 : LIVE
  * 다시보기 : REPLAY
  * 숏클립 : SHORT\_CLIP
* previousBroadcastId
  * 현재 방송/다시보기/숏클립 이전에 보았던 방송/다시보기/숏클립 id
* currentBroadcastId
  * 현재 보고 있는 방송/다시보기/숏클립 id

```kotlin
class SampleSolutionConfigs: ShoppingLiveSolutionConfigs() {
    override var shoppingLiveStatusListener: ShoppingLiveStatusListener? = object : ShoppingLiveStatusListener {
        override fun onViewerStarted(broadcastId: Long, viewerType: String) {
            Log.i(TAG, "콜백, 뷰어진입 : broadcastId=$broadcastId")
        }

        override fun onViewerFinished(broadcastId: Long, viewerType: String, status: String?) {
            Log.i(TAG, "콜백, 뷰어종료 : broadcastId=$broadcastId, status=$status")
        }

        override fun onBroadcastChanged(previousBroadcastId: Long, previousViewerType: String, currentBroadcastId: Long, currentViewerType: String) {
            Log.i(TAG, "콜백, 방송전환 : previousBroadcastId=$previousBroadcastId, currentBroadcastId=$currentBroadcastId")
        }
    }
}
```

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

`ShoppingLiveSolutionUiConfigs` 부모 클래스를 상속받고 필요한 정보를 오버라이딩합니다. 뷰어 좌상단의 서비스로고 클릭 시 콜백을 수신하여, 필요한 랜딩 동작을 정의할 수 있습니다.&#x20;

`onServiceLogClicked`에 콜백 동작을 정의합니다. 이 때, [서버에 설정한 로고 URL](#user-content-fn-1)[^1] `url`을 전달 받습니다.

```kotlin
class SampleSolutionUiConfigs: ShoppingLiveSolutionUiConfigs() {
    override var shoppingLiveUiEventListener: ShoppingLiveUiEventListener? = object : ShoppingLiveUiEventListener {
        override fun onServiceLogoClicked(url: String) {
            Log.i(TAG, "콜백, 서비스 로고 클릭-onServiceLogClicked : url=$url")
        }
    }
}
```

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

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

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

```kotlin
class SampleSolutionUiConfigs: ShoppingLiveSolutionUiConfigs() {
    override var shoppingLiveUiEventListener: ShoppingLiveUiEventListener? = object : ShoppingLiveUiEventListener {
        override fun onBridgeGoToButtonInWebClicked(broadcastId: Long, link: String) {
            Log.i(TAG, "콜백, 라이브 정보 자세히 보러가기 클릭-onBridgeGoToButtonInWebClicked : broadcastId=$broadcastId, link=$link")
        }
    }
}
```

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

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

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

```kotlin
class SampleSolutionUiConfigs: ShoppingLiveSolutionUiConfigs() {
    override var shoppingLiveUiEventListener: ShoppingLiveUiEventListener? = object : ShoppingLiveUiEventListener {
        override fun onServiceAppWebViewOpenRequested(url: String) {
            Log.i(TAG, "콜백, 서드파티앱의 웹뷰 실행-onServiceAppWebViewOpenRequested : url=$url")
        }

    }
}
```

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