โฆษณาที่มีการให้รางวัลคือโฆษณาที่ผู้ใช้มีตัวเลือกในการโต้ตอบเพื่อแลก กับรางวัลในแอป คู่มือนี้จะแสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลจาก Ad Manager ลงในแอป iOS
ข้อกำหนดเบื้องต้น
ตั้งค่า Google Mobile Ads SDK ก่อนดำเนินการต่อ
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาจริง หากไม่ปฏิบัติตาม อาจทำให้บัญชีถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบเฉพาะสำหรับโฆษณาที่มีการให้รางวัลใน iOS ดังนี้
/21775744923/example/rewarded
ซึ่งได้รับการกำหนดค่าเป็นพิเศษให้แสดงโฆษณาทดสอบสำหรับทุกคำขอ และคุณสามารถใช้รหัสนี้ในแอปของคุณเองได้อย่างอิสระขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง เพียงตรวจสอบว่าคุณได้แทนที่รหัสนี้ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบใน Google Mobile Ads SDK ได้ที่ Test Ads
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาที่มีการให้รางวัลมีดังนี้
- โหลดโฆษณา
- [ไม่บังคับ] ตรวจสอบ SSV Callback
- ลงทะเบียนเพื่อรับ Callback
- แสดงโฆษณาและจัดการเหตุการณ์รางวัล
โหลดโฆษณา
การโหลดโฆษณาทำได้โดยใช้เมธอด load(adUnitID:request)
ในคลาส GADRewardedAd
Swift
func loadRewardedAd() async {
do {
rewardedAd = try await RewardedAd.load(
// Replace this ad unit ID with your own ad unit ID.
with: "/21775744923/example/rewarded", request: AdManagerRequest())
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:@"/21775744923/example/rewarded"
request:[GAMRequest 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;
}];
[ไม่บังคับ] ตรวจสอบการติดต่อกลับการยืนยันฝั่งเซิร์ฟเวอร์ (SSV)
แอปที่ต้องการข้อมูลเพิ่มเติมใน การยืนยัน
ฝั่งเซิร์ฟเวอร์ Callback ควรใช้ฟีเจอร์ข้อมูลที่กำหนดเอง
ของโฆษณาที่มีการให้รางวัล ค่าสตริงที่ตั้งค่าไว้ในออบเจ็กต์โฆษณาที่มีการให้รางวัลจะส่งไปยังพารามิเตอร์การค้นหา custom_data ของ SSV Callback หากไม่ได้ตั้งค่าข้อมูลที่กำหนดเอง ค่าพารามิเตอร์การค้นหา custom_data จะไม่อยู่ใน SSV Callback
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตั้งค่าข้อมูลที่กำหนดเองในออบเจ็กต์โฆษณาที่มีการให้รางวัลก่อนที่จะขอโฆษณา
Swift
Objective-C
แทนที่ SAMPLE_CUSTOM_DATA_STRING ด้วยข้อมูลที่กำหนดเอง
ลงทะเบียนเพื่อรับ Callback
หากต้องการรับการแจ้งเตือนสำหรับเหตุการณ์การนำเสนอ คุณต้องกำหนด GADFullScreenContentDelegate ให้กับพร็อพเพอร์ตี้ fullScreenContentDelegate ของโฆษณาที่แสดง
Swift
rewardedAd?.fullScreenContentDelegate = self
SwiftUI
rewardedAd?.fullScreenContentDelegate = self
Objective-C
self.rewardedAd.fullScreenContentDelegate = self;
โปรโตคอล GADFullScreenContentDelegate จะจัดการ Callback เมื่อโฆษณาแสดงผลสำเร็จหรือไม่สำเร็จ และเมื่อมีการปิดโฆษณา โค้ดต่อไปนี้แสดงวิธีใช้โปรโตคอล
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);
}
แสดงโฆษณาและจัดการเหตุการณ์รางวัล
ก่อนที่จะแสดงโฆษณาที่มีการให้รางวัลแก่ผู้ใช้ คุณต้องให้ผู้ใช้เลือกอย่างชัดเจนว่าจะดูเนื้อหาโฆษณาที่มีการให้รางวัลเพื่อแลกกับรางวัล โฆษณาที่มีการให้รางวัลต้องเป็นประสบการณ์แบบเลือกเข้าร่วมเสมอ
เมื่อแสดงโฆษณา คุณต้องระบุออบเจ็กต์ GADUserDidEarnRewardHandler เพื่อจัดการรางวัลสำหรับผู้ใช้
โค้ดต่อไปนี้แสดงวิธีที่ดีที่สุดในการแสดงโฆษณาที่มีการให้รางวัล
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
รอเหตุการณ์ UI ในมุมมองเพื่อกำหนดเวลาที่จะแสดงโฆษณา
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
แสดงโฆษณาที่มีการให้รางวัลจาก View Model ดังนี้
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.
}];
คำถามที่พบบ่อย
- ฉันจะดูรายละเอียดรางวัลสำหรับ
GADRewardedAdได้ไหม - ได้ หากคุณต้องการทราบจำนวนรางวัลก่อนที่จะมีการเรียกใช้
userDidEarnRewardcallback คุณสามารถตรวจสอบพร็อพเพอร์ตี้GADRewardedAdadRewardเพื่อยืนยันจำนวนรางวัลหลังจากโหลดโฆษณาแล้ว - การเรียกใช้การเริ่มต้นมีระยะหมดเวลาไหม
- หลังจากผ่านไป 10 วินาที Google Mobile Ads SDK จะเรียกใช้
GADInitializationCompletionHandlerที่ระบุไว้ในเมธอดstartWithCompletionHandler:แม้ว่าเครือข่ายสื่อกลางจะยัง เริ่มต้นไม่เสร็จสมบูรณ์ก็ตาม - จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายยังไม่พร้อมเมื่อฉันได้รับการเรียกใช้ Callback การเริ่มต้น
เราขอแนะนำให้โหลดโฆษณาภายใน
GADInitializationCompletionHandlerแม้ว่าเครือข่ายสื่อกลางจะยังไม่พร้อม Google Mobile Ads SDK ก็ยังคงขอโฆษณาจากเครือข่ายนั้น ดังนั้น หากเครือข่ายสื่อกลางเริ่มต้นเสร็จสมบูรณ์หลังจากหมดเวลา เครือข่ายนั้นจะยังคงให้บริการคำขอโฆษณาในอนาคตในเซสชันนั้นได้คุณสามารถตรวจสอบสถานะการเริ่มต้นของอะแดปเตอร์ทั้งหมดในเซสชันแอปได้โดยเรียกใช้
GADMobileAds.initializationStatus- ฉันจะทราบได้อย่างไรว่าเหตุใดเครือข่ายสื่อกลางบางเครือข่ายจึงยังไม่พร้อม
พร็อพเพอร์ตี้
descriptionของออบเจ็กต์GADAdapterStatusจะอธิบายเหตุผลที่อะแดปเตอร์ยังไม่พร้อมให้บริการคำขอโฆษณา- ตัวแฮนเดิลการดำเนินการเสร็จสมบูรณ์
userDidEarnRewardHandlerจะถูกเรียกใช้ก่อนเมธอดผู้รับมอบสิทธิ์adDidDismissFullScreenContent:เสมอใช่ไหม สำหรับโฆษณา Google การเรียกใช้
userDidEarnRewardHandlerทั้งหมดจะเกิดขึ้นก่อนadDidDismissFullScreenContent:สำหรับโฆษณาที่แสดงผ่าน สื่อกลาง การติดตั้งใช้งาน SDK ของเครือข่ายโฆษณาบุคคลที่สามจะเป็นตัวกำหนดลำดับการเรียกใช้ Callback สำหรับ SDK ของเครือข่ายโฆษณาที่ระบุเมธอดผู้รับมอบสิทธิ์เดียวพร้อมข้อมูลรางวัล อะแดปเตอร์สื่อกลางจะเรียกใช้userDidEarnRewardHandlerก่อนadDidDismissFullScreenContent:
ตัวอย่างใน GitHub
ดูตัวอย่างโฆษณาที่มีการให้รางวัลฉบับเต็มในภาษาที่คุณต้องการ
ขั้นตอนถัดไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับความเป็นส่วนตัวของผู้ใช้