Panduan ini ditujukan bagi penayang IMA yang ingin menambahkan dukungan Picture-in Picture ke penerapan IMA yang sudah ada.
Prasyarat
- Selesaikan Panduan Memulai.
Menambahkan dukungan picture-in-picture ke aplikasi Anda
Mulai SDK versi 3.1.0, IMA mendukung mode Picture in Picture Apple untuk iPad. Guna menambahkan dukungan untuk Picture-in-Picture ke aplikasi, Anda perlu menyesuaikan beberapa setelan dan menerapkan beberapa class IMA baru, seperti yang ditampilkan di bawah ini.
Memperbarui setelan untuk mengizinkan pemutaran di latar belakang
Mode Picture in Picture mengharuskan Anda mengizinkan pemutaran media latar belakang di aplikasi.
Setel Background Modes ke ON untuk Audio, AirPlay, dan Picture in Picture seperti yang ditunjukkan di bawah:
Tetapkan properti
AVAudioSession
untuk mendukung pemutaran latar belakang, serta mengaktifkan pemutaran latar belakang diIMASettings
:... – (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; }
Membuat objek iOS dan IMA baru untuk picture-in-picture
Untuk mendukung Picture-in-Picture, Apple menambahkan class AVPictureInPictureController
dan AVPictureinPictureControllerDelegate
. IMA, sebagai gantinya, menambahkan
IMAPictureInPictureProxy
. Untuk menyertakan class ini dalam project Anda, tambahkan
pernyataan berikut ke kode Anda:
... @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; }
Mengubah permintaan iklan Anda
Ada satu objek baru lagi yang akan dibuat: IMAAVPlayerVideoDisplay
. Ini diteruskan
ke konstruktor IMAAdsRequest
dan memungkinkan SDK menyisipkan iklan ke jendela
PiP saat video diputar dalam mode Picture-in-Picture:
... - (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]; }
Memulai iklan
Iklan IMA SDK tidak dapat dimulai selama mode picture-in-picture. Akibatnya,
Anda perlu memastikan bahwa Anda hanya memanggil [adsManager start]
saat video berada dalam
mode pemutaran standar:
... - (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; } }
Memasuki mode picture-in-picture
Jika menggunakan AVPlayer
tanpa AVPlayerViewController
, Anda harus
menambahkan tombol Picture-in-Picture Anda sendiri. Kami telah menerapkan satu di Contoh
Lanjutan
seperti ini:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
FAQ
- Bagaimana cara memulai iklan saat video berada dalam mode Picture-in-Picture?
- Iklan tidak dapat dimulai saat video berada dalam mode Picture-in-Picture; iklan hanya dapat dimulai dalam mode pemutaran standar.
- Integrasi Picture-in-Picture yang ada harus menetapkan
self.pictureInPictureController.delegate
ke class saya sendiri. Bagaimana cara menerapkan iklan IMA dalam Picture-in-Picture dan tetap menjadi delegasi? - IMA SDK juga perlu menerima pesan
AVPictureinPictureControllerDelegate
untuk mengaktifkan pemutaran iklan dalam mode Picture-in-Picture. Inilah alasan kami meminta Anda menetapkan delegasi untukAVPictureinPictureController
ke instanceIMAPictureInPicturyProxy
. Objek proxy ini meneruskan semua pesanAVPictureinPictureControllerDelegate
ke aplikasi Anda, tetapi juga meneruskan panggilan ke IMA untuk mengaktifkan dukungan Picture-in-Picture. Perhatikan bahwa Anda juga harus mempertahankan handle lokal untuk AVPlayerLayer.