Bu kılavuz, Resim eklemek isteyen IMA yayıncılarına yöneliktir. Mevcut IMA uygulamaları için resim desteği.
Ön koşullar
- Başlangıç kılavuzunu tamamlayın.
Uygulamanıza pencere içinde pencere desteği ekleme
IMA, SDK 3.1.0 sürümü itibarıyla iPad için Apple'ın Pencere İçinde Pencere modunu destekler. Uygulamanıza Pencere İçinde Pencere desteği eklemek için aşağıdaki gibi birkaç ayarı değiştirmeniz ve birkaç yeni IMA sınıfı uygulamanız gerekir.
Ayarlar, arka planda oynatmaya izin verecek şekilde güncelleniyor
Pencere iç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
mülklerini arka planda oynatmayı destekleyecek şekilde ayarlayın veIMASettings
'te 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, Pencerede Pencere özelliğini desteklemek için AVPictureInPictureController
ve AVPictureinPictureControllerDelegate
sınıflarını ekledi. IMA ise IMAPictureInPictureProxy
değerini ekledi. Bu sınıfları projenize dahil etmek için kodunuza aşağıdaki ifadeleri 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
kurucunuza iletilir ve videonuz Pencere İçinde Pencere modunda oynatıldığında 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]; }
Reklam başlatma
IMA SDK reklamları, pencere içinde pencere modunda başlatılamaz. Bu nedenle, [adsManager start]
işlevini yalnızca videonuz standart oynatma modundayken çağırmanı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 geçme
AVPlayerViewController
olmadan AVPlayer
kullanıyorsanız kendi Pencere İçinde Pencere düğmenizi eklemeniz gerekir. İleri Seviye Örneğimizde aşağıdaki gibi bir tane uyguladık:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
SSS
- Video Pencere İçinde Pencere modundayken nasıl reklam başlatabilirim?
- Video, Pencere İçinde Pencere modundayken reklamlar başlatılamaz. Yalnızca standart oynatma modunda başlatılabilir.
- Mevcut Pencere İçinde Pencere entegrasyonum için
self.pictureInPictureController.delegate
değerinin kendi sınıfım olarak ayarlanması gerekiyor. IMA reklamlarını, Büyük Resim modunda uygularken nasıl temsilci olmaya devam edebilirim? - Reklam oynatmanın Pencere İçinde Pencere modunda etkinleştirilebilmesi için IMA SDK'sının
AVPictureinPictureControllerDelegate
mesajları da alması gerekir. Bu nedenle,AVPictureinPictureController
için temsilciyiIMAPictureInPicturyProxy
örneğine ayarlamanızı rica ediyoruz. Bu proxy nesnesi, tümAVPictureinPictureControllerDelegate
mesajlarını uygulamanıza iletir ancak Pencere İçinde Pencere desteğini etkinleştirmek için çağrıları IMA'ya da iletir. Ayrıca şunu da unutmayın: AVPlayerKatman'ınızın yerel bir herkese açık kullanıcı adı olmasını sağlayın.