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