โฆษณาที่มีการให้รางวัลคือโฆษณาที่ผู้ใช้เลือกโต้ตอบด้วยเพื่อแลกกับรางวัลในแอปได้ คู่มือนี้จะแสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลจาก AdMob ลงในแอป iOS อ่านเรื่องราวความสำเร็จของลูกค้า: กรณีศึกษา 1, กรณีศึกษา 2
สิ่งที่ต้องดำเนินการก่อน
- SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google เวอร์ชัน 8.0.0 ขึ้นไป
- ทำตามคู่มือเริ่มต้นใช้งานจนจบ
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป โปรดตรวจสอบว่าคุณใช้โฆษณาทดสอบแทนที่จะใช้โฆษณาจริงในเวอร์ชันที่ใช้งานจริง หากไม่ดำเนินการ บัญชีจะถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบโดยเฉพาะสำหรับโฆษณาที่มีการให้รางวัลของ iOS
ca-app-pub-3940256099942544/1712485313
โดยกำหนดค่ามาเป็นพิเศษให้ส่งคืนโฆษณาทดสอบสำหรับคำขอทุกรายการ และคุณสามารถใช้งานในแอปของคุณเองขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่องได้ฟรี เพียงตรวจสอบให้แน่ใจว่าคุณแทนที่ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ SDK โฆษณาบนอุปกรณ์เคลื่อนที่ โปรดดูโฆษณาทดสอบ
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาคั่นระหว่างหน้าที่มีการให้รางวัลมีดังนี้
- โหลดโฆษณา
- [ไม่บังคับ] ตรวจสอบ Callback ของ 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.");
}];
}
[ไม่บังคับ] ตรวจสอบ Callback ของการยืนยันฝั่งเซิร์ฟเวอร์ (SSV)
แอปที่ต้องใช้ข้อมูลเพิ่มเติมในการเรียกกลับการยืนยันฝั่งเซิร์ฟเวอร์ควรใช้ฟีเจอร์ข้อมูลที่กำหนดเองของโฆษณาที่มีการให้รางวัล ระบบจะส่งค่าสตริงที่ตั้งค่าไว้ในออบเจ็กต์โฆษณาที่มีการให้รางวัลไปยังพารามิเตอร์การค้นหา custom_data
ของ Callback SSV หากไม่ได้กําหนดค่าข้อมูลที่กําหนดเอง ค่าพารามิเตอร์การค้นหา custom_data
จะไม่แสดงใน Callback 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
จะจัดการ Callback เมื่อโฆษณาแสดงสำเร็จหรือไม่สำเร็จ และเมื่อปิด โค้ดต่อไปนี้แสดงวิธีใช้โปรโตคอลและกำหนดให้กับโฆษณา
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 วินาที Google Mobile Ads SDK จะเรียกใช้
GADInitializationCompletionHandler
ที่ระบุไว้ในเมธอดstartWithCompletionHandler:
แม้ว่าเครือข่ายสื่อกลางจะยังไม่เริ่มต้นโดยสมบูรณ์ก็ตาม - จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายยังไม่พร้อมเมื่อฉันได้รับการติดต่อกลับเพื่อเริ่มต้น
เราขอแนะนำให้โหลดโฆษณาภายใน
GADInitializationCompletionHandler
แม้ว่าเครือข่ายสื่อกลางจะไม่พร้อม SDK โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google ก็ยังคงขอโฆษณาจากเครือข่ายนั้น ดังนั้น หากเครือข่ายสื่อกลางเริ่มต้นการทำงานเสร็จสิ้นหลังจากหมดเวลา เครือข่ายจะยังคงให้บริการคำขอโฆษณาในอนาคตในเซสชันนั้นได้คุณยังสำรวจสถานะเริ่มต้นของอะแดปเตอร์ทั้งหมดได้ตลอดเซสชันแอปโดยโทรไปที่
GADMobileAds.initializationStatus
- ฉันจะทราบได้อย่างไรว่าเครือข่ายสื่อกลางหนึ่งๆ ไม่พร้อมใช้งาน
พร็อพเพอร์ตี้
description
ของออบเจ็กต์GADAdapterStatus
อธิบายสาเหตุที่อะแดปเตอร์ไม่พร้อมให้บริการคำขอโฆษณา- ตัวแฮนเดิลการเสร็จสิ้น
userDidEarnRewardHandler
ถูกเรียกใช้ก่อนเมธอดผู้รับมอบสิทธิ์adDidDismissFullScreenContent:
ทุกครั้งไหม สำหรับโฆษณา Google การเรียก
userDidEarnRewardHandler
ทั้งหมดจะเกิดขึ้นก่อนadDidDismissFullScreenContent:
สำหรับโฆษณาที่แสดงผ่านสื่อกลาง การใช้งาน SDK ของเครือข่ายโฆษณาบุคคลที่สามจะเป็นตัวกำหนดลำดับการเรียกกลับ สำหรับ SDK เครือข่ายโฆษณาที่ระบุวิธีมอบสิทธิ์วิธีเดียวที่มีข้อมูลรางวัล อะแดปเตอร์สื่อกลางจะเรียกใช้userDidEarnRewardHandler
ก่อนวันที่adDidDismissFullScreenContent:
ตัวอย่างใน GitHub
- ตัวอย่างโฆษณาที่มีการให้รางวัล: Swift | Objective-C
ขั้นตอนถัดไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับความเป็นส่วนตัวของผู้ใช้