Media Ads (IMA) SDK'sı (iOS)
Bu kılavuz, mevcut IMA uygulamalarına resim içinde resim desteği eklemek isteyen IMA yayıncıları içindir.
Ö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'de Apple'ın resim içinde resim modunu desteklemektedir. Uygulamanıza resim içinde resim desteği eklemek için aşağıdaki örnekte gösterildiği gibi birkaç ayarı değiştirmeniz ve birkaç yeni IMA sınıfı uygulamanız gerekir.
Arka planda oynatmaya izin vermek için ayarları güncelleme
Pencere içinde pencere modu için uygulamanızda arka planda medya oynatmaya izin vermeniz gerekir.
Aşağıda gösterildiği gibi Ses, AirPlay ve Pencere İçinde Pencere için Arka Plan Modları'nı AÇIK olarak ayarlayın:
Arka planda oynatmayı desteklemek için
AVAudioSession
özelliklerini ayarlayın veIMASettings
'da 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, resim içinde resim özelliğini desteklemek için AVPictureInPictureController
ve AVPictureinPictureControllerDelegate
sınıflarını ekledi. IMA ise IMAPictureInPictureProxy
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şturulması gereken bir yeni nesne daha var: IMAAVPlayerVideoDisplay
. Bu, IMAAdsRequest
oluşturucunuza iletilir ve SDK'nın, videonuz pencere içinde pencere modunda oynatılırken 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, yalnızca videonuz standart oynatma modundayken [adsManager start]
işlevini ç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 geçme
AVPlayerViewController
olmadan AVPlayer
kullanıyorsanız kendi resim içinde resim düğmenizi eklemeniz gerekir. AdvancedSample'da
bunu şu şekilde uyguladık:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
SSS
- Video, ekran içinde ekran modundayken reklamları nasıl başlatırım?
- Video, ekran içinde ekran modundayken reklamlar başlatılamaz. Reklamlar yalnızca standart oynatma modunda başlatılabilir.
- Mevcut resim içinde resim entegrasyonumun
self.pictureInPictureController.delegate
değerini kendi sınıfıma ayarlaması gerekiyor. Resim İçinde Resim'de IMA reklamlarını nasıl uygulayabilirim ve yine de temsilci olabilir miyim? - IMA SDK'nın, resim içinde resim modunda reklam oynatmayı etkinleştirmek için
AVPictureinPictureControllerDelegate
mesajlarını da alması gerekir. Bu nedenle,AVPictureinPictureController
için temsilciyiIMAPictureInPicturyProxy
örneği olarak ayarlamanızı istiyoruz. Bu proxy nesnesi, tümAVPictureinPictureControllerDelegate
mesajları uygulamanıza yönlendirir ancak Resim İçinde Resim desteğini etkinleştirmek için IMA'ya yapılan çağrıları da yönlendirir. AVPlayerLayer'ınız için yerel bir tutma yeri de bulundurmanız gerektiğini unutmayın.