تبلیغات پاداش، تبلیغاتی هستند که کاربران در ازای دریافت جوایز درونبرنامه، میتوانند با آنها تعامل داشته باشند. این راهنما به شما نشان می دهد که چگونه تبلیغات پاداش از Ad Manager را در یک برنامه iOS ادغام کنید.
پیش نیازها
- Google Mobile Ads SDK 8.0.0 یا بالاتر.
- راهنمای شروع را کامل کنید.
همیشه با تبلیغات آزمایشی تست کنید
هنگام ساخت و آزمایش برنامه های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می کنید. عدم انجام این کار می تواند منجر به تعلیق حساب شما شود.
ساده ترین راه برای بارگیری تبلیغات آزمایشی استفاده از شناسه واحد آگهی آزمایشی اختصاصی ما برای تبلیغات دارای پاداش iOS است:
/21775744923/example/rewarded
این بهطور ویژه پیکربندی شده است تا تبلیغات آزمایشی را برای هر درخواست بازگرداند، و شما میتوانید هنگام کدنویسی، آزمایش و اشکالزدایی از آن در برنامههای خود استفاده کنید. فقط مطمئن شوید که قبل از انتشار برنامه خود، آن را با شناسه واحد تبلیغاتی خود جایگزین کنید.
برای کسب اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی SDK Ads Mobile، به Test Ads مراجعه کنید.
پیاده سازی
مراحل اولیه برای ادغام تبلیغات پاداش به شرح زیر است:
- یک تبلیغ را بارگیری کنید
- [اختیاری] اعتبار سنجی تماس های SSV
- برای پاسخ به تماس ها ثبت نام کنید
- تبلیغ را نمایش دهید و رویداد پاداش را مدیریت کنید
یک تبلیغ را بارگیری کنید
بارگیری تبلیغ با استفاده از روش load(adUnitID:request)
در کلاس GADRewardedAd
انجام می شود.
سویفت
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
} 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)")
}
}
هدف-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController ()
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)loadRewardedAd {
GAMRequest *request = [GAMRequest request];
[GADRewardedAd
loadWithAdUnitID:@"/21775744923/example/rewarded"
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) تماس های برگشتی
برنامههایی که به دادههای اضافی در تماسهای تأیید سمت سرور نیاز دارند، باید از ویژگی داده سفارشی تبلیغات پاداش استفاده کنند. هر مقدار رشته تنظیم شده روی یک شیء تبلیغاتی پاداش داده شده به پارامتر query custom_data
در SSV ارسال می شود. اگر مقدار داده سفارشی تنظیم نشده باشد، مقدار پارامتر query custom_data
در پاسخ تماس SSV وجود نخواهد داشت.
نمونه کد زیر نشان میدهد که چگونه دادههای سفارشی را روی یک شی تبلیغاتی پاداش داده شده قبل از درخواست آگهی تنظیم کنید.
سویفت
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
let options = GADServerSideVerificationOptions()
options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
rewardedAd.serverSideVerificationOptions = options
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
هدف-C
[GADRewardedAd
loadWithAdUnitID:@"/21775744923/example/rewarded"
request:[GAMRequest 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
برای زمانی که تبلیغ با موفقیت یا ناموفق نمایش داده می شود و زمانی که رد می شود، پاسخ به تماس ها را کنترل می کند. کد زیر نحوه پیاده سازی پروتکل و اختصاص آن به تبلیغ را نشان می دهد:
سویفت
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
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
}
هدف-C
@interface ViewController () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)loadRewardedAd {
GAMRequest *request = [GAMRequest 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
برای مدیریت پاداش برای کاربر ارائه دهید.
کد زیر بهترین روش برای نمایش یک تبلیغ با پاداش را ارائه می دهد.
سویفت
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
برای تعیین زمان نمایش آگهی، به رویدادهای رابط کاربری در نما گوش دهید.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
تبلیغ پاداش را از مدل view ارائه دهید:
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)
}
}
هدف-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
بارگیری کنید. حتی اگر یک شبکه میانجی آماده نباشد، Google Mobile Ads SDK همچنان از آن شبکه درخواست تبلیغ میکند. بنابراین، اگر یک شبکه میانجی پس از اتمام زمان، شروع به کار کند، همچنان میتواند درخواستهای تبلیغات آینده را در آن جلسه سرویس دهد.میتوانید با تماس با
GADMobileAds.initializationStatus
به بررسی وضعیت اولیه همه آداپتورها در طول جلسه برنامه خود ادامه دهید.- چگونه می توانم بفهمم که چرا یک شبکه میانجی خاص آماده نیست؟
ویژگی
description
یک شیGADAdapterStatus
توضیح می دهد که چرا یک آداپتور برای سرویس دهی به درخواست های تبلیغاتی آماده نیست.- آیا کنترل کننده تکمیل
userDidEarnRewardHandler
همیشه قبل از متدadDidDismissFullScreenContent:
delegate فراخوانی می شود؟ برای تبلیغات Google، همه تماسهای
userDidEarnRewardHandler
قبل ازadDidDismissFullScreenContent:
برای تبلیغاتی که از طریق میانجیگری ارائه میشوند، پیادهسازی SDK شبکه تبلیغاتی شخص ثالث ترتیب برگشت به تماس را تعیین میکند. برای SDK های شبکه تبلیغاتی که یک روش نماینده واحد را با اطلاعات پاداش ارائه می کنند، آداپتور میانجیuserDidEarnRewardHandler
قبل ازadDidDismissFullScreenContent:
فراخوانی می کند.
نمونه هایی در GitHub
نمونههای کامل تبلیغات پاداش را به زبان دلخواه خود مشاهده کنید:
مراحل بعدی
درباره حریم خصوصی کاربر بیشتر بیاموزید.