Iniziare a utilizzare l'SDK IMA DAI

Gli SDK IMA semplificano l'integrazione degli annunci multimediali nei tuoi siti web e nelle tue app. Gli SDK IMA possono richiedere annunci da qualsiasi ad server conforme a VAST e gestire la riproduzione degli annunci nelle tue app. Con gli SDK IMA DAI, le app inviano una richiesta di streaming per gli annunci e i video di contenuti, sia VOD che dal vivo. L'SDK restituisce quindi un stream video combinato, in modo da non dover gestire il passaggio tra annunci e video di contenuti all'interno della tua app.

Seleziona la soluzione DAI che ti interessa

DAI con servizio completo

Questa guida illustra come integrare l'SDK IMA DAI in una semplice app di video player. Se vuoi visualizzare o seguire un'integrazione di esempio completata, scarica BasicExample da GitHub.

Panoramica dell'IMA DAI

L'implementazione di IMA DAI prevede quattro componenti principali dell'SDK, come mostrato in questa guida:

  • IMAAdDisplayContainer: un oggetto contenitore che si trova sopra l'elemento di riproduzione video e contiene gli elementi dell'interfaccia utente dell'annuncio.
  • IMAAdsLoader: un oggetto che richiede stream e gestisce gli eventi attivati dagli oggetti di risposta alla richiesta di stream. Devi creare un'istanza di un solo caricatore di annunci, che può essere riutilizzato per tutta la durata dell'applicazione.
  • IMAStreamRequest: un IMAVODStreamRequest o un IMALiveStreamRequest. Un oggetto che definisce una richiesta di stream. Le richieste di stream possono riguardare video on demand o live streaming. Le richieste specificano un ID contenuto, nonché una chiave API o un token di autenticazione e altri parametri.
  • IMAStreamManager – Un oggetto che gestisce gli stream di inserzione di annunci dinamici e le interazioni con il backend DAI. Il gestore dello stream gestisce anche i ping di monitoraggio e inoltra gli eventi relativi allo stream e agli annunci al publisher.

Prerequisiti

Prima di iniziare, devi disporre di quanto segue:

Sono inoltre necessari i parametri utilizzati per richiedere lo stream dall'SDK IMA. Per esempi di parametri di richiesta, consulta Stream di esempio.

Parametri di live streaming
Chiave asset La chiave asset che identifica il tuo live streaming in Google Ad Manager.
Esempio: c-rArva4ShKVIAkNfy6HUQ
Parametri di streaming VOD
ID origine di contenuto L'ID della fonte di contenuti di Google Ad Manager.
Esempio: 2548831
ID video L'ID video di Google Ad Manager.
Esempio: tears-of-steel

Creare un nuovo progetto Xcode

In Xcode, crea un nuovo progetto iOS utilizzando Objective-C. Utilizza BasicExample come nome del progetto.

Aggiungi l'SDK IMA DAI al progetto Xcode

Utilizza uno di questi tre metodi per installare l'SDK IMA DAI.

Installa l'SDK utilizzando CocoaPods (opzione preferita)

CocoaPods è un gestore delle dipendenze per i progetti Xcode ed è il metodo consigliato per installare l'SDK IMA DAI. Per ulteriori informazioni sull'installazione o sull'utilizzo di CocoaPods, consulta la documentazione di CocoaPods. Dopo aver installato CocoaPods, segui le istruzioni riportate di seguito per installare l'SDK IMA DAI:

  1. Nella stessa directory del file BasicExample.xcodeproj, crea un file di testo chiamato Podfile e aggiungi la seguente configurazione:

    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '14'
    
    target 'BasicExample' do
      pod 'GoogleAds-IMA-iOS-SDK', '~> 3.23.0'
    end
    
  2. Dalla directory che contiene il file Podfile, esegui:

    pod install --repo-update`
    
  3. Verifica che l'installazione sia andata a buon fine aprendo il file BasicExample.xcworkspace e verificando che contenga due progetti: BasicExample e Pods (le dipendenze installate da CocoaPods).

Installa l'SDK utilizzando Swift Package Manager

L'SDK Interactive Media Ads supporta Swift Package Manager a partire dalla versione 3.18.4. Segui i seguenti passaggi per importare il pacchetto Swift.

  1. In Xcode, installa il pacchetto Swift dell'SDK IMA DAI andando a File > Aggiungi pacchetti.

  2. Nella richiesta visualizzata, cerca il repository GitHub del pacchetto Swift dell'SDK IMA DAI:

    https://github.com/googleads/swift-package-manager-google-interactive-media-ads-ios
    
  3. Seleziona la versione del pacchetto Swift dell'SDK IMA DAI che vuoi utilizzare. Per i nuovi progetti, consigliamo di utilizzare l'opzione Fino alla versione principale successiva.

Al termine, Xcode risolve le dipendenze del pacchetto e le scarica in background. Per maggiori dettagli su come aggiungere le dipendenze dei pacchetti, consulta l'articolo di Apple.

Scaricare e installare manualmente l'SDK

Se non vuoi utilizzare Swift Package Manager o CocoaPods, puoi scaricare l'SDK IMA DAI e aggiungerlo manualmente al tuo progetto.

Creare un video player semplice

Implementa un video player nel tuo view controller principale utilizzando un player AV inserito in una vista UI. L'SDK IMA utilizza la visualizzazione dell'interfaccia utente per visualizzare gli elementi dell'interfaccia utente dell'annuncio.

#import "ViewController.h"

#import <AVKit/AVKit.h>

/// Content URL.
static NSString *const kBackupContentUrl =
    @"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";

@interface ViewController ()
/// Play button.
@property(nonatomic, weak) IBOutlet UIButton *playButton;

@property(nonatomic, weak) IBOutlet UIView *videoView;
/// Video player.
@property(nonatomic, strong) AVPlayer *videoPlayer;
@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.view.backgroundColor = [UIColor blackColor];

  // Load AVPlayer with the path to your content.
  NSURL *contentURL = [NSURL URLWithString:kBackupContentUrl];
  self.videoPlayer = [AVPlayer playerWithURL:contentURL];

  // Create a player layer for the player.
  AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.videoPlayer];

  // Size, position, and display the AVPlayer.
  playerLayer.frame = self.videoView.layer.bounds;
  [self.videoView.layer addSublayer:playerLayer];
}

- (IBAction)onPlayButtonTouch:(id)sender {
  [self.videoPlayer play];
  self.playButton.hidden = YES;
}

@end

Inizializza il caricamento degli annunci

Importa l'SDK IMA nel tuo view controller e adotta i protocolli IMAAdsLoaderDelegate e IMAStreamManagerDelegate per gestire gli eventi di caricamento degli annunci e di gestione dello stream.

Aggiungi queste proprietà private per memorizzare i componenti chiave dell'SDK IMA:

  • IMAAdsLoader: gestisce le richieste di stream per tutta la durata dell'app.
  • IMAAdDisplayContainer: gestisce l'inserimento e la gestione degli elementi dell'interfaccia utente dell'annuncio.
  • IMAAVPlayerVideoDisplay: comunica tra l'SDK IMA e il media player e gestisce i metadati con temporizzazione.
  • IMAStreamManager: gestisce la riproduzione dello stream e attiva gli eventi correlati agli annunci.

Inizializza il caricamento degli annunci, il contenitore di visualizzazione degli annunci e la visualizzazione del video dopo il caricamento della visualizzazione.

@import GoogleInteractiveMediaAds;

// ...

@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
/// The entry point for the IMA DAI SDK to make DAI stream requests.
@property(nonatomic, strong) IMAAdsLoader *adsLoader;
/// The container where the SDK renders each ad's user interface elements and companion slots.
@property(nonatomic, strong) IMAAdDisplayContainer *adDisplayContainer;
/// The reference of your video player for the IMA DAI SDK to monitor playback and handle timed
/// metadata.
@property(nonatomic, strong) IMAAVPlayerVideoDisplay *imaVideoDisplay;
/// References the stream manager from the IMA DAI SDK after successful stream loading.
@property(nonatomic, strong) IMAStreamManager *streamManager;

// ...

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // ...

  self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:nil];
  self.adsLoader.delegate = self;

  // Create an ad display container for rendering each ad's user interface elements and companion
  // slots.
  self.adDisplayContainer =
      [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
                                          viewController:self
                                          companionSlots:nil];

  // Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
  self.imaVideoDisplay = [[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.videoPlayer];
}

Inviare una richiesta di streaming

Quando un utente preme il pulsante di riproduzione, effettua una nuova richiesta di stream. Utilizza la classe IMALiveStreamRequest per i live streaming. Per gli stream VOD, utilizza la classe IMAVODStreamRequest.

La richiesta di stream richiede i parametri dello stream, nonché un riferimento al contenitore di visualizzazione dell'annuncio e alla visualizzazione video.

- (IBAction)onPlayButtonTouch:(id)sender {
  [self requestStream];
  self.playButton.hidden = YES;
}

- (void)requestStream {
  // Create a stream request. Use one of "Live stream request" or "VOD request", depending on your
  // type of stream.
  IMAStreamRequest *request;
  // Switch this variable to NO to make a VOD request.
  BOOL useLiveStream = YES;
  if (useLiveStream) {
    // Live stream request. Replace the asset key with your value.
    request = [[IMALiveStreamRequest alloc] initWithAssetKey:@"c-rArva4ShKVIAkNfy6HUQ"
                                          adDisplayContainer:self.adDisplayContainer
                                                videoDisplay:self.imaVideoDisplay
                                                 userContext:nil];
  } else {
    // VOD request. Replace the content source ID and video ID with your values.
    request = [[IMAVODStreamRequest alloc] initWithContentSourceID:@"2548831"
                                                           videoID:@"tears-of-steel"
                                                adDisplayContainer:self.adDisplayContainer
                                                      videoDisplay:self.imaVideoDisplay
                                                       userContext:nil];
  }
  [self.adsLoader requestStreamWithRequest:request];
}

Ascolta gli eventi di caricamento dello stream

La classe IMAAdsLoader invoca i metodi IMAAdsLoaderDelegate in caso di inizializzazione riuscita o di errore della richiesta di stream.

Nel metodo del delegato adsLoadedWithData, imposta IMAStreamManagerDelegate e inizializza lo stream manager. All'inizializzazione, il gestore dello stream avvia la riproduzione.

Nel metodo delegato failedWithErrorData registra l'errore. Se vuoi, riproduci lo stream di backup. Consulta le best practice per l'inserimento dinamico di annunci.

- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
  NSLog(@"Stream created with: %@.", adsLoadedData.streamManager.streamId);
  self.streamManager = adsLoadedData.streamManager;
  self.streamManager.delegate = self;
  [self.streamManager initializeWithAdsRenderingSettings:nil];
}

- (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {
  // Log the error and play the content.
  NSLog(@"AdsLoader error, code:%ld, message: %@", adErrorData.adError.code,
        adErrorData.adError.message);
  [self.videoPlayer play];
}

Ascoltare gli eventi correlati agli annunci

IMAStreamManager invoca i metodi IMAStreamManagerDelegate per trasmettere eventi e errori dello stream alla tua applicazione.

Per questo esempio, registra gli eventi correlati agli annunci principali nella console:

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  NSLog(@"Ad event (%@).", event.typeString);
  switch (event.type) {
    case kIMAAdEvent_STARTED: {
      // Log extended data.
      NSString *extendedAdPodInfo = [[NSString alloc]
          initWithFormat:@"Showing ad %ld/%ld, bumper: %@, title: %@, description: %@, contentType:"
                         @"%@, pod index: %ld, time offset: %lf, max duration: %lf.",
                         (long)event.ad.adPodInfo.adPosition, (long)event.ad.adPodInfo.totalAds,
                         event.ad.adPodInfo.isBumper ? @"YES" : @"NO", event.ad.adTitle,
                         event.ad.adDescription, event.ad.contentType,
                         (long)event.ad.adPodInfo.podIndex, event.ad.adPodInfo.timeOffset,
                         event.ad.adPodInfo.maxDuration];

      NSLog(@"%@", extendedAdPodInfo);
      break;
    }
    case kIMAAdEvent_AD_BREAK_STARTED: {
      NSLog(@"Ad break started");
      break;
    }
    case kIMAAdEvent_AD_BREAK_ENDED: {
      NSLog(@"Ad break ended");
      break;
    }
    case kIMAAdEvent_AD_PERIOD_STARTED: {
      NSLog(@"Ad period started");
      break;
    }
    case kIMAAdEvent_AD_PERIOD_ENDED: {
      NSLog(@"Ad period ended");
      break;
    }
    default:
      break;
  }
}

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdError:(IMAAdError *)error {
  NSLog(@"StreamManager error with type: %ld\ncode: %ld\nmessage: %@", error.type, error.code,
        error.message);
  [self.videoPlayer play];
}

Esegui l'app e, se la richiesta va a buon fine, puoi richiedere e riprodurre gli stream DAI di Google con l'SDK IMA. Per scoprire di più sulle funzionalità SDK più avanzate, consulta le altre guide elencate nella barra laterale a sinistra o i sample su GitHub.