Quảng cáo có tặng thưởng là những quảng cáo mà người dùng có tùy chọn tương tác để đổi lấy phần thưởng trong ứng dụng. Tài liệu hướng dẫn này trình bày cách tích hợp quảng cáo có tặng thưởng từ AdMob vào một ứng dụng iOS. Hãy đọc một số câu chuyện thành công của khách hàng: nghiên cứu điển hình 1, nghiên cứu điển hình 2.
Điều kiện tiên quyết
- Nhập SDK quảng cáo trên thiết bị di động của Google, dưới dạng một SDK riêng hoặc một phần của Firebase.
Tạo quảng cáo có tặng thưởng
Quảng cáo có tặng thưởng do các đối tượng GADRewardedAd
yêu cầu và hiển thị. Bước đầu tiên
trong việc sử dụng quảng cáo có tặng thưởng là tạo phiên bản quảng cáo và đặt mã đơn vị quảng cáo. Ví dụ: dưới đây là
cách tạo GADRewardedAd
trong phương thức viewDidLoad:
của
UIViewController
:
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { /// The rewarded video ad. var rewardedAd: GADRewardedAd? override func viewDidLoad() { super.viewDidLoad() rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313") } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"]; }
Luôn kiểm tra bằng quảng cáo thử nghiệm
Khi tạo và thử nghiệm ứng dụng, hãy đảm bảo rằng bạn sử dụng quảng cáo thử nghiệm thay vì quảng cáo đang chạy thực tế. Chúng tôi sẽ tạm ngưng tài khoản của bạn nếu bạn không thực hiện việc này.
Cách dễ nhất để tải quảng cáo thử nghiệm là sử dụng mã đơn vị quảng cáo thử nghiệm dành riêng cho quảng cáo có tặng thưởng trên iOS:
ca-app-pub-3940256099942544/1712485313
Mã này được định cấu hình đặc biệt để trả về quảng cáo thử nghiệm cho mọi yêu cầu và bạn có thể sử dụng mã này trong ứng dụng của mình khi viết mã, thử nghiệm và gỡ lỗi. Bạn chỉ cần nhớ thay thế mã này bằng mã đơn vị quảng cáo của mình trước khi xuất bản ứng dụng.
Để biết thêm thông tin về cách hoạt động của quảng cáo thử nghiệm của SDK quảng cáo trên thiết bị di động, hãy xem Quảng cáo thử nghiệm.
Tải quảng cáo
Để tải quảng cáo có tặng thưởng, hãy gọi
loadRequest:completionHandler:
trên đối tượng GADRewardedAd
:
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADRewardedAdDelegate { /// The rewarded video ad. var rewardedAd: GADRewardedAd? override func viewDidLoad() { super.viewDidLoad() rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313") rewardedAd?.load(GADRequest()) { error in if let error = error { // Handle ad failed to load case. } else { // Ad successfully loaded. } } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"]; GADRequest *request = [GADRequest request]; [self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) { if (error) { // Handle ad failed to load case. } else { // Ad successfully loaded. } }]; }
Đoạn mã này tải một quảng cáo có tặng thưởng cùng với
GADRequest
và khối hoàn thành đã cung cấp. Sau khi yêu cầu quảng cáo hoàn tất,
hệ thống sẽ thực thi khối hoàn thành với thông số
GADRequestError
nil. Nếu không tải quảng cáo thành công, đối tượng
lỗi non-nil sẽ cung cấp thông tin về lỗi.
Quảng cáo hiển thị
Trước khi hiển thị quảng cáo có tặng thưởng cho người dùng, bạn cần hiển thị cho người dùng tùy chọn rõ ràng về việc xem nội dung quảng cáo có tặng thưởng để đổi lấy phần thưởng. Trong mọi trường hợp, người dùng phải có thể chọn xem hoặc không xem quảng cáo có tặng thưởng.
Để hiển thị quảng cáo có tặng thưởng, bạn hãy kiểm tra thuộc tính isReady
trên GADRewardedAd
để
để xác minh rằng quảng cáo đã tải xong, sau đó gọi
presentFromRootViewController:delegate:
. Dưới đây là một ví dụ về cách thực hiện việc này
theo một trong các phương thức hành động trong UIViewController
:
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADRewardedAdDelegate { /// The rewarded video ad. var rewardedAd: GADRewardedAd? ... @IBAction func doSomething(sender: UIButton) { if rewardedAd?.isReady == true { rewardedAd?.present(fromRootViewController: self, delegate:self) } } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () <GADRewardedAdDelegate> @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (IBAction)doSomething:(id)sender { ... if (self.rewardedAd.isReady) { [self.rewardedAd presentFromRootViewController:self delegate:self]; } else { NSLog(@"Ad wasn't ready"); } }
Nhận thông báo về sự kiện quảng cáo
GADRewardedAdDelegate
đã cung cấp trong phương thức
presentFromRootViewController:delegate:
được gọi khi xảy ra sự kiện
quảng cáo có tặng thưởng. Mỗi phương thức trong GADRewardedAdDelegate
tương ứng với một
sự kiện trong thời gian hoạt động của quảng cáo có tặng thưởng. Phương thức rewardedAd:userDidEarnReward:
là bắt buộc phải triển khai, nhưng tất cả các phương thức khác cho lớp được đánh dấu
là không bắt buộc, vì vậy, bạn chỉ cần triển khai các phương thức mà bạn muốn. Ví dụ sau
triển khai từng phương thức và ghi nhật ký thông báo vào bảng điều khiển:
Swift
/// Tells the delegate that the user earned a reward. func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) { print("Reward received with currency: \(reward.type), amount \(reward.amount).") } /// Tells the delegate that the rewarded ad was presented. func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) { print("Rewarded ad presented.") } /// Tells the delegate that the rewarded ad was dismissed. func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) { print("Rewarded ad dismissed.") } /// Tells the delegate that the rewarded ad failed to present. func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) { print("Rewarded ad failed to present.") }
Objective-C
/// Tells the delegate that the user earned a reward. - (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward { // TODO: Reward the user. NSLog(@"rewardedAd:userDidEarnReward:"); } /// Tells the delegate that the rewarded ad was presented. - (void)rewardedAdDidPresent:(GADRewardedAd *)rewardedAd { NSLog(@"rewardedAdDidPresent:"); } /// Tells the delegate that the rewarded ad failed to present. - (void)rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error { NSLog(@"rewardedAd:didFailToPresentWithError"); } /// Tells the delegate that the rewarded ad was dismissed. - (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd { NSLog(@"rewardedAdDidDismiss:"); }
Sử dụng GADRewardedAdDelegate để tải trước quảng cáo có tặng thưởng tiếp theo
GADRewardedAd
là đối tượng sử dụng một lần. Điều này có nghĩa là sau khi quảng cáo có tặng thưởng
xuất hiện, bạn sẽ không thể sử dụng đối tượng này để tải quảng cáo khác. Để yêu cầu một quảng cáo có tặng thưởng khác,
bạn cần tạo đối tượng GADRewardedAd
mới.
Phương pháp hay nhất là tải một quảng cáo có tặng thưởng khác trong phương thức rewardedAdDidDismiss:
trên GADRewardedAdDelegate
để quảng cáo có tặng thưởng tiếp theo bắt đầu tải
ngay khi quảng cáo trước đó bị loại bỏ:
Swift
override func viewDidLoad() { super.viewDidLoad() rewardedAd = createAndLoadRewardedAd() } func createAndLoadRewardedAd() { rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313") rewardedAd?.load(GADRequest()) { error in if let error = error { print("Loading failed: \(error)") } else { print("Loading Succeeded") } } return rewardedAd } func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) { rewardedAd = createAndLoadRewardedAd() }
Objective-C
- (void)viewDidLoad { [super viewDidLoad]; self.rewardedAd = [self createAndLoadRewardedAd]; } - (GADRewardedAd *)createAndLoadRewardedAd { GADRewardedAd *rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"]; GADRequest *request = [GADRequest request]; [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) { if (error) { // Handle ad failed to load case. } else { // Ad successfully loaded. } }]; return rewardedAd; } - (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd { self.rewardedAd = [self createAndLoadRewardedAd]; }
Tải nhiều quảng cáo có tặng thưởng
Để tải nhiều quảng cáo có tặng thưởng, hãy làm theo các bước đã nêu trong mục tạo đối tượng quảng cáo có tặng thưởng và tải quảng cáo cho từng quảng cáo mà bạn định tải. Đoạn mã dưới đây trình bày cách tải hai quảng cáo có tặng thưởng cho hai vị trí đặt quảng cáo riêng biệt.
Swift
override func viewDidLoad() { super.viewDidLoad() rewardedAd1 = createAndLoadRewardedAd("first-ad-unit-id") rewardedAd2 = createAndLoadRewardedAd("second-ad-unit-id") } func createAndLoadRewardedAd(adUnitId) { rewardedAd = GADRewardedAd(adUnitID: adUnitId) rewardedAd?.load(GADRequest()) { error in if let error = error { print("Loading failed: \(error)") } else { print("Loading Succeeded") } } return rewardedAd }
Objective-C
- (void)viewDidLoad { [super viewDidLoad]; GADRewardedAd *gameOverRewardedAd = [self createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"]; GADRewardedAd *extraCoinsRewardedAd = [self createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"]; } - (GADRewardedAd *)createAndLoadRewardedAdForAdUnit:(NSString *) adUnitId { GADRewardedAd *rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:adUnitId]; GADRequest *request = [GADRequest request]; [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) { if (error) { // Handle ad failed to load case. } else { // Ad successfully loaded. } }]; return rewardedAd; }
Câu hỏi thường gặp
- Tôi có thể nhận thông tin chi tiết về phần thưởng cho
GADRewardedAd
không? - Có, nếu bạn cần biết số tiền thưởng trước khi kích hoạt lệnh gọi lại
userDidEarnReward
,GADRewardedAd
có thuộc tínhreward
để bạn có thể kiểm tra nhằm xác minh số tiền thưởng sau khi quảng cáo đã tải. - Cuộc gọi khởi chạy có thời gian chờ không?
- Sau 10 giây, SDK quảng cáo trên thiết bị di động của Google sẽ gọi
GADInitializationCompletionHandler
đã cung cấp cho phương thứcstartWithCompletionHandler:
, ngay cả khi mạng dàn xếp chưa hoàn thành quy trình khởi chạy. - Điều gì xảy ra nếu một số mạng dàn xếp chưa sẵn sàng hoạt động khi tôi nhận được lệnh gọi lại khởi chạy?
Đó là phương pháp hay nhất để tải quảng cáo bên trong
GADInitializationCompletionHandler
. Ngay cả khi mạng dàn xếp chưa sẵn sàng hoạt động, SDK quảng cáo trên thiết bị di động của Google vẫn sẽ yêu cầu mạng đó cho quảng cáo. Vì vậy, nếu mạng dàn xếp kết thúc quá trình khởi chạy sau khi hết thời gian chờ, mạng quảng cáo đó vẫn có thể phục vụ các yêu cầu quảng cáo tiếp theo trong phiên hoạt động đó.Bạn có thể tiếp tục kiểm tra vòng trạng thái khởi chạy của tất cả các bộ chuyển đổi trong suốt phiên hoạt động trong ứng dụng của mình bằng cách gọi
GADMobileAds.initializationStatus
.- Làm cách nào để biết lý do khiến một mạng dàn xếp cụ thể chưa sẵn sàng hoạt động?
Thuộc tính
description
của đối tượngGADAdapterStatus
cho biết lý do tại sao bộ chuyển đổi chưa sẵn sàng phục vụ các yêu cầu quảng cáo.