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
- Selesaikan Panduan memulai.
Selalu lakukan pengujian dengan iklan percobaan
Saat membuat 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
ID ini telah dikonfigurasi secara khusus untuk menampilkan iklan pengujian untuk setiap permintaan, dan Anda bebas menggunakannya di aplikasi Anda sendiri saat melakukan coding, pengujian, dan pen-debugan. Pastikan Anda menggantinya dengan ID unit iklan Anda sendiri sebelum memublikasikan aplikasi.
Untuk mengetahui informasi selengkapnya tentang cara kerja iklan percobaan Mobile Ads SDK, lihat Iklan Percobaan.
Penerapan
Langkah-langkah utama untuk mengintegrasikan iklan 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 load(adUnitID:request)
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 callback verifikasi sisi server harus menggunakan fitur data kustom iklan reward. Nilai string apa pun yang ditetapkan pada objek iklan bersedia ditonton 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 menyetel data kustom pada objek iklan reward sebelum meminta iklan:
Swift
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())
let options = ServerSideVerificationOptions()
options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
rewardedAd?.serverSideVerificationOptions = options
} catch {
print("Rewarded ad failed to load 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;
GADServerSideVerificationOptions *options =
[[GADServerSideVerificationOptions alloc] init];
options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
ad.serverSideVerificationOptions = options;
}];
Mendaftar untuk callback
Untuk menerima notifikasi untuk peristiwa presentasi, Anda harus menetapkan properti
GADFullScreenContentDelegate to the
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
berhasil atau gagal ditampilkan, dan saat iklan ditutup. Kode berikut menunjukkan cara menerapkan 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 memberikan pilihan eksplisit kepada pengguna untuk melihat konten iklan reward sebagai imbalan atas reward. Iklan bersama reward harus selalu menjadi pengalaman keikutsertaan.
Saat menampilkan iklan, Anda harus memberikan objek GADUserDidEarnRewardHandler
untuk menangani reward bagi pengguna.
Kode berikut menunjukkan 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
Memproses peristiwa UI di 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
}
Menampilkan 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
- Bisakah saya mendapatkan detail hadiah untuk
GADRewardedAd
? - Ya, jika Anda memerlukan jumlah reward sebelum callback
userDidEarnReward
dipicu,GADRewardedAd
memiliki propertiadReward
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 metodestartWithCompletionHandler:
, meskipun jaringan mediasi 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 habis, jaringan tersebut masih dapat melayani permintaan iklan mendatang dalam sesi tersebut.Anda dapat terus melakukan polling status inisialisasi semua adaptor selama sesi aplikasi dengan memanggil
GADMobileAds.initializationStatus
.- Bagaimana cara mengetahui alasan jaringan mediasi tertentu tidak siap?
Properti
description
dari objekGADAdapterStatus
menjelaskan alasan adaptor belum siap melayani permintaan iklan.- Apakah pengendali penyelesaian
userDidEarnRewardHandler
selalu dipanggil sebelum metode delegasiadDidDismissFullScreenContent:
? Untuk iklan Google, semua panggilan
userDidEarnRewardHandler
terjadi 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, adaptor mediasi memanggiluserDidEarnRewardHandler
sebelumadDidDismissFullScreenContent:
.
Contoh di GitHub
Lihat contoh lengkap iklan reward dalam bahasa pilihan Anda:
Langkah berikutnya
Pelajari lebih lanjut privasi pengguna.