Pakiet IMA SDK do wyświetlania reklam multimedialnych na iOS
Ten przewodnik jest przeznaczony dla wydawców korzystających z pakietu IMA SDK, którzy chcą dodać obsługę trybu obrazu w obrazie do swojej dotychczasowej implementacji pakietu IMA.
Wymagania wstępne
Dodawanie obsługi trybu obrazu w obrazie do aplikacji
Od wersji 3.1.0 pakiet IMA SDK obsługuje tryb obrazu w obrazie firmy Apple na iPadzie. Aby dodać obsługę trybu obrazu w obrazie do aplikacji, musisz zmienić kilka ustawień i zaimplementować kilka nowych klas IMA, jak pokazano poniżej.
Aktualizowanie ustawień, aby zezwolić na odtwarzanie w tle
Tryb obrazu w obrazie wymaga, aby w aplikacji było dozwolone odtwarzanie multimediów w tle.
Ustaw Tryby działania w tle na WŁ. w przypadku opcji Dźwięk, AirPlay i Obraz w obrazie , jak pokazano poniżej:

Ustaw właściwości
AVAudioSession, aby obsługiwać odtwarzanie w tle, a także włącz odtwarzanie w tle wIMASettings:... – (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 na potrzeby trybu obrazu w obrazie
Aby obsługiwać tryb obrazu w obrazie, firma Apple dodała klasy AVPictureInPictureController i AVPictureinPictureControllerDelegate. Ze swojej strony firma IMA dodała klasę IMAPictureInPictureProxy. Aby uwzględnić te klasy w projekcie, 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 reklamy
Musisz utworzyć jeszcze jeden nowy obiekt: IMAAVPlayerVideoDisplay. Jest on przekazywany do konstruktora IMAAdsRequest i umożliwia pakietowi SDK wstawianie reklam do okna PiP, gdy film jest odtwarzany w trybie obrazu 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]; }
Uruchamianie reklam
Reklam nie można uruchamiać w trybie obrazu w obrazie. W związku z tym musisz się upewnić, że wywołujesz [adsManager start] tylko wtedy, gdy film jest odtwarzany 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łączanie trybu obrazu w obrazie
Jeśli używasz AVPlayer bez AVPlayerViewController, musisz
dodać własny przycisk obrazu w obrazie. Zaimplementowaliśmy go w naszym przykładzie zaawansowanym
w ten sposób:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
Najczęstsze pytania
- Jak uruchamiać reklamy, gdy film jest w trybie obrazu w obrazie?
- Reklam nie można uruchamiać, gdy film jest w trybie obrazu w obrazie. Można je uruchamiać tylko w standardowym trybie odtwarzania.
- Moja dotychczasowa integracja trybu obrazu w obrazie musi ustawić
self.pictureInPictureController.delegatena moją własną klasę. Jak mogę zaimplementować reklamy IMA w trybie obrazu w obrazie i nadal być delegatem? - Pakiet IMA SDK musi też otrzymywać komunikaty
AVPictureinPictureControllerDelegate, aby umożliwić odtwarzanie reklam w trybie obrazu w obrazie. Dlatego prosimy o ustawienie delegata dlaAVPictureinPictureControllerna instancjęIMAPictureInPicturyProxy. Ten obiekt proxy przekazuje wszystkie komunikatyAVPictureinPictureControllerDelegatedo Twojej aplikacji, ale też przekazuje wywołania do IMA, aby włączyć obsługę trybu obrazu w obrazie. Pamiętaj, że musisz też zachować lokalny uchwyt do AVPlayerLayer.