Ten przewodnik jest przeznaczony dla wydawców IMA, którzy chcą dodać obsługę obrazu w obrazie do swojej implementacji IMA.
Wymagania wstępne
- Wypełnij przewodnik dla początkujących.
Dodawanie obsługi obrazu w obrazie do aplikacji
Od pakietu SDK w wersji 3.1.0 pakiet IMA obsługuje tryb Apple „Obraz w obrazie” na iPadach. Aby dodać do aplikacji obsługę obrazu w obrazie, musisz dostosować kilka ustawień i wdrożyć kilka nowych klas IMA, jak pokazano poniżej.
zaktualizowanie ustawień, aby umożliwić odtwarzanie w tle;
Tryb obrazu w obrazie wymaga zezwolenia na odtwarzanie multimediów w tle.
Ustaw Tryby w tle na WŁ. dla funkcji Dźwięk, AirPlay i obraz w obrazie, jak pokazano poniżej:
Ustaw właściwości
AVAudioSession
, aby umożliwić odtwarzanie w tle i włączyć odtwarzanie w tle w usłudzeIMASettings
:... – (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; }
Tworzenie nowych obiektów iOS i IMA do funkcji obraz w obrazie
Aby umożliwić obsługę funkcji Obraz w obrazie, firma Apple dodała do tego klasy AVPictureInPictureController
i AVPictureinPictureControllerDelegate
. Z kolei IMA zostało dodane IMAPictureInPictureProxy
. Aby włączyć te zajęcia do swojego projektu, dodaj do kodu te instrukcje:
... @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; }
Modyfikowanie żądania reklam
Musisz utworzyć jeszcze jeden nowy obiekt: IMAAVPlayerVideoDisplay
. Informacje te są przekazywane do konstruktora IMAAdsRequest
. Dzięki temu pakiet SDK może wstawiać reklamy do okna funkcji obraz w obrazie, gdy film jest odtwarzany w trybie obraz w obrazie:
... - (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]; }
Reklamy startowe
Reklam IMA SDK nie można uruchamiać w trybie obraz w obrazie. Dlatego musisz wywoływać funkcję [adsManager start]
tylko wtedy, gdy film jest w standardowym trybie odtwarzania:
... - (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; } }
Włączam tryb obrazu w obrazie
Jeśli korzystasz z usługi AVPlayer
bez AVPlayerViewController
, musisz dodać własny przycisk obraz w obrazie. Zaimplementowaliśmy go w próbce zaawansowanej w ten sposób:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
Najczęstsze pytania
- Jak wyświetlać reklamy, gdy film jest w trybie obraz w obrazie?
- Reklam nie można wyświetlać w trybie obraz w obrazie – można je uruchomić tylko w standardowym trybie odtwarzania.
- Moja obecna integracja z obrazem w obrazie musi ustawić
self.pictureInPictureController.delegate
na moją klasę. Jak mogę wdrożyć reklamy IMA w obrazie, nie tracąc uprawnień do przedstawiciela? - Pakiet IMA SDK musi też otrzymywać komunikaty
AVPictureinPictureControllerDelegate
, aby umożliwić odtwarzanie reklam w trybie obraz w obrazie. Dlatego prosimy o ustawienie przedstawicieliAVPictureinPictureController
na wystąpienieIMAPictureInPicturyProxy
. Ten obiekt proxy przekierowuje wszystkie wiadomościAVPictureinPictureControllerDelegate
do Twojej aplikacji, a także przekazuje wywołania do IMA, by włączyć obsługę obrazu w obrazie. Pamiętaj, że musisz też zachować lokalny nick elementu AVPlayerLayer.