โฆษณาที่มีการให้รางวัลคือโฆษณาที่ผู้ใช้มีตัวเลือกในการโต้ตอบเพื่อแลกกับรางวัลในแอป คู่มือนี้สาธิตวิธีผสานรวมโฆษณาที่มีการให้รางวัลจาก AdMob เข้ากับแอป iOS อ่านเรื่องราวความสำเร็จของลูกค้าบางส่วนได้ที่นี่ กรณีศึกษา 1 กรณีศึกษา 2
ข้อกำหนดเบื้องต้น
- SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google เวอร์ชัน 8.0.0 ขึ้นไป
- ทำตามคู่มือเริ่มต้นใช้งาน
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาเวอร์ชันที่ใช้งานจริง หากไม่ดำเนินการดังกล่าวอาจส่งผลให้บัญชีถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบสําหรับโฆษณาที่มีการให้รางวัลโดยเฉพาะสําหรับ iOS โดยทําดังนี้
ca-app-pub-3940256099942544/1712485313
เราได้กําหนดค่าไว้เป็นพิเศษให้แสดงโฆษณาทดสอบสําหรับคําขอทุกรายการ และคุณใช้โฆษณานี้ในแอปของคุณเองได้ขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง เพียงตรวจสอบว่าคุณได้แทนที่รหัสดังกล่าวด้วยรหัสหน่วยโฆษณาของคุณเองก่อนเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ Mobile Ads SDK ได้ที่ทดสอบ
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาที่มีการให้รางวัลมีดังนี้
- โหลดโฆษณา
- [ไม่บังคับ] ตรวจสอบการเรียกกลับ SSV
- ลงทะเบียนเพื่อรับการติดต่อกลับ
- แสดงโฆษณาและจัดการเหตุการณ์รางวัล
โหลดโฆษณา
การโหลดโฆษณาจะเสร็จสมบูรณ์โดยใช้เมธอด load(adUnitID:request)
ในคลาส GADRewardedAd
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
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)")
}
}
}
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 {
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() async {
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.")
}
}
SwiftUI
กําหนดพร็อพเพอร์ตี้ fullScreenContentDelegate
ให้กับโฆษณาที่แสดงผล
rewardedAd?.fullScreenContentDelegate = self
ใช้โปรโตคอล
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 {
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.
}
}
SwiftUI
ฟังเหตุการณ์ UI ในมุมมองเพื่อระบุเวลาที่จะแสดงโฆษณา
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
แสดงโฆษณาที่มีการให้รางวัลจากโมเดลมุมมอง
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");
}
}
คำถามที่พบบ่อย
- ฉันขอดูรายละเอียดของรางวัลสำหรับ
GADRewardedAd
ได้ไหม - ได้ หากคุณต้องการทราบจำนวนรางวัลก่อนที่ระบบจะเรียกใช้
userDidEarnReward
callbackGADRewardedAd
มีพร็อพเพอร์ตี้adReward
ที่คุณสามารถตรวจสอบเพื่อยืนยันจำนวนรางวัลหลังจากที่โฆษณาโหลดแล้ว - การเรียกใช้การเริ่มต้นมีเวลาหมดไหม
- หลังจากผ่านไป 10 วินาที SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะเรียกใช้วิธี
GADInitializationCompletionHandler
ที่ระบุให้กับวิธีstartWithCompletionHandler:
แม้ว่าเครือข่ายสื่อกลางจะยังไม่เริ่มต้นเสร็จสมบูรณ์ - จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายยังไม่พร้อมใช้งานเมื่อฉันได้รับการเรียกกลับเพื่อเริ่มต้นใช้งาน
เราขอแนะนําให้โหลดโฆษณาภายใน
GADInitializationCompletionHandler
แม้ว่าเครือข่ายสื่อกลางจะยังไม่พร้อมใช้งาน แต่ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะยังคงขอโฆษณาจากเครือข่ายนั้น ดังนั้น หากเครือข่ายสื่อกลางเริ่มต้นเสร็จสิ้นหลังจากหมดเวลา เครือข่ายจะยังคงให้บริการตามคําขอโฆษณาในอนาคตในเซสชันนั้นได้คุณสามารถตรวจสอบสถานะการเริ่มต้นของอะแดปเตอร์ทั้งหมดตลอดเซสชันแอปได้โดยเรียกใช้
GADMobileAds.initializationStatus
- ฉันจะทราบได้อย่างไรว่าเหตุใดเครือข่ายสื่อกลางบางเครือข่ายจึงไม่พร้อมใช้งาน
พร็อพเพอร์ตี้
description
ของออบเจ็กต์GADAdapterStatus
จะอธิบายสาเหตุที่อะแดปเตอร์ไม่พร้อมให้บริการตามคําขอโฆษณา- ตัวแฮนเดิลการเสร็จสิ้น
userDidEarnRewardHandler
ได้รับการเรียกใช้ก่อนเมธอดadDidDismissFullScreenContent:
ที่รับมอบสิทธิ์เสมอไหม สําหรับ Google Ads การโทร
userDidEarnRewardHandler
ทั้งหมดเกิดขึ้นก่อนadDidDismissFullScreenContent:
สําหรับโฆษณาที่แสดงผ่านสื่อกลาง การติดตั้งใช้งาน SDK ของเครือข่ายโฆษณาบุคคลที่สามจะเป็นตัวกําหนดลําดับการเรียกกลับ สําหรับ SDK เครือข่ายโฆษณาที่ระบุเมธอดการมอบสิทธิ์เดียวพร้อมข้อมูลรางวัล อะแดปเตอร์สื่อกลางจะเรียกใช้userDidEarnRewardHandler
ก่อนadDidDismissFullScreenContent:
ตัวอย่างใน GitHub
ดูตัวอย่างโฆษณาที่มีการให้รางวัลแบบเต็มในภาษาที่ต้องการ
ขั้นตอนถัดไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับความเป็นส่วนตัวของผู้ใช้