Sampaikan masukan Anda dan bantu menyempurnakan rencana pengembangan Google Mobile Ads SDK. Ikuti Survei Tahunan Google Mobile Ads SDK untuk tahun 2023 sebelum ditutup pada tanggal 5 Mei 2023.

Iklan berhadiah

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Iklan reward adalah iklan yang memungkinkan pengguna memilih untuk berinteraksi dengan imbalan reward dalam aplikasi. Panduan ini menunjukkan cara mengintegrasikan iklan reward dari AdMob ke aplikasi iOS. Baca beberapa kisah sukses pelanggan: studi kasus 1, studi kasus 2.

Prasyarat

  • Google Mobile Ads SDK 8.0.0 atau yang lebih tinggi.
  • Selesaikan Panduan memulai.

Selalu uji dengan iklan uji coba

Saat membuat dan menguji aplikasi, pastikan Anda menggunakan iklan pengujian, bukan iklan produksi aktif. Jika Anda tidak melakukannya, akun Anda dapat ditangguhkan.

Cara termudah untuk memuat iklan pengujian adalah dengan menggunakan ID unit iklan pengujian khusus kami untuk iklan reward iOS:

ca-app-pub-3940256099942544/1712485313

Aplikasi ini telah dikonfigurasi secara khusus guna menampilkan iklan pengujian untuk setiap permintaan, dan Anda bebas menggunakannya dalam aplikasi Anda sendiri saat membuat kode, menguji, dan men-debug. Pastikan Anda menggantinya dengan ID unit iklan Anda sendiri sebelum memublikasikan aplikasi.

Untuk informasi selengkapnya tentang cara kerja iklan pengujian Mobile Ads SDK, lihat Menguji Iklan.

Implementasi

Langkah utama untuk mengintegrasikan iklan interstisial reward adalah sebagai berikut:

  • Memuat iklan
  • [Opsional] Memvalidasi callback SSV
  • Mendaftar untuk callback
  • Menampilkan iklan dan menangani peristiwa reward

Memuat iklan

Pemuatan iklan dilakukan menggunakan metode loadWithAdUnitID:request:completionHandler: statis di class GADRewardedAd. Metode pemuatan memerlukan ID unit iklan, objek GADRequest, dan pengendali penyelesaian yang dipanggil saat pemuatan iklan berhasil atau gagal. Objek GADRewardedAd yang dimuat diberikan sebagai parameter dalam pengendali penyelesaian. Contoh di bawah ini menunjukkan cara memuat GADRewardedAd di class ViewController Anda.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
    }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
      }];
}

[Opsional] Memvalidasi callback verifikasi sisi server (SSV)

Aplikasi yang memerlukan data tambahan dalam callback verifikasi sisi server harus menggunakan fitur data kustom iklan reward. Setiap nilai string yang ditetapkan pada objek iklan reward diteruskan ke parameter kueri custom_data dari callback SSV. Jika tidak ada nilai data kustom yang ditetapkan, parameter value kueri custom_data tidak akan ada dalam callback SSV.

Contoh kode berikut menunjukkan cara menetapkan data kustom pada objek iklan reward sebelum meminta iklan.

Swift

GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error != error {
      rewardedInterstitialAd = ad
      let options = GADServerSideVerificationOptions()
      options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
      rewardedInterstitialAd.serverSideVerificationOptions = options
    }

Objective-C

GADRequest *request = [GADRequest request];
[GADRewardedInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:request
    completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) {
      if (error) {
        // Handle Error
        return;
      }
      self.rewardedInterstitialAd = ad;
      GADServerSideVerificationOptions *options =
          [[GADServerSideVerificationOptions alloc] init];
      options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad.serverSideVerificationOptions = options;
    }];

Mendaftar untuk callback

Agar dapat menerima notifikasi untuk peristiwa presentasi, Anda harus menerapkan protokol GADFullScreenContentDelegate dan menetapkannya ke properti fullScreenContentDelegate dari iklan yang ditampilkan. Protokol GADFullScreenContentDelegate menangani callback saat iklan berhasil ditampilkan atau gagal, dan saat iklan ditutup. Kode berikut menunjukkan cara menerapkan protokol dan menetapkannya ke iklan:

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                     request: request,
                     completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
      rewardedAd?.fullScreenContentDelegate = self
    }
    )
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
        self.rewardedAd.fullScreenContentDelegate = self;
      }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad did dismiss full screen content.");
}

GADRewardedAd adalah objek yang hanya dapat digunakan satu kali. Artinya, setelah iklan reward ditampilkan, iklan reward tidak dapat ditampilkan lagi. Praktik terbaiknya adalah memuat iklan reward lain dalam metode adDidDismissFullScreenContent: di GADFullScreenContentDelegate sehingga iklan reward berikutnya mulai dimuat begitu iklan sebelumnya ditutup.

Menampilkan iklan dan menangani peristiwa reward

Sebelum menampilkan iklan reward kepada pengguna, Anda harus memberikan pilihan eksplisit kepada pengguna untuk melihat konten iklan reward. Iklan reward harus selalu menjadi pengalaman keikutsertaan.

Saat menampilkan iklan, Anda harus memberikan objek GADUserDidEarnRewardHandler untuk menangani reward bagi pengguna.

Kode berikut menampilkan metode terbaik untuk menampilkan iklan reward.

Swift

func show() {
  if let ad = rewardedAd {
    ad.present(fromRootViewController: self) {
      let reward = ad.adReward
      print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
      // TODO: Reward the user.
    }
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (void)show {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                                  userDidEarnRewardHandler:^{
                                  GADAdReward *reward =
                                      self.rewardedAd.adReward;
                                  // TODO: Reward the user!
                                }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

FAQ

Bisakah saya mendapatkan detail reward untuk GADRewardedAd?
Ya, jika Anda memerlukan jumlah reward sebelum callback userDidEarnReward diaktifkan, GADRewardedAd memiliki properti adReward yang dapat Anda periksa untuk memverifikasi jumlah reward setelah iklan dimuat.
Apakah ada waktu tunggu untuk panggilan inisialisasi?
Setelah 10 detik, Google Mobile Ads SDK memanggil GADInitializationCompletionHandler yang diberikan ke metode startWithCompletionHandler:, meskipun jaringan mediasi masih belum menyelesaikan inisialisasi.
Bagaimana jika beberapa jaringan mediasi belum siap saat saya mendapatkan callback inisialisasi?

Sebaiknya muat iklan di dalam GADInitializationCompletionHandler. Meskipun jaringan mediasi belum siap, Google Mobile Ads SDK tetap meminta iklan dari jaringan tersebut. Jadi, jika jaringan mediasi selesai melakukan inisialisasi setelah waktu tunggu, jaringan ini masih dapat melayani permintaan iklan mendatang di sesi tersebut.

Anda dapat terus memeriksa status inisialisasi semua adaptor di seluruh sesi aplikasi dengan memanggil GADMobileAds.initializationStatus.

Bagaimana cara mengetahui mengapa jaringan mediasi tertentu belum siap?

Properti description dari objek GADAdapterStatus menjelaskan mengapa adaptor belum siap menayangkan permintaan iklan.

Apakah pengendali penyelesaian userDidEarnRewardHandler selalu dipanggil sebelum metode delegasi adDidDismissFullScreenContent:?

Untuk iklan Google, semua panggilan userDidEarnRewardHandler dilakukan sebelum adDidDismissFullScreenContent:. Untuk iklan yang ditayangkan melalui mediasi, penerapan SDK jaringan iklan pihak ketiga menentukan urutan callback. Untuk SDK jaringan iklan yang menyediakan satu metode delegasi dengan informasi reward, adaptor mediasi akan memanggil userDidEarnRewardHandler sebelum adDidDismissFullScreenContent:.

Contoh di GitHub