SDK Interactive Media Ads (IMA) per iOS.
Questa guida è rivolta ai publisher IMA che vogliono aggiungere il supporto Picture in Picture alla loro implementazione IMA esistente.
Prerequisiti
- Completa la Guida introduttiva.
Aggiungere il supporto Picture in picture alla tua app
A partire dalla versione 3.1.0 dell'SDK, IMA supporta la modalità Picture in Picture di Apple per iPad. Per aggiungere il supporto della funzionalità Picture in Picture alla tua app, devi modificare alcune impostazioni e implementare alcune nuove classi IMA, come mostrato di seguito.
Aggiornamento delle impostazioni per consentire la riproduzione in background
La modalità Picture in picture richiede di consentire la riproduzione di contenuti multimediali in background nell'app.
Imposta Modalità in background su ON per Audio, AirPlay e Picture in Picture come mostrato di seguito:
Imposta le proprietà
AVAudioSession
per supportare la riproduzione in background, nonché attiva la riproduzione in background inIMASettings
:... – (void)viewDidLoad { [super viewDidLoad]; self.playButton.layer.zPosition = MAXFLOAT; [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [self setupAdsLoader]; [self setUpContentPlayer]; } – (void)setupAdsLoader { IMASettings *settings = [[IMASettings alloc] init]; settings.enableBackgroundPlayback = YES; self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings]; self.adsLoader.delegate = self; }
Creazione di nuovi oggetti iOS e IMA per il picture in picture
Per supportare la funzionalità Picture in Picture, Apple ha aggiunto le classi AVPictureInPictureController
e AVPictureinPictureControllerDelegate
. IMA, da parte sua, ha aggiunto
IMAPictureInPictureProxy
. Per incorporare queste classi nel tuo progetto, aggiungi
le seguenti istruzioni al codice:
... @interface VideoViewController () <AVPictureInPictureControllerDelegate, IMAAdsLoaderDelegate, IMAAdsManagerDelegate, UIAlertViewDelegate> ... // PiP objects. @property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy; @property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController; ... @end - (void)setUpContentPlayer { ... self.pictureInPictureProxy = [[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self]; self.pictureInPictureController = [[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer]; self.pictureInPictureController.delegate = self.pictureInPictureProxy; }
Modifica della richiesta di annunci
Devi creare un altro nuovo oggetto: IMAAVPlayerVideoDisplay
. Questo valore viene passato
al costruttore IMAAdsRequest
e consente all'SDK di inserire annunci nella finestra PIP
quando il video viene riprodotto in modalità Picture in picture:
... - (void)requestAdsWithTag:(NSString *)adTagUrl { [self logMessage:@"Requesting ads"]; // Create an ad request with our ad tag, display container, and optional user context. IMAAdsRequest *request = [[IMAAdsRequest alloc] initWithAdTagUrl:adTagUrl adDisplayContainer:[self createAdDisplayContainer] avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer] pictureInPictureProxy:self.pictureInPictureProxy userContext:nil]; [self.adsLoader requestAdsWithRequest:request]; }
Avviare gli annunci
Gli annunci SDK IMA non possono essere avviati durante la modalità Picture in picture. Di conseguenza,
devi assicurarti di chiamare [adsManager start]
solo quando il video è in
modalità di riproduzione standard:
... - (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event { [self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]]; // When the SDK notified you that ads have been loaded, play them. switch (event.type) { case kIMAAdEvent_LOADED: if (![self.pictureInPictureController isPictureInPictureActive]) { [adsManager start]; } break; ... default: break; } }
Attivare la modalità Picture in picture
Se utilizzi un AVPlayer
senza AVPlayerViewController
, devi
aggiungere il tuo pulsante Picture in Picture. Ne abbiamo implementato uno nel nostro esempio avanzato, in questo modo:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
Domande frequenti
- Come faccio ad avviare gli annunci quando il video è in modalità Picture in picture?
- Gli annunci non possono essere avviati mentre il video è in modalità Picture in picture, ma solo in modalità di riproduzione standard.
- La mia integrazione esistente di Picture in Picture deve impostare
self.pictureInPictureController.delegate
sulla mia classe. Come faccio a implementare gli annunci IMA in Picture in Picture e a rimanere il delegato? - L'SDK IMA deve ricevere anche messaggi
AVPictureinPictureControllerDelegate
per attivare la riproduzione degli annunci in modalità Picture in Picture. Per questo motivo ti chiediamo di impostare il delegato perAVPictureinPictureController
su un'istanza diIMAPictureInPicturyProxy
. Questo oggetto proxy inoltra tutti i messaggiAVPictureinPictureControllerDelegate
alla tua app, ma inoltra anche le chiamate a IMA per attivare il supporto Picture in Picture. Tieni presente che devi anche mantenere un handle locale per AVPlayerLayer.