Iklan picture-in-picture (PiP) ditampilkan di jendela mengambang yang tetap berada di atas konten di layar, seperti artikel, feed, atau gameplay. Format ini memungkinkan pengguna berinteraksi dengan aplikasi Anda saat iklan tetap terlihat. Untuk menampilkan iklan yang tidak mengambil alih seluruh layar, pilih format ini. Pelajari lebih lanjut iklan picture-in-picture.
Panduan ini membahas cara meminta dan menampilkan iklan picture-in-picture di aplikasi Anda menggunakan Google Mobile Ads SDK.
Sebelum memulai
Sebelum Anda melanjutkan, lakukan hal berikut:
Instal Google Mobile Ads SDK versi
13.10.0atau yang lebih baru.Aktifkan iklan percobaan dan gunakan ID unit iklan percobaan berikut:
ca-app-pub-3940256099942544/8810945611
Memuat iklan
Untuk memuat objek
GADPictureInPictureAd, buat permintaan iklan dan panggil metode load:
Swift
Ganti adUnitID dengan ID unit iklan Anda.
Objective-C
Ganti kAdUnitID dengan ID unit iklan Anda.
Menampilkan iklan
Untuk menampilkan iklan picture-in-picture di layar, konfigurasi opsi picture-in-picture Anda dan panggil metode show. Contoh berikut
menetapkan posisi default iklan dan cakupan presentasi ke layar:
Swift
private func showPictureInPictureAd() { // Use the loaded PictureInPictureAd instance. guard let pipAd else { print("No ad to show.") return } let options = PictureInPictureAdOptions() // Uses the Google Mobile Ads SDK's default screen position. options.position = .default // Binds the ad lifecycle to the host screen. options.presentationScope = .screen pipAd.show(with: options) }
Objective-C
- (void)showPictureInPictureAd { // Use the loaded PictureInPictureAd instance. if (!self.pipAd) { NSLog(@"No ad to show."); return; } GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Uses the Google Mobile Ads SDK's default screen position. options.position = GADPictureInPictureAdPositionDefault; // Binds the ad lifecycle to the host screen. options.presentationScope = GADPictureInPictureAdPresentationScopeScreen; [self.pipAd showWithOptions:options]; }
Menetapkan posisi
Secara default, Google Mobile Ads SDK menampilkan iklan picture-in-picture di pojok kanan bawah layar saat pertama kali ditampilkan, atau di posisi terakhir yang diketahui jika sebelumnya ditampilkan. Untuk menyesuaikan tempat iklan muncul, tetapkan posisi di opsi picture-in-picture Anda. Contoh berikut menetapkan posisi di atas konten di sudut kiri atas layar:
Swift
private func createTopLeftPositionOptions() -> PictureInPictureAdOptions { let options = PictureInPictureAdOptions() // Sets the ad position to the top-left corner of the screen. options.position = .topLeft return options }
Objective-C
- (GADPictureInPictureAdOptions *)createTopLeftPositionOptions { GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Sets the ad position to the top-left corner of the screen. options.position = GADPictureInPictureAdPositionTopLeft; return options; }
Untuk semua posisi yang tersedia, lihat
GADPictureInPictureAdPosition.
Menetapkan cakupan presentasi
Secara default, Google Mobile Ads SDK mengikat iklan picture-in-picture ke layar host saat ini. Google Mobile Ads SDK menutup iklan saat hierarki tampilan layar host tidak lagi ada dalam memori. Agar iklan tetap terlihat setelah layar host dihapus dari memori, tetapkan cakupan presentasi ke aplikasi:
Swift
private func createApplicationScopedOptions() -> PictureInPictureAdOptions { let options = PictureInPictureAdOptions() // Keeps the ad visible beyond the host screen's lifecycle. options.presentationScope = .application return options }
Objective-C
- (GADPictureInPictureAdOptions *)createApplicationScopedOptions { GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Keeps the ad visible beyond the host screen's lifecycle. options.presentationScope = GADPictureInPictureAdPresentationScopeApplication; return options; }
Untuk mengetahui informasi selengkapnya, lihat Membuat iklan tetap terlihat di seluruh layar.
Menetapkan callback peristiwa iklan
Untuk menangani peristiwa siklus proses iklan picture-in-picture, tetapkan callback peristiwa pada iklan Anda sebelum menayangkannya. Callback ini melaporkan peristiwa standar, seperti klik dan tayangan iklan. Callback ini juga melaporkan peristiwa khusus picture-in-picture seperti saat iklan ditampilkan atau disembunyikan:
Swift
func pictureInPictureAdDidShow(_ pictureInPictureAd: PictureInPictureAd) { print("Picture-in-Picture ad shown.") } func pictureInPictureAdDidHide(_ pictureInPictureAd: PictureInPictureAd) { print("Picture-in-Picture ad hidden.") } func pictureInPictureAdDidFailToShow( _ pictureInPictureAd: PictureInPictureAd, error: Error ) { print("Picture-in-Picture ad failed to show: \(error.localizedDescription)") } func pictureInPictureAdDidRecordImpression( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad recorded an impression.") } func pictureInPictureAdDidRecordClick( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad recorded a click.") } func pictureInPictureAdWillPresentScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad will present screen.") } func pictureInPictureAdWillDismissScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad will dismiss screen.") } func pictureInPictureAdDidDismissScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad dismissed screen.") }
Objective-C
- (void)pictureInPictureAdDidShow:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad shown."); } - (void)pictureInPictureAdDidHide:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad hidden."); } - (void)pictureInPictureAdDidFailToShow:(GADPictureInPictureAd *)pictureInPictureAd withError:(NSError *)error { NSLog(@"Picture-in-Picture ad failed to show: %@", error); } - (void)pictureInPictureAdDidRecordImpression:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad recorded an impression."); } - (void)pictureInPictureAdDidRecordClick:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad recorded a click."); } - (void)pictureInPictureAdWillPresentScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad will present screen."); } - (void)pictureInPictureAdWillDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad will dismiss screen."); } - (void)pictureInPictureAdDidDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad dismissed screen."); }
Menyembunyikan iklan
Untuk menghapus iklan mengambang dari layar, panggil metode hide. Metode ini
memanggil callback peristiwa iklan tersembunyi:
Swift
private func hidePictureInPictureAd() { // Use the loaded PictureInPictureAd instance. guard let pipAd else { print("No ad to hide.") return } pipAd.hide() }
Objective-C
- (void)hidePictureInPictureAd { // Use the loaded PictureInPictureAd instance. if (!self.pipAd) { NSLog(@"No ad to hide."); return; } [self.pipAd hide]; }
Membersihkan resource iklan
Untuk menghindari kebocoran memori, hapus referensi Anda ke objek iklan saat aplikasi Anda selesai menggunakan iklan. Misalnya, saat aplikasi Anda tidak lagi menampilkan atau berinteraksi dengan iklan lagi. Untuk iklan cakupan layar, hapus referensi saat aplikasi Anda menghapus layar host dari memori. Untuk iklan cakupan aplikasi, pertahankan referensi iklan saat pengguna menjelajahi layar, dan hapus referensi saat pengguna menutup iklan:
Swift
private func cleanUpPictureInPictureAd() { pipAd?.hide() pipAd = nil }
Objective-C
- (void)cleanUpPictureInPictureAd { [self.pipAd hide]; self.pipAd = nil; }
Memastikan iklan tetap terlihat di seluruh layar
Saat Anda menyetel cakupan presentasi ke aplikasi, iklan picture-in-picture tetap terlihat meskipun aplikasi Anda menghapus layar hosting dari memori. Untuk berinteraksi dengan atau menutup iklan saat pengguna keluar dari layar host, aplikasi Anda harus mempertahankan akses ke iklan picture-in-picture. Sebaiknya tahan iklan dalam singleton tingkat aplikasi atau pengelola status bersama, bukan dalam variabel instance satu layar.