Media Ads (IMA) SDK für iOS.
Dieser Leitfaden richtet sich an IMA-Publisher, die ihrer bestehenden IMA-Implementierung Unterstützung für den Bild-im-Bild-Modus hinzufügen möchten.
Vorbereitung
- Führen Sie die Schritte im Startleitfaden aus.
Unterstützung für den Bild-im-Bild-Modus in Ihrer App hinzufügen
Ab SDK-Version 3.1.0 unterstützt IMA den Bild-im-Bild-Modus von Apple für das iPad. Wenn Sie Ihrer App Unterstützung für den Bild-im-Bild-Modus hinzufügen möchten, müssen Sie einige Einstellungen anpassen und einige neue IMA-Klassen implementieren, wie unten gezeigt.
Einstellungen aktualisieren, um die Hintergrundwiedergabe zu ermöglichen
Für den Bild-im-Bild-Modus muss die Medienwiedergabe im Hintergrund in Ihrer App zulässig sein.
Legen Sie für Audio, AirPlay und Bild im Bild die Hintergrundmodi auf EIN fest, wie unten gezeigt:

Legen Sie die
AVAudioSession-Attribute so fest, dass die Hintergrundwiedergabe unterstützt wird, und aktivieren Sie die Hintergrundwiedergabe 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; }
Neue iOS- und IMA-Objekte für den Bild-im-Bild-Modus erstellen
Um den Bild-im-Bild-Modus zu unterstützen, hat Apple die Klassen AVPictureInPictureController und AVPictureinPictureControllerDelegate hinzugefügt. IMA hat seinerseits IMAPictureInPictureProxy hinzugefügt. Wenn Sie diese Klassen in Ihr Projekt einbinden möchten, fügen Sie Ihrem Code die folgenden Anweisungen hinzu:
... @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; }
Anzeigenanfrage ändern
Es muss noch ein neues Objekt erstellt werden: IMAAVPlayerVideoDisplay. Dieses wird an den Konstruktor IMAAdsRequest übergeben und ermöglicht dem SDK, Anzeigen in das Bild-im-Bild-Fenster einzufügen, wenn Ihr Video im Bild-im-Bild-Modus wiedergegeben wird:
... - (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]; }
Anzeigen starten
IMA SDK-Anzeigen können nicht im Bild-im-Bild-Modus gestartet werden. Daher müssen Sie darauf achten, dass Sie [adsManager start] nur aufrufen, wenn sich Ihr Video im Standardwiedergabemodus befindet:
... - (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; } }
Bild-im-Bild-Modus aufrufen
Wenn Sie einen AVPlayer ohne AVPlayerViewController verwenden, müssen Sie
eine eigene Schaltfläche für den Bild-im-Bild-Modus hinzufügen. Wir haben in unserem erweiterten
Beispiel
eine so implementiert:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
FAQ
- Wie starte ich Anzeigen, wenn sich das Video im Bild-im-Bild-Modus befindet?
- Anzeigen können nicht gestartet werden, während sich das Video im Bild-im-Bild-Modus befindet. Sie können nur im Standardwiedergabemodus gestartet werden.
- Bei meiner bestehenden Bild-im-Bild-Integration muss
self.pictureInPictureController.delegateauf meine eigene Klasse festgelegt werden. Wie kann ich IMA-Anzeigen im Bild-im-Bild-Modus implementieren und trotzdem der Delegat sein? - Das IMA SDK muss auch
AVPictureinPictureControllerDelegate-Nachrichten empfangen, um die Anzeigenwiedergabe im Bild-im-Bild-Modus zu ermöglichen. Deshalb bitten wir Sie, den Delegaten fürAVPictureinPictureControllerauf eine Instanz vonIMAPictureInPicturyProxyfestzulegen. Dieses Proxyobjekt leitet alleAVPictureinPictureControllerDelegate-Nachrichten an Ihre App weiter, aber auch die Aufrufe an IMA, um die Unterstützung für den Bild-im-Bild-Modus zu ermöglichen. Beachten Sie, dass Sie auch ein lokales Handle für Ihren AVPlayerLayer beibehalten müssen.