Menerapkan iklan picture-in-picture (beta)

Pilih platform: Android iOS

Picture-in-picture

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:

Memuat iklan

Untuk memuat objek GADPictureInPictureAd, buat permintaan iklan dan panggil metode load:

Swift

private func loadPictureInPictureAd() async {
  do {
    // Capture the PictureInPictureAd reference for later use.
    pipAd = try await PictureInPictureAd.load(
      with: adUnitID, request: Request())
    // Set the delegate to be notified of ad events.
    pipAd?.delegate = self
  } catch {
    print(
      "Picture-in-Picture ad failed to load: \(error.localizedDescription)")
  }
}

Ganti adUnitID dengan ID unit iklan Anda.

Objective-C

- (void)loadPictureInPictureAd {
  GADRequest *request = [GADRequest request];

  [GADPictureInPictureAd
       loadWithAdUnitID:kAdUnitID
                request:request
      completionHandler:^(GADPictureInPictureAd *_Nullable ad, NSError *_Nullable error) {
        if (error) {
          NSLog(@"Picture-in-Picture ad failed to load: %@", error);
          return;
        }
        // Capture the PictureInPictureAd reference for later use.
        self.pipAd = ad;
        // Set the delegate to be notified of ad events.
        self.pipAd.delegate = self;
      }];
}

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.