InStream API 통합

InStream API는 InStream 광고가 로드 및 재생되는 방식을 설정하고 관리하기 위한 API입니다. Pre-roll, Mid-roll, Post-roll, In-roll, Pause-roll과 같은 모든 유형의 광고 시점 재생을 지원합니다.

Pre-roll, Mid-roll, Post-roll 광고 시점은 InstreamAdBinder API를 사용하여 재생됩니다. In-roll 및 Pause-roll 광고 시점을 재생하려면 각각 In-roll API 및 Pause-roll API를 사용하세요.

Примечание

다음과 같은 경우 InstreamAdBinder API, In-roll API, 및 Pause-roll API를 동시에 사용할 수 있습니다.

  1. 광고 플레이어의 다른 인스턴스를 사용.
  2. InStreamAdBinder API를 사용하여 메인 동영상이 일시 중지된 경우 광고를 재생하기 위해 Pause-roll 및 In-roll API를 시작하지 않는 경우.

앱 요구 사항

  • Xcode 16.1 이상을 사용합니다.

작동 방식

로드된 InStream 광고 객체에는 광고 시점을 재생하기 위한 일정이 포함됩니다. 각 광고 시점은 InstreamAdBreak 객체로 설명됩니다. 광고 시점에는 다음 유형 중 한 가지가 있을 수 있습니다. Pre/Mid/Post/In/Pause-Roll 중 하나일 수 있습니다. Pre/MidPost-Roll 광고 시점은 InstreamAdBinder API를 사용하여 재생할 수 있습니다. In/Pause-Roll 광고 시점을 재생하려면 각각 In-roll API 및 Pause-roll API를 사용하세요.

VideoPlayer 프로토콜은 메인 동영상 콘텐츠와 상호 작용하는 데 사용됩니다. 광고 배치 내에서 광고 시점을 재생하려면 InstreamAdPlayer 프로토콜을 사용하세요.

InstreamAdBinder는 메인 동영상 재생의 진행 상황을 추적하고 파트너 인터페이스의 동영상 리소스에서 제공하는 일정에 따라 광고 시점을 자동으로 표시합니다.

InstreamAdBinder는 PlayerView에서 동영상 광고의 렌더링을 직접 제어하지 않습니다. 동영상 광고는 InstreamAdBinder에 전송된 플레이어 인터페이스의 신호를 기반으로 앱 측에서 재생되어야 합니다. InstreamAdBinder는 VideoPlayer.pauseVideo()를 호출하여 광고 시점 재생의 시작을 신호하고 VideoPlayer.resumeVideo()를 호출하여 끝을 신호합니다.

앱 측에서 VideoPlayer.pauseVideo()를 호출할 때 메인 동영상 제어를 숨기고, 메인 동영상을 일시 중지하고, 동영상 광고 재생을 시작해야 합니다. 광고 SDK 측에서는 메서드를 호출한 후 InstreamAdView 컨테이너 내에 광고 컨트롤이 표시되고 InstreamAdPlayer.playAd() 메서드가 호출되어 동영상 광고 재생이 시작됩니다.

앱 측에서 VideoPlayer.resumeVideo()를 호출할 때 메인 동영상 제어를 반환하고 메인 동영상 재생을 재개해야 합니다. 광고 SDK 측에서는 메서드를 호출하기 전에 InstreamAdView 컨테이너 내의 광고 제어가 제거됩니다.

In/Pause-Roll API는 PlayerView에서 동영상 광고의 렌더링을 직접 제어하지 않습니다. 동영상 광고는 In/Pause-Roll로 전송된 플레이어 인터페이스의 신호를 기반으로 앱 측에서 재생되어야 합니다. In/Pause-Roll은 InstreamAdBreakDelegate.instreamAdBreakDidStart()를 호출하여 광고 시점의 시작을 신호하고 InstreamAdBreakDelegate.instreamAdBreakDidComplete() 또는 InstreamAdBreakDelegate.instreamAdBreakDidError()를 호출하여 끝을 신호합니다.

앱 측에서 InstreamAdBreakDelegate.instreamAdBreakDidStart()를 호출할 때는 메인 동영상 제어를 숨기고 메인 동영상을 일시 중지해야 합니다. 광고 SDK 측에서는 메서드를 호출한 후 InstreamAdView 컨테이너 내에 광고 제어가 표시되고 InstreamAdPlayer.playAd() 메서드를 호출하여 동영상 광고 재생을 시작합니다.

앱 측에서 InstreamAdBreakDelegate.instreamAdBreakDidComplete() 또는 InstreamAdBreakDelegate.instreamAdBreakDidError()를 호출할 때, 메인 동영상 제어를 반환하고 메인 동영상 재생을 재개해야 합니다. 광고 SDK 측에서는 메서드를 호출하기 전에 InstreamAdView 컨테이너에서 광고 제어를 제거합니다.

광고 로드

  1. InStream 광고를 가져오려면 InstreamAdLoader 클래스의 인스턴스를 생성합니다.

  2. 알림(광고 로드 성공 또는 오류와 함께 실패)을 받으려면 광고 로드 이벤트를 구독하세요. 이를 수행하려면 InstreamAdLoaderDelegate 프로토콜을 준수하는 대리자를 설정합니다.

  3. InstreamAdRequestConfiguration 클래스를 사용하여 instreamAdRequestConfiguration 요청에 대한 구성을 생성합니다. 파트너 인터페이스에서 Page ID을 요청 매개변수로 전달합니다.

  4. InstreamAdLoader.loadInstreamAd 메서드를 사용하여 광고를 로드하고 여기에 instreamAdRequestConfiguration을 전달합니다.

통합을 테스트하려면 데모 Page ID: demo-instream-vmap-yandex를 사용하세요.

adLoader = InstreamAdLoader()
adLoader.delegate = self
let configuration = InstreamAdRequestConfiguration(pageID: PAGE_ID)
adloader.loadInstreamAd(configuration: configuration)

광고 렌더링

  1. InstreamAdPlayerVideoPlayer 메서드를 구현합니다.

    참조는 메서드와 그 구현에 대한 자세한 정보를 제공합니다. 또한 테스트 구현 예시를 참조하세요.

    Совет

    더 간편하게 실행하려면 다른 플레이어 인스턴스를 사용하여 동영상 광고와 콘텐츠를 재생하는 것을 권장합니다.

  2. InstreamAdView를 앱의 View 계층에 추가합니다. 동영상 광고를 재생하려면 InstreamAdView에 PlayerView를 포함해야 합니다.

    Важно

    컨테이너의 크기는 최소 300dpx160dp여야 합니다.

  3. InstreamAdBinder 객체를 생성합니다. 로드된 InstreamAd 객체와 InstreamAdPlayerVideoPlayer 구현을 빌더에 전달합니다.

    광고의 진행 상황(동영상 광고를 재생할 준비가 됨, 동영상 광고가 재생됨 또는 재생에 실패함)에 대한 알림을 설정합니다. InstreamAdBinderDelegate 프로토콜을 준수하는 대리자를 설정합니다.

    adBinder = InstreamAdBinder(ad: ad, adPlayer: adPlayer, videoPlayer:
    contentPlayer)
    adBinder.delegate = self
    
  4. Pre-roll 광고 시점 재생을 더 빠르게 시작하려면 InstreamAdBinder.prepareAd() 메서드를 호출하여 사전 로드하세요.

    func preparePrerollAd(adBinder: InstreamAdBinder) {
        adBinder.delegate = self
        adBinder.prepareAd()
    }
    
    extension InstreamViewController: InstreamAdBinderDelegate {
        func instreamAdBinder(_ binder: InstreamAdBinder, didPrepare instreamAd: InstreamAd) {
            addInstreamAdBinderToPreloadedAdQueue(binder)
        }
        //...
    
    }
    
  5. 생성된 InstreamAdBinder 객체에 대해 InstreamAdBinder.bind(with adView: InstreamAdView) 메서드를 호출합니다. 이전에 계층에 추가된 InstreamAdView를 매개변수로 전달합니다. 그러면 InStream SDK가 메인 동영상 재생의 진행 상황을 자동으로 추적하고 동영상 광고가 재생되는 방식을 관리하기 시작합니다.

    adBinder.bind(with: instreamAdView)
    
  6. 목록에서 InStream 광고를 재생할 때, 목록에서 광고가 있는 셀이 무효화되면 InStreamBinder.unbind() 메서드를 사용합니다. 스크롤을 위해 재사용 가능한 플레이어 풀을 구현하려면 InstreamAdBinder에 연결된 광고 플레이어를 재사용할 때 InstreamAdbinder.invalidateAdPlayer()를 호출하고, 메인 콘텐츠 플레이어를 재사용할 때는 InstreamAdBinder.invalidateVideoPlayer()를 호출하세요.

  7. InStreamAdBinder 사용을 중지할 때 상태를 재설정합니다.

    deinit {
        adBinder.unbind()
        adBinder.invalidateVideoPlayer()
        adBinder.invalidateAdPlayer()
    }
    

Примечание

Pause-roll 광고 시점 재생을 설정하는 것은 In-roll과 유사합니다. 이렇게 하려면 In-roll 클래스/메서드를 Pause-roll의 클래스/메서드로 교체하세요.

  1. InstreamAdPlayer 인터페이스를 구현합니다.

    참조는 메서드와 그 구현에 대한 자세한 정보를 제공합니다. 또한 테스트 구현 예시를 참조하세요.

    Совет

    더 간편하게 실행하려면 다른 플레이어 인스턴스를 사용하여 동영상 광고와 콘텐츠를 재생하는 것을 권장합니다.

  2. InstreamAdView를 앱의 View 계층에 추가합니다. 동영상 광고를 재생하려면 InstreamAdView에 PlayerView를 포함해야 합니다.

    Важно

    컨테이너의 크기는 최소 300dpx160dp여야 합니다.

  3. InstreamAdLoader를 사용하여 파트너 인터페이스의 Page ID를 사용해 InstreamAd 객체를 로드합니다.

  4. InstreamAd 객체는 다양한 유형의 광고 시점 세트를 포함합니다. In-roll 광고 시점을 얻으려면 InrollQueueProvider를 사용하세요. InrollQueueProvider 대기열을 통해 표시 순서대로 In-roll 객체를 수신할 수 있습니다.

    func instreamAdLoader(_ instreamAdLoader: InstreamAdLoader, didLoad ad:
    InstreamAd) {
        inrollQueue = InrollQueueProvider(ad: ad).queue()
    }
    
  5. 수신한 In-roll 객체를 실행하려면 이를 준비해야 합니다. 준비되지 않은 In-roll 동영상 광고는 시작되지 않습니다. In-roll 동영상 광고 준비 상태를 추적하려면, InstreamAdBreakDelegate를 설정하고, Inroll.prepare(with: adPlayer)를 호출하고, InstreamAdPlayer 구현의 인스턴스를 전달합니다.

    private func prepareNextAd() {
        currentInroll = inrollQueue?.poll()
        currentInroll?.delegate = self
        currentInroll?.prepare(with: adPlayer)
    }
    
  6. In-roll 동영상 광고가 준비되면 InstreamAdBreakDelegate.instreamAdBreakDidPrepare()가 호출됩니다. 준비된 In-roll 동영상 광고를 재생할 준비가 되었습니다.

    Совет

    InrollQueue에서 받은 순서대로 동영상 광고를 재생합니다. 받은 In-roll 동영상 광고가 다른 순서로 재생되면, 앱 수익화 효과가 감소할 수 있습니다.

  7. 준비된 In-roll 동영상 광고를 재생하려면, Inroll.play(with adView: InstreamAdView)를 호출하고 이전에 View 계층 구조에 추가된 InstreamAdView를 매개변수로 전달합니다.

    func instreamAdBreakDidPrepare(_ adBreak: InstreamAdBreak) {
        currentInroll?.play(instreamAdView)
    }
    
  8. 광고 시점이 재생되기 시작하면 InstreamAdBreakDelegate.instreamAdBreakDidStart() 메서드가 호출됩니다. 이 메서드를 호출한 후, 메인 동영상을 일시 중지하고 제어를 숨김 처리합니다.

    func instreamAdBreakDidStart(_ adBreak: InstreamAdBreak) {
        contentVideoPlayer?.pauseVideo()
    }
    
  9. 광고 시점이 재생된 후, 메인 동영상 재생을 재개합니다. 동영상 광고는 재생에 성공하거나 실패할 수 있습니다. 두 상황 모두 처리해야 합니다.

    func instreamAdBreakDidComplete(_ adBreak: InstreamAdBreak) {
        handleAdBreakCompleted()
    }
    func instreamAdBreakDidError(_ adBreak: InstreamAdBreak) {
        handleAdBreakCompleted()
    }
    private fun handleAdBreakCompleted() {
        currentInroll = null
        contentVideoPlayer?.resumeVideo()
    }
    
  10. 현재 In-roll 동영상 광고의 재생이 완료되면 InrollQueue에서 다음 In-roll 동영상 광고를 위해 재생 대기열을 확인합니다.

    private func prepareNextAd() {
        currentInroll = inrollQueue?.poll()
        currentInroll?.delegate = self
        currentInroll?.prepare(with: adPlayer)
    }
    
  11. In-roll 동영상 광고 사용을 중지할 때 그 상태를 재설정합니다.

    deinit {
        currentInroll?.invalidate()
    }