Bu kılavuz, mevcut IMA uygulamalarına Pencere İçinde Pencere desteği eklemek isteyen IMA yayıncıları için hazırlanmıştır.
Ön koşullar
- Başlangıç kılavuzunu tamamlayın.
Uygulamanıza pencere içinde pencere desteği ekleme
IMA, SDK sürüm 3.1.0'dan itibaren iPad için Apple'ın Ekran İçinde Pencere modunu desteklemektedir. Uygulamanıza Pencere İçinde Pencere desteği eklemek için aşağıda gösterildiği gibi birkaç ayarda ince ayar yapmanız ve birkaç yeni IMA sınıfı uygulamanız gerekir.
Ayarlar, arka planda oynatmaya izin verecek şekilde güncelleniyor
Pencere İçinde Pencere modu, uygulamanızda arka planda medya oynatmaya izin vermenizi gerektirir.
Ses, AirPlay ve Pencere İçinde Pencere için Arka Plan Modları'nı aşağıda gösterildiği gibi AÇIK olarak ayarlayın:
AVAudioSession
özelliklerini arka planda oynatmayı destekleyecek şekilde ayarlayın veIMASettings
ürününde arka planda oynatmayı etkinleştirin:... – (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; }
Pencere içinde pencere için yeni iOS ve IMA nesneleri oluşturma
Apple, Pencere İçinde Pencere özelliğini desteklemek için AVPictureInPictureController
ve AVPictureinPictureControllerDelegate
sınıflarını ekledi. IMA, kendi tarafında IMAPictureInPictureProxy
özelliğini ekledi. Bu sınıfları projenize dahil etmek için aşağıdaki ifadeleri kodunuza ekleyin:
... @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; }
Reklam isteğinizi değiştirme
Oluşturulacak bir yeni nesne daha var: IMAAVPlayerVideoDisplay
. Bu değer, IMAAdsRequest
oluşturucunuza iletilir ve videonuz Resim İçinde Pencere modunda oynatılırken SDK'nın PiP penceresine reklam eklemesine olanak tanır:
... - (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]; }
Reklamları başlatma
IMA SDK reklamları pencere içinde pencere modunda başlatılamaz. Bu nedenle, [adsManager start]
yöntemini yalnızca videonuz standart oynatma modundayken çağırdığınızdan emin olmanız gerekir:
... - (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; } }
Pencere içinde pencere moduna giriliyor
AVPlayerViewController
içermeyen bir AVPlayer
kullanıyorsanız kendi Resim İçinde Pencere düğmenizi eklemeniz gerekir. Gelişmiş Örneğimizde aşağıdaki gibi bir örnek uyguladık:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
SSS
- Video Pencere İçinde Pencere modundayken reklamları nasıl başlatırım?
- Reklamlar, video Pencere İçinde Pencere modundayken başlatılamaz; yalnızca standart oynatma modunda başlatılabilir.
- Mevcut Pencere İçinde Pencere entegrasyonumun
self.pictureInPictureController.delegate
ayarını kendi sınıfım olarak ayarlaması gerekiyor. IMA reklamları Pencere İçinde Pencerede kullanırken nasıl yetki verebilirim? - Pencere içinde pencere modunda reklam oynatmayı etkinleştirmek için IMA SDK'nın
AVPictureinPictureControllerDelegate
mesaj alması da gerekir. Bu nedenle,AVPictureinPictureController
için temsilciyiIMAPictureInPicturyProxy
örneğiyle ayarlamanızı rica ediyoruz. Bu proxy nesnesi, tümAVPictureinPictureControllerDelegate
mesajlarını uygulamanıza yönlendirir ancak Pencere İçinde Pencere desteğini etkinleştirmek için çağrıları IMA'ya yönlendirir. Ayrıca AVPlayerKatman için yerel bir herkese açık kullanıcı adı sağlamanız gerektiğini unutmayın.