Iklan reward adalah iklan yang menyediakan banyak opsi interaksi untuk pengguna dengan imbalan reward dalam aplikasi. Panduan ini menunjukkan cara mengintegrasikan iklan reward dari AdMob ke dalam aplikasi iOS. Baca beberapa kisah sukses pelanggan: studi kasus 1, studi kasus 2.
Prasyarat
Sebelum melanjutkan, siapkan Google Mobile Ads SDK.
Selalu melakukan pengujian dengan iklan percobaan
Saat membangun dan menguji aplikasi, pastikan Anda menggunakan iklan percobaan, bukan iklan produksi langsung. Jika Anda tidak melakukannya, akun Anda dapat ditangguhkan.
Cara termudah untuk memuat iklan percobaan adalah dengan menggunakan ID unit iklan percobaan khusus kami untuk iklan reward iOS:
ca-app-pub-3940256099942544/1712485313
Iklan ini telah dikonfigurasi secara khusus agar menampilkan iklan percobaan untuk setiap permintaan, dan Anda dapat menggunakannya di aplikasi Anda sendiri saat melakukan coding, pengujian, dan proses debug. Pastikan Anda menggantinya dengan ID unit iklan Anda sendiri sebelum memublikasikan aplikasi.
Untuk mengetahui informasi selengkapnya tentang cara kerja iklan percobaan Google Mobile Ads SDK, lihat Iklan Percobaan.
Penerapan
Langkah-langkah utama untuk mengintegrasikan iklan reward adalah sebagai berikut:
- Memuat iklan
- [Opsional] Memvalidasi callback SSV
- Mendaftarkan callback
- Menampilkan iklan dan menangani peristiwa reward
Memuat iklan
Pemuatan iklan dilakukan menggunakan load(adUnitID:request)
metode pada class GADRewardedAd.
Swift
func loadRewardedAd() async {
do {
rewardedAd = try await RewardedAd.load(
// Replace this ad unit ID with your own ad unit ID.
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: RewardedAd?
func loadAd() async {
do {
rewardedAd = try await RewardedAd.load(
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad with error: \(error.localizedDescription)")
}
}
Objective-C
// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest request]
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
return;
}
self.rewardedAd = ad;
self.rewardedAd.fullScreenContentDelegate = self;
}];
[Opsional] Memvalidasi callback verifikasi sisi server (SSV)
Aplikasi yang memerlukan data tambahan dalam verifikasi
sisi server callback harus menggunakan fitur data kustom
iklan reward. Nilai string apa pun yang ditetapkan pada objek iklan reward akan diteruskan ke parameter kueri custom_data dari callback SSV. Jika tidak ada nilai data kustom yang ditetapkan, nilai parameter 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
Objective-C
Ganti SAMPLE_CUSTOM_DATA_STRING dengan data kustom Anda.
Mendaftarkan callback
Untuk menerima notifikasi peristiwa presentasi, Anda harus menetapkan GADFullScreenContentDelegate ke properti fullScreenContentDelegate dari iklan yang ditampilkan:
Swift
rewardedAd?.fullScreenContentDelegate = self
SwiftUI
rewardedAd?.fullScreenContentDelegate = self
Objective-C
self.rewardedAd.fullScreenContentDelegate = self;
Protokol GADFullScreenContentDelegate menangani callback saat iklan ditampilkan dengan berhasil atau gagal, dan saat iklan ditutup. Kode berikut menunjukkan cara mengimplementasikan protokol:
Swift
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
// Clear the rewarded ad.
rewardedAd = nil
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called with error: \(error.localizedDescription).")
}
SwiftUI
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
Objective-C
- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
// Clear the rewarded ad.
self.rewardedAd = nil;
}
- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}
Menampilkan iklan dan menangani peristiwa reward
Sebelum menampilkan iklan reward kepada pengguna, Anda harus memberi pengguna pilihan eksplisit untuk melihat konten iklan reward sebagai imbalan atas reward. Iklan reward harus selalu menjadi pengalaman yang dapat dipilih.
Saat menampilkan iklan, Anda harus menyediakan objek GADUserDidEarnRewardHandler untuk menangani reward bagi pengguna.
Kode berikut menampilkan metode terbaik untuk menampilkan iklan reward:
Swift
rewardedAd.present(from: self) {
let reward = rewardedAd.adReward
print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
// TODO: Reward the user.
}
SwiftUI
Dengarkan peristiwa UI dalam tampilan untuk menentukan kapan iklan akan ditampilkan.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
Tampilkan iklan reward dari model tampilan:
func showAd() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
rewardedAd.present(from: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
Objective-C
[self.rewardedAd presentFromRootViewController:self
userDidEarnRewardHandler:^{
GADAdReward *reward = self.rewardedAd.adReward;
NSString *rewardMessage = [NSString
stringWithFormat:@"Reward received with currency %@ , amount %lf",
reward.type, [reward.amount doubleValue]];
NSLog(@"%@", rewardMessage);
// TODO: Reward the user.
}];
FAQ
- Dapatkah saya mendapatkan detail reward untuk
GADRewardedAd? - Ya, jika Anda memerlukan jumlah reward sebelum
userDidEarnRewardcallback diaktifkan,GADRewardedAdmemilikiadRewardproperti 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 akan memanggil
GADInitializationCompletionHandleryang disediakan untukstartWithCompletionHandler:metode, 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 diinisialisasi setelah waktu tunggu berakhir, jaringan tersebut masih dapat melayani permintaan iklan mendatang dalam sesi tersebut.Anda dapat terus melakukan polling status inisialisasi semua adapter di seluruh sesi aplikasi dengan memanggil
GADMobileAds.initializationStatus.- Bagaimana cara mengetahui alasan jaringan mediasi tertentu belum siap?
Properti
descriptiondari objekGADAdapterStatusmenjelaskan alasan adapter belum siap untuk melayani permintaan iklan.- Apakah pengendali penyelesaian
userDidEarnRewardHandlerselalu dipanggil sebelum metode delegasiadDidDismissFullScreenContent:? Untuk iklan Google, semua panggilan
userDidEarnRewardHandlerterjadi sebelumadDidDismissFullScreenContent:. 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, adapter mediasi akan memanggiluserDidEarnRewardHandlersebelumadDidDismissFullScreenContent:.
Contoh di GitHub
Lihat contoh iklan reward lengkap dalam bahasa pilihan Anda:
Langkah berikutnya
Pelajari privasi pengguna lebih lanjut.