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.
Bild-im-Bild-Unterstützung in Ihre App einfü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 für die Hintergrundwiedergabe aktualisieren
Für den „Bild im Bild“-Modus müssen Sie die Medienwiedergabe im Hintergrund in Ihrer App zulassen.
Stelle Hintergrundmodi für Audio, AirPlay und Bild im Bild auf EIN, wie unten dargestellt:
Lege die
AVAudioSession
-Attribute fest, um die Hintergrundwiedergabe zu unterstützen, und aktiviere 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 die Bild-im-Bild-Funktion erstellen
Zur Unterstützung von Bild-im-Bild hat Apple die Klassen AVPictureInPictureController
und AVPictureinPictureControllerDelegate
hinzugefügt. IMA hat 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 gibt noch ein weiteres neues Objekt, das erstellt werden muss: IMAAVPlayerVideoDisplay
. Dieser Wert wird an den IMAAdsRequest
-Konstruktor übergeben und ermöglicht dem SDK, Anzeigen in das BiB-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 schalten
IMA SDK-Anzeigen können nicht im Bild-im-Bild-Modus gestartet werden. Deshalb musst du darauf achten, [adsManager start]
nur aufzurufen, wenn sich dein 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 aktivieren
Wenn Sie ein AVPlayer
ohne AVPlayerViewController
verwenden, müssen Sie eine eigene Bild-im-Bild-Schaltfläche hinzufügen. Wir haben ein Beispiel in unserem erweiterten Beispiel 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.delegate
auf 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, damit die Anzeigenwiedergabe im Bild-im-Bild-Modus möglich ist. Deshalb bitten wir Sie, den Delegaten fürAVPictureinPictureController
auf eine Instanz vonIMAPictureInPicturyProxy
festzulegen. Dieses Proxy-Objekt leitet alleAVPictureinPictureControllerDelegate
-Nachrichten an Ihre App weiter, aber auch die Aufrufe an IMA, um die Bild-im-Bild-Unterstützung zu ermöglichen. Beachten Sie, dass Sie auch einen lokalen Handle für Ihr AVPlayerLayer-Objekt beibehalten müssen.