تبلیغات با پاداش

پلتفرم را انتخاب کنید: Android iOS Unity Flutter

تبلیغات پاداش، تبلیغاتی هستند که کاربران در ازای دریافت جوایز درون‌برنامه، می‌توانند با آن‌ها تعامل داشته باشند. این راهنما به شما نشان می‌دهد که چگونه تبلیغات پاداش را از 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

نمونه‌های کامل تبلیغات پاداش را به زبان دلخواه خود مشاهده کنید:

مراحل بعدی

درباره حریم خصوصی کاربر بیشتر بیاموزید.