โฆษณาที่มีการให้รางวัลคือโฆษณาที่ผู้ใช้สามารถเลือกที่จะโต้ตอบด้วยเพื่อแลกกับรางวัลในแอป คู่มือนี้ แสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลจาก AdMob เข้ากับแอป iOS อ่านเรื่องราวความสำเร็จของลูกค้า: กรณีศึกษา 1 กรณีศึกษา 2.
ข้อกำหนดเบื้องต้น
- SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google เวอร์ชัน 8.0.0 ขึ้นไป
- ทำตามคู่มือเริ่มต้นใช้งาน
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป ให้ตรวจสอบว่าคุณใช้โฆษณาทดสอบแทนที่จะใช้โฆษณาเวอร์ชันที่ใช้งานจริง มิเช่นนั้นจะถูกระงับบัญชี
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบสำหรับโฆษณาที่มีการให้รางวัลของ iOS โดยเฉพาะ ดังนี้
ca-app-pub-3940256099942544/1712485313
โดยได้รับการกำหนดค่ามาเป็นพิเศษให้ส่งคืนโฆษณาทดสอบสำหรับทุกคำขอ และคุณจะใช้บัญชีนี้ในแอปของคุณเองได้อย่างอิสระขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง แต่อย่าลืมแทนที่ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ได้ที่ทดสอบโฆษณา
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาคั่นระหว่างหน้าที่มีการให้รางวัลมีดังนี้
- โหลดโฆษณา
- [ไม่บังคับ] ตรวจสอบโค้ดเรียกกลับ SSV
- ลงทะเบียนเพื่อให้โทรกลับ
- แสดงโฆษณาและจัดการกิจกรรมรางวัล
โหลดโฆษณา
การโหลดโฆษณาทำได้โดยใช้เมธอด loadWithAdUnitID:request:completionHandler:
แบบคงที่ในคลาส GADRewardedAd
วิธีการโหลดต้องใช้รหัสหน่วยโฆษณา ออบเจ็กต์ GADRequest
และตัวแฮนเดิลการเสร็จสมบูรณ์ ซึ่งจะเรียกใช้เมื่อการโหลดโฆษณาสำเร็จหรือล้มเหลว ออบเจ็กต์ GADRewardedAd
ที่โหลดจะระบุเป็นพารามิเตอร์ในเครื่องจัดการความสมบูรณ์ ตัวอย่างต่อไปนี้แสดงวิธีโหลด GADRewardedAd
ในชั้นเรียน ViewController
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
}
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.");
}];
}
[ไม่บังคับ] ตรวจสอบโค้ดเรียกกลับของการยืนยันฝั่งเซิร์ฟเวอร์ (SSV)
แอปที่ต้องใช้ข้อมูลเพิ่มเติมในโค้ดเรียกกลับการยืนยันฝั่งเซิร์ฟเวอร์ควรใช้ฟีเจอร์ข้อมูลที่กำหนดเองของโฆษณาที่มีการให้รางวัล ระบบจะส่งค่าสตริงใดก็ตามที่ตั้งค่าไว้ในออบเจ็กต์โฆษณาที่มีการให้รางวัลไปยังพารามิเตอร์การค้นหา custom_data
ของโค้ดเรียกกลับ SSV หากไม่ได้กำหนดค่าข้อมูลที่กำหนดเอง ค่าพารามิเตอร์การค้นหา custom_data
จะไม่แสดงในโค้ดเรียกกลับ SSV
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตั้งค่าข้อมูลที่กำหนดเองในออบเจ็กต์โฆษณาที่มีการให้รางวัลก่อนขอโฆษณา
Swift
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
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:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest 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;
}];
ลงทะเบียนเพื่อให้โทรกลับ
หากต้องการรับการแจ้งเตือนสำหรับกิจกรรมการนำเสนอ คุณต้องใช้โปรโตคอล GADFullScreenContentDelegate
และกำหนดโปรโตคอลดังกล่าวไปยังพร็อพเพอร์ตี้ fullScreenContentDelegate
ของโฆษณาที่ส่งกลับมา โปรโตคอล GADFullScreenContentDelegate
จะจัดการกับโค้ดเรียกกลับในกรณีที่โฆษณาแสดงผลสำเร็จหรือไม่สำเร็จ และปิดโฆษณาดังกล่าว โค้ดต่อไปนี้แสดงวิธีการใช้โปรโตคอลและกำหนดให้กับโฆษณา
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
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.")
}
}
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
เป็นออบเจ็กต์แบบใช้ครั้งเดียว ซึ่งหมายความว่าเมื่อโฆษณาที่มีการให้รางวัลแสดงขึ้นมา
แล้ว โฆษณานั้นก็จะแสดงอีกไม่ได้ แนวทางปฏิบัติแนะนำคือให้โหลดโฆษณาที่มีการให้รางวัลอื่นในเมธอด adDidDismissFullScreenContent:
ใน GADFullScreenContentDelegate
เพื่อให้โฆษณาที่มีการให้รางวัลถัดไปเริ่มโหลดทันทีที่ระบบปิดโฆษณาก่อนหน้า
แสดงโฆษณาและจัดการกิจกรรมรางวัล
ก่อนแสดงโฆษณาที่มีการให้รางวัลแก่ผู้ใช้ คุณต้องแสดงตัวเลือกที่ชัดเจนให้ผู้ใช้ดูเนื้อหาโฆษณาที่มีการให้รางวัลเพื่อแลกกับรางวัล โฆษณาที่มีการให้รางวัลต้องเป็นการเลือกใช้เสมอ
เมื่อนำเสนอโฆษณา คุณต้องระบุออบเจ็กต์ GADUserDidEarnRewardHandler
เพื่อจัดการรางวัลสำหรับผู้ใช้
โค้ดต่อไปนี้นำเสนอวิธีที่ดีที่สุดในการแสดงโฆษณาที่มีการให้รางวัล
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.
}
}
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");
}
}
คำถามที่พบบ่อย
- ขอรายละเอียดรางวัลสำหรับ
GADRewardedAd
ได้ไหม - ได้ หากคุณต้องการจำนวนรางวัลก่อนที่โค้ดเรียกกลับ
userDidEarnReward
จะเริ่มทำงานGADRewardedAd
จะมีพร็อพเพอร์ตี้adReward
ที่คุณตรวจสอบได้เพื่อยืนยันจำนวนรางวัลหลังจากที่โฆษณาโหลดเสร็จแล้ว - มีการหมดเวลาสำหรับการเรียกใช้การเริ่มต้นหรือไม่
- หลังจากผ่านไป 10 วินาที SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะเรียกใช้
GADInitializationCompletionHandler
ที่ระบุไว้ในเมธอดstartWithCompletionHandler:
แม้ว่าเครือข่ายสื่อกลางจะยังไม่เริ่มต้นจนเสร็จสมบูรณ์ก็ตาม - จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายไม่พร้อมเมื่อฉันได้รับการเรียกกลับการเริ่มต้น
เราขอแนะนำให้โหลดโฆษณาภายใน
GADInitializationCompletionHandler
แม้ว่าเครือข่ายสื่อกลางจะไม่พร้อมใช้งาน SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะยังคงขอโฆษณาจากเครือข่ายนั้น ดังนั้นหากเครือข่ายสื่อกลางเริ่มต้นทำงานจนเสร็จหลังจากหมดเวลาแล้ว เครือข่ายดังกล่าวจะยังคงให้บริการคำขอโฆษณาในอนาคตในเซสชันนั้นได้คุณยังสำรวจสถานะการเริ่มต้นของอะแดปเตอร์ทั้งหมดต่อได้ตลอดเซสชันของแอปโดยการเรียกใช้
GADMobileAds.initializationStatus
- ฉันจะทราบได้อย่างไรว่าเครือข่ายสื่อกลางใดไม่พร้อมใช้งาน
พร็อพเพอร์ตี้
description
ของออบเจ็กต์GADAdapterStatus
อธิบายสาเหตุที่อะแดปเตอร์ไม่พร้อมบริการคำขอโฆษณา- มีการเรียกใช้ตัวแฮนเดิล
userDidEarnRewardHandler
ที่เสร็จสมบูรณ์ก่อนเมธอดการมอบสิทธิ์adDidDismissFullScreenContent:
ทุกครั้งหรือไม่ สำหรับ Google Ads การเรียก
userDidEarnRewardHandler
ทั้งหมดจะเกิดขึ้นก่อนadDidDismissFullScreenContent:
สำหรับโฆษณาที่แสดงผ่านสื่อกลาง การใช้งาน SDK เครือข่ายโฆษณาของบุคคลที่สามจะเป็นตัวกำหนดลำดับการเรียกกลับ สำหรับ SDK เครือข่ายโฆษณาที่ระบุวิธีการมอบสิทธิ์แบบเดียวพร้อมข้อมูลรางวัล อะแดปเตอร์สื่อกลางจะเรียกใช้userDidEarnRewardHandler
ก่อนวันที่adDidDismissFullScreenContent:
ตัวอย่างใน GitHub
- ตัวอย่างโฆษณาที่มีการให้รางวัล Swift | Objective-C
ขั้นตอนถัดไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับความเป็นส่วนตัวของผู้ใช้