Media Ads (IMA) SDK na iOS.
Ten przewodnik jest przeznaczony dla wydawców korzystających z pakietu IMA SDK, którzy chcą dodać do swojej implementacji pakietu IMA obsługę trybu obraz w obrazie.
Wymagania wstępne
- Zapoznaj się z przewodnikiem dla początkujących.
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ć do aplikacji obsługę obrazu w obrazie, musisz dostosować kilka ustawień i wdrożyć kilka nowych klas IMA, jak pokazano poniżej.
Aktualizowanie ustawień, aby umożliwić odtwarzanie w tle
Tryb obrazu w obrazie wymaga zezwolenia na odtwarzanie multimediów w tle w aplikacji.
Ustaw Tryby w tle na WŁĄCZONY w przypadku Dźwięku, AirPlay i obrazu 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 obrazu w obrazie
Aby obsługiwać obraz w obrazie, firma Apple dodała klasy AVPictureInPictureController
i AVPictureinPictureControllerDelegate
. IMA ze swojej strony dodała 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 reklam
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 IMA SDK nie można uruchamiać w trybie obrazu w obrazie. Dlatego musisz zadbać o to, aby wywoływać funkcję [adsManager start]
tylko wtedy, gdy film jest odtwarzany w trybie standardowym:
... - (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. W naszym zaawansowanym przykładzie wygląda to tak:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
Najczęstsze pytania
- Jak włączyć 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 obecna integracja obrazu w obrazie musi ustawić
self.pictureInPictureController.delegate
na moją klasę. Jak mogę wdrożyć reklamy IMA w trybie obrazu w obrazie i nadal być delegatem? - Pakiet IMA SDK musi też otrzymywać
AVPictureinPictureControllerDelegate
wiadomości, aby umożliwić odtwarzanie reklam w trybie obrazu w obrazie. Dlatego prosimy o ustawienie delegata dlaAVPictureinPictureController
na instancjęIMAPictureInPicturyProxy
. Ten obiekt proxy przekazuje wszystkie komunikaty do aplikacji, ale także przekazuje wywołania do IMA, aby włączyć obsługę obrazu w obrazie.AVPictureinPictureControllerDelegate
Pamiętaj, że musisz też zachować lokalny uchwyt do AVPlayerLayer.