تبلیغات پاداش، تبلیغاتی هستند که کاربران در ازای دریافت جوایز درونبرنامه، میتوانند با آنها تعامل داشته باشند. این راهنما به شما نشان میدهد که چگونه تبلیغات پاداش را از AdMob در یک برنامه iOS ادغام کنید. چند داستان موفقیت مشتری را بخوانید: مطالعه موردی 1 ، مطالعه موردی 2 .
پیش نیازها
- راهنمای شروع را کامل کنید.
همیشه با تبلیغات آزمایشی تست کنید
هنگام ساخت و آزمایش برنامه های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می کنید. عدم انجام این کار می تواند منجر به تعلیق حساب شما شود.
ساده ترین راه برای بارگیری تبلیغات آزمایشی استفاده از شناسه واحد آگهی آزمایشی اختصاصی ما برای تبلیغات دارای پاداش iOS است:
ca-app-pub-3940256099942544/1712485313
این بهطور ویژه پیکربندی شده است تا تبلیغات آزمایشی را برای هر درخواست بازگرداند، و شما میتوانید هنگام کدنویسی، آزمایش و اشکالزدایی از آن در برنامههای خود استفاده کنید. فقط مطمئن شوید که قبل از انتشار برنامه خود، آن را با شناسه واحد تبلیغاتی خود جایگزین کنید.
برای کسب اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی SDK Ads Mobile، به Test Ads مراجعه کنید.
پیاده سازی
مراحل اولیه برای ادغام تبلیغات پاداش به شرح زیر است:
- یک تبلیغ را بارگیری کنید
- [اختیاری] اعتبار سنجی تماس های SSV
- برای پاسخ به تماس ها ثبت نام کنید
- تبلیغ را نمایش دهید و رویداد پاداش را مدیریت کنید
یک تبلیغ را بارگیری کنید
بارگیری تبلیغ با استفاده از روش load(adUnitID:request)
در کلاس GADRewardedAd
انجام می شود.
سویفت
func loadRewardedAd() async {
do {
rewardedAd = try await RewardedAd.load(
// Replace this ad unit ID with your own ad unit ID.
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: RewardedAd?
func loadAd() async {
do {
rewardedAd = try await RewardedAd.load(
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad with error: \(error.localizedDescription)")
}
}
هدف-C
// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest request]
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
return;
}
self.rewardedAd = ad;
self.rewardedAd.fullScreenContentDelegate = self;
}];
[اختیاری] تأیید اعتبار سمت سرور (SSV) تماس های برگشتی
برنامههایی که به دادههای اضافی در تماسهای تأیید سمت سرور نیاز دارند، باید از ویژگی داده سفارشی تبلیغات پاداش استفاده کنند. هر مقدار رشته تنظیم شده روی یک شیء تبلیغاتی پاداش داده شده به پارامتر query custom_data
در SSV ارسال می شود. اگر مقدار داده سفارشی تنظیم نشده باشد، مقدار پارامتر query custom_data
در پاسخ تماس SSV وجود نخواهد داشت.
نمونه کد زیر نحوه تنظیم دادههای سفارشی روی یک شیء تبلیغاتی با پاداش را قبل از درخواست آگهی نشان میدهد:
سویفت
do {
rewardedAd = try await RewardedAd.load(
// Replace this ad unit ID with your own ad unit ID.
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
let options = ServerSideVerificationOptions()
options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
rewardedAd?.serverSideVerificationOptions = options
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
هدف-C
// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest request]
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", error.localizedDescription);
return;
}
self.rewardedAd = ad;
GADServerSideVerificationOptions *options =
[[GADServerSideVerificationOptions alloc] init];
options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
ad.serverSideVerificationOptions = options;
}];
برای پاسخ به تماس ها ثبت نام کنید
برای دریافت اعلانها برای رویدادهای ارائه، باید GADFullScreenContentDelegate to the
ویژگی fullScreenContentDelegate آگهی برگشتی اختصاص دهید:
سویفت
rewardedAd?.fullScreenContentDelegate = self
SwiftUI
rewardedAd?.fullScreenContentDelegate = self
هدف-C
self.rewardedAd.fullScreenContentDelegate = self;
پروتکل GADFullScreenContentDelegate
برای زمانی که تبلیغ با موفقیت یا ناموفق نمایش داده می شود و زمانی که رد می شود، پاسخ به تماس ها را کنترل می کند. کد زیر نحوه پیاده سازی پروتکل را نشان می دهد:
سویفت
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
// Clear the rewarded ad.
rewardedAd = nil
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called with error: \(error.localizedDescription).")
}
SwiftUI
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
هدف-C
- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
// Clear the rewarded ad.
self.rewardedAd = nil;
}
- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}
تبلیغ را نمایش دهید و رویداد پاداش را مدیریت کنید
قبل از نمایش یک تبلیغ پاداش به کاربران، باید به کاربر یک انتخاب صریح برای مشاهده محتوای تبلیغاتی با پاداش در ازای دریافت پاداش ارائه دهید. تبلیغات با پاداش همیشه باید یک تجربه انتخابی باشد.
هنگام ارائه تبلیغ خود، باید یک شی GADUserDidEarnRewardHandler
برای مدیریت پاداش برای کاربر ارائه دهید.
کد زیر بهترین روش برای نمایش یک تبلیغ با پاداش را ارائه می دهد:
سویفت
rewardedAd.present(from: self) {
let reward = rewardedAd.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(from: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
هدف-C
[self.rewardedAd presentFromRootViewController:self
userDidEarnRewardHandler:^{
GADAdReward *reward = self.rewardedAd.adReward;
NSString *rewardMessage = [NSString
stringWithFormat:@"Reward received with currency %@ , amount %lf",
reward.type, [reward.amount doubleValue]];
NSLog(@"%@", rewardMessage);
// TODO: Reward the user.
}];
سوالات متداول
- آیا می توانم جزئیات پاداش
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
نمونههای کامل تبلیغات پاداش را به زبان دلخواه خود مشاهده کنید:
مراحل بعدی
درباره حریم خصوصی کاربر بیشتر بیاموزید.