Premiers pas avec le SDK IMA DAI

Les SDK IMA permettent d'intégrer facilement des annonces multimédias à vos sites Web et applications. Les SDK IMA peuvent demander des annonces à n'importe quel ad server conforme à la norme VAST et gérer la lecture des annonces dans vos applications. Avec les SDK IMA DAI, les applications envoient une demande de flux pour les annonces et les vidéos de contenu (VOD ou contenu en direct). Le SDK renvoie ensuite un flux vidéo combiné afin que vous n'ayez pas à gérer le basculement entre l'annonce et le contenu vidéo dans votre application.

Sélectionnez la solution de publicité display in-app qui vous intéresse.

Insertion dynamique de séries d'annonces

Ce guide explique comment lire un flux en direct ou VOD de l'insertion dynamique de séries d'annonces à l'aide du SDK IMA DAI pour iOS avec un lecteur vidéo. Pour afficher ou suivre un exemple d'intégration terminée, téléchargez l'exemple de diffusion de pod pour Objective-C ou Swift.

Présentation de l'insertion dynamique de séries d'annonces IMA

L'implémentation de l'insertion dynamique de séries d'annonces à l'aide du SDK DAI IMA pour iOS implique deux composants principaux:

  • StreamRequest: objet qui définit une requête de flux vers les serveurs publicitaires de Google. Doit être créé à l'aide de IMAPodStreamRequest ou de IMAPodVODStreamRequest pour activer le service de pod. Les deux méthodes nécessitent un code réseau, et IMAPodStreamRequest nécessite également une clé d'élément personnalisée. Une clé API est facultative.

  • IMAStreamManager: objet qui gère la communication entre le flux vidéo et le SDK IMA DAI, par exemple en déclenchant des pings de suivi et en transmettant des événements de flux à l'éditeur.

Prérequis

Avant de commencer, vous avez besoin des éléments suivants :

  • Xcode 13 ou version ultérieure
  • CocoaPods (recommandé), Swift Package Manager ou une copie téléchargée du SDK IMA DAI pour iOS.
  • Une application iOS déjà configurée avec le SDK DAI IMA pour lire des flux vidéo avec des annonces DAI. Si vous ne disposez pas encore d'une telle application, nous vous recommandons de commencer par iOS DAI BasicExample. BasicExample contient le codebase référencé dans ce guide. Pour en savoir plus sur l'implémentation du SDK IMA DAI, consultez le guide de démarrage rapide.

Configurer vos variables d'insertion de séries d'annonces

Toutes les modifications nécessaires pour le service de pod sont effectuées dans ViewController.swift en Swift ou ViewController.m en Objective-C. Les extraits de code de ce guide utilisent par défaut le langage Swift. La première étape consiste à mettre à jour les variables constantes.

Voici les constantes de requête de flux de séries d'annonces à ajouter:

  • STREAM_URL (Utilisé uniquement pour les diffusions en direct): URL du flux vidéo fournie par votre manipulateur de fichier manifeste ou votre partenaire tiers à l'aide de la diffusion de séries d'annonces. Vous devez insérer l'ID de flux fourni par le SDK IMA DAI avant d'envoyer une requête. Dans ce cas, l'URL du flux inclut un espace réservé, "[[STREAMID]]", qui est remplacé par l'ID du flux avant d'envoyer une requête.
  • NETWORK_CODE: code de réseau de votre compte Ad Manager 360.
  • CUSTOM_ASSET_KEY (Utilisé uniquement pour les diffusions en direct): clé d'élément personnalisée qui identifie votre événement de diffusion de séries d'annonces dans Ad Manager 360. Il peut être créé par votre outil de manipulation de fichier manifeste ou votre partenaire tiers de diffusion de séries d'annonces.
  • API_KEY (Utilisé uniquement pour les diffusions en direct): clé API facultative qui peut être requise pour récupérer un ID de flux à partir du SDK d'insertion dynamique d'annonces IMA.

Modifiez la section des variables de l'exemple pour qu'elle corresponde à ce qui suit:

...
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?
  ...

Créer une requête de flux de série d'annonces en direct ou à la demande

Diffusion en direct de séries

Modifiez la méthode requestStream pour créer une requête de flux de pod en direct en instanciant IMAPodStreamRequest.

  ...

  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)
  }

  ...

Diffusion de séries d'annonces dans les flux VOD

Modifiez la méthode requestStream pour créer une requête de flux de séries VOD en instanciant IMAPodVODStreamRequest.

  ...

  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)
  }

  ...

Modifier et définir l'URL du flux

Diffusion en direct dans des séries

Modifiez les méthodes IMAAdsLoaderDelegate, en utilisant streamManager.streamId pour obtenir l'ID de flux. Insérez ensuite l'ID de flux dans STREAM_URL, en remplaçant "[[STREAMID]]". Une fois cette modification effectuée, la nouvelle URL de flux peut être définie à l'aide de videoDisplay.loadStream().

  ...

  // 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
  }

  ...

Diffusion de séries d'annonces dans les flux VOD

Modifiez les méthodes IMAAdsLoaderDelegate, en utilisant streamManager.streamId pour obtenir l'ID de flux. Demandez ensuite une URL de flux à votre partenaire de technologie vidéo (VTP). Appelez ensuite IMAStreamManager.loadThirdPartyStream() pour demander à IMA de charger l'URL du flux et les sous-titres renvoyés par votre TVP.

  ...

  // 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
  }

Nettoyer les composants d'insertion dynamique d'annonces IMA

Une fois que vous avez terminé de demander et d'afficher des annonces dans un flux de diffusion de séries avec le SDK DAI IMA, nous vous suggérons de nettoyer toutes les ressources une fois la session de diffusion de séries terminée. Appelez IMAStreamManager.destroy() pour arrêter la lecture du flux, arrêter tout suivi des annonces et libérer tous les éléments de flux chargés.

Pour voir d'autres exemples d'utilisation du SDK iOS, consultez les exemples sur GitHub.