IMA DAI SDK'sını kullanmaya başlama

IMA SDK'ları, multimedya reklamları web sitelerinize ve uygulamalarınıza entegre etmenizi kolaylaştırır. IMA SDK'ları, VAST ile uyumlu herhangi bir reklam sunucusundan reklam isteyebilir ve uygulamalarınızda reklam oynatmayı yönetebilir. IMA DAI SDK'ları ile uygulamalar, reklam ve içerik videosu (VOD veya canlı içerik) için bir yayın isteği gönderir. Ardından SDK, birleştirilmiş bir video akışı döndürür. Böylece uygulamanızda reklam ve içerik videosu arasında geçiş yapmanız gerekmez.

İlgilendiğiniz DAI çözümünü seçin

Kapsül Yayınlama DAI

Bu kılavuzda, iOS için IMA DAI SDK'sı ile bir video oynatıcı kullanarak DAI kapsül yayınlama canlı veya seç-izle yayınının nasıl oynatılacağı gösterilmektedir. Tamamlanmış bir örnek entegrasyonu görüntülemek veya takip etmek için Objective-C veya Swift için Pod sunma örneğini indirin.

IMA DAI Kapsül Yayınlama'ya genel bakış

iOS için IMA DAI SDK'sını kullanarak kapsül yayınlama özelliğini uygulamak iki ana bileşenden oluşur:

  • StreamRequest: Google'ın reklam sunucularına bir akış isteği tanımlayan nesne. Kapsül yayınlamayı etkinleştirmek için IMAPodStreamRequest veya IMAPodVODStreamRequest kullanılarak oluşturulmalıdır. Her iki yöntem için de ağ kodu gerekir. IMAPodStreamRequest için ayrıca özel öğe anahtarı da gerekir. API anahtarı isteğe bağlıdır.

  • IMAStreamManager: Video akışı ile IMA DAI SDK'sı arasındaki iletişimi (ör. izleme ping'lerini gönderme ve yayın akışı etkinliklerini yayıncıya yönlendirme) yöneten bir nesne.

Ön koşullar

Başlamadan önce aşağıdakilere sahip olmanız gerekir:

  • Xcode 13 veya sonraki sürümler.
  • CocoaPods (tercih edilir), Swift Package Manager veya iOS için IMA DAI SDK'sının indirilmiş bir kopyası.
  • DAI reklamları içeren video akışlarını oynatmak için IMA DAI SDK'sı ile önceden ayarlanmış bir iOS uygulaması. Henüz böyle bir uygulamanız yoksa başlangıç noktası olarak iOS DAI BasicExample'u kullanmanızı öneririz. BasicExample, bu kılavuzda referans verilen kod tabanını içerir. IMA DAI SDK'sının nasıl uygulanacağı hakkında daha fazla bilgi için Hızlı Başlangıç Kılavuzu'na bakın.

Kapsül yayınlama değişkenlerinizi ayarlama

Kapsül sunumu için gereken tüm değişiklikler swift'te ViewController.swift veya Objective-C'te ViewController.m dosyasında yapılır. Bu kılavuzda yer alan snippet'ler varsayılan olarak Swift dilini kullanır. İlk adım, sabit değişkenleri güncellemektir.

Eklenecek reklam kapsülü veri akışı istek sabitleri aşağıda verilmiştir:

  • STREAM_URL (Yalnızca canlı yayınlar için kullanılır): Kapsül yayınlama özelliğini kullanan manifest düzenleyiciniz veya üçüncü taraf iş ortağınız tarafından sağlanan video akışı URL'si. İstekte bulunmadan önce IMA DAI SDK'sı tarafından sağlanan akış kimliğini girmeniz gerekir. Bu durumda, yayın URL'sinde istekte bulunmadan önce yayın kimliğiyle değiştirilen bir yer tutucu ("[[STREAMID]]") bulunur.
  • NETWORK_CODE: Ad Manager 360 hesabınızın ağ kodu.
  • CUSTOM_ASSET_KEY (Yalnızca canlı yayınlar için kullanılır): Ad Manager 360'ta kapsül yayınlama etkinliğinizi tanımlayan özel öğe anahtarı. Bu, manifest düzenleyiciniz veya üçüncü taraf kapsül yayınlama iş ortağınız tarafından oluşturulabilir.
  • API_KEY (Yalnızca canlı yayınlar için kullanılır): IMA DAI SDK'sından bir yayın kimliği almak için gerekli olabilecek isteğe bağlı bir API anahtarı.

Örneğin değişken bölümünü aşağıdakiyle eşleşecek şekilde değiştirin:

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl =
    "https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
  static let networkCode = "51636543"
  static let customAssetKey = "google-sample"
  static let APIKey = ""
  static let backupStreamURLString =
    "http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"

  var adsLoader: IMAAdsLoader?
  ...

Canlı veya VOD kapsülü akış isteği oluşturma

Canlı yayın kapsülü yayınlama

IMAPodStreamRequest sınıfını örneklendirerek canlı Pod Akış isteği oluşturmak için requestStream yöntemini değiştirin.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodStreamRequest(
      networkCode: self.networkCode,
      customAssetKey: self.customAssetKey,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

Seç-izle video akışı kapsülü yayınlama

IMAPodVODStreamRequest sınıfını örneklendirerek VOD Pod Akış isteği oluşturmak için requestStream yöntemini değiştirin.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodVODStreamRequest(
      networkCode: self.networkCode,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

Akış URL'sini düzenleme ve ayarlama

Canlı yayın kapsülü yayınlama

Akış kimliğini almak için streamManager.streamId kullanarak IMAAdsLoaderDelegate yöntemlerini değiştirin. Ardından "[[STREAMID]]" yerine akış kimliğini STREAM_URL içine yerleştirin. Bu değişiklik yapıldıktan sonra yeni yayın URL'si videoDisplay.loadStream() kullanılarak ayarlanabilir.

  ...

  // MARK: - IMAAdsLoaderDelegate

  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
    let loadedStreamUrl = URL(string:urlString)
    self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
    self.videoDisplay.play()
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

  ...

Seç-izle video akışı kapsülü yayınlama

Akış kimliğini almak için streamManager.streamId kullanarak IMAAdsLoaderDelegate yöntemlerini değiştirin. Ardından, video teknolojisi iş ortağınızdan (VTP) bir yayın URL'si isteyin. Ardından, IMA'nın yayın URL'sini ve TVP'niz tarafından döndürülen tüm altyazılar yüklemesi için IMAStreamManager.loadThirdPartyStream() işlevini çağırın.

  ...

  // MARK: - IMAAdsLoaderDelegate

  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    // 'vtpInterface' is a place holder for your own video technology partner
    // (VTP) API calls.
    let streamUrl = vtpInterface.requestStreamURL(streamID)
    self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

IMA DAI öğelerini temizleme

IMA DAI SDK'sını kullanarak bir Pod Yayınlama akışında reklam isteğinde bulunma ve görüntüleme işlemlerini başarıyla tamamladığınızda, Pod Yayınlama oturumu tamamlandıktan sonra tüm kaynakları temizlemenizi öneririz. Akış oynatmayı durdurmak, tüm reklam izlemeyi durdurmak ve yüklü tüm akış öğelerini serbest bırakmak için IMAStreamManager.destroy() işlevini çağırın.

iOS SDK'sının kullanıldığı diğer örnekleri görmek için GitHub'daki örneklere göz atın.