Iklan reward adalah iklan yang memiliki opsi untuk berinteraksi dengan pengguna sebagai imbalan untuk reward dalam aplikasi. Panduan ini menunjukkan cara mengintegrasikan iklan reward dari Ad Manager ke dalam aplikasi iOS.
Prasyarat
- Google Mobile Ads SDK 8.0.0 atau yang lebih tinggi.
- Selesaikan Panduan memulai.
Selalu uji dengan iklan percobaan
Saat membuat dan menguji aplikasi, pastikan Anda menggunakan iklan percobaan, bukan iklan produksi secara langsung. Jika Anda tidak melakukannya, akun Anda dapat ditangguhkan.
Cara termudah untuk memuat iklan percobaan adalah dengan menggunakan ID unit iklan percobaan khusus untuk iOS iklan reward:
/21775744923/example/rewarded
URL ini telah dikonfigurasi secara khusus agar menampilkan iklan percobaan untuk setiap permintaan, dan Anda bebas untuk menggunakannya di aplikasi Anda sendiri saat melakukan {i>coding<i}, pengujian, dan {i>debugging<i}. Buat saja pastikan Anda menggantinya dengan ID unit iklan Anda sendiri sebelum memublikasikan aplikasi.
Untuk informasi selengkapnya tentang cara kerja iklan percobaan Mobile Ads SDK, lihat Menguji Google Ads.
Penerapan
Langkah utama untuk mengintegrasikan iklan reward adalah sebagai berikut:
- Memuat iklan
- [Opsional] Validasi callback SSV
- Mendaftarkan callback
- Menampilkan iklan dan menangani peristiwa reward
Memuat iklan
Pemuatan iklan dilakukan menggunakan load(adUnitID:request)
pada class GADRewardedAd
.
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, GADFullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: GADRewardedAd?
func loadAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad with error: \(error.localizedDescription)")
}
}
Objective-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController ()
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)loadRewardedAd {
GAMRequest *request = [GAMRequest request];
[GADRewardedAd
loadWithAdUnitID:@"/21775744923/example/rewarded"
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 di sisi server
callback verifikasi harus menggunakan
fitur data kustom iklan reward. Nilai string apa pun yang ditetapkan pada iklan reward
diteruskan ke parameter kueri custom_data
dari callback SSV. Jika tidak
nilai data kustom ditetapkan, nilai parameter kueri custom_data
tidak akan
ada di callback SSV.
Contoh kode berikut menunjukkan cara menetapkan data kustom pada iklan reward sebelum meminta iklan.
Swift
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
let options = GADServerSideVerificationOptions()
options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
rewardedAd.serverSideVerificationOptions = options
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
Objective-C
[GADRewardedAd
loadWithAdUnitID:@"/21775744923/example/rewarded"
request:[GAMRequest request];
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
// Handle Error
return;
}
self.rewardedAd = ad;
GADServerSideVerificationOptions *options =
[[GADServerSideVerificationOptions alloc] init];
options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
ad.serverSideVerificationOptions = options;
}];
Mendaftarkan callback
Untuk menerima notifikasi acara presentasi, Anda harus mengimplementasikan
protokol GADFullScreenContentDelegate
dan menetapkannya ke
fullScreenContentDelegate
dari iklan yang ditampilkan. Tujuan
Protokol GADFullScreenContentDelegate
menangani callback saat iklan
berhasil atau tidak berhasil, dan saat presentasi ditutup. Hal berikut
kode ini menunjukkan cara menerapkan protokol dan menetapkannya ke iklan:
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
/// 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.")
}
}
SwiftUI
Tetapkan properti fullScreenContentDelegate
ke iklan yang ditampilkan:
rewardedAd?.fullScreenContentDelegate = self
Implementasikan protokol:
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
Objective-C
@interface ViewController () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)loadRewardedAd {
GAMRequest *request = [GAMRequest 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 sekali pakai. Hal ini berarti bahwa setelah iklan reward
maka tidak dapat ditampilkan lagi. Praktik terbaiknya adalah memuat iklan reward lainnya
dalam metode adDidDismissFullScreenContent:
di GADFullScreenContentDelegate
agar iklan reward berikutnya mulai dimuat segera setelah iklan sebelumnya
ditutup.
Menampilkan iklan dan menangani peristiwa reward
Sebelum menampilkan iklan reward kepada pengguna, Anda harus memberikan pilihan eksplisit untuk melihat konten iklan reward untuk mendapatkan reward. Reward iklan harus selalu menghadirkan pengalaman keikutsertaan.
Saat mempresentasikan iklan, Anda harus memberikan objek GADUserDidEarnRewardHandler
guna menangani reward untuk pengguna.
Kode berikut menyajikan metode terbaik untuk menampilkan iklan reward.
Swift
func show() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
ad.present(fromRootViewController: nil) {
let reward = ad.adReward
print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
// TODO: Reward the user.
}
}
SwiftUI
Memproses peristiwa UI dalam tampilan untuk menentukan kapan iklan ditampilkan.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
Tayangkan iklan reward dari model tampilan:
func showAd() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
rewardedAd.present(fromRootViewController: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
Objective-C
- (void)show {
if (self.rewardedAd) {
// The UIViewController parameter is nullable.
[self.rewardedAd presentFromRootViewController:nil
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
dipecat,GADRewardedAd
memilikiadReward
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
GADInitializationCompletionHandler
diberikan kestartWithCompletionHandler:
, meskipun jaringan mediasi belum inisialisasi yang telah selesai. - Bagaimana jika beberapa jaringan mediasi belum siap saat saya mendapatkan callback inisialisasi?
Sebaiknya muat iklan di dalam
GADInitializationCompletionHandler
. Bahkan jika jaringan mediasi belum siap, Google Mobile Ads SDK masih meminta iklan ke jaringan tersebut. Jadi jika jaringan mediasi selesai diinisialisasi setelah waktu tunggu habis, jaringan masih dapat melayani permintaan iklan berikutnya di sesi tersebut.Anda bisa terus memeriksa status inisialisasi semua adaptor sesi aplikasi Anda dengan memanggil
GADMobileAds.initializationStatus
.- Bagaimana cara mengetahui penyebab jaringan mediasi tertentu belum siap?
Properti
description
dari objekGADAdapterStatus
menjelaskan alasan adaptor tidak 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, jaringan iklan pihak ketiga Penerapan SDK menentukan urutan callback. Untuk SDK jaringan iklan yang menyediakan satu metode delegasi dengan informasi reward, yaitu adaptor mediasi memanggiluserDidEarnRewardHandler
sebelumadDidDismissFullScreenContent:
.
Contoh di GitHub
Lihat contoh lengkap iklan reward dalam bahasa pilihan Anda:
Langkah berikutnya
Pelajari lebih lanjut privasi pengguna.