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

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

تبلیغات پاداش، تبلیغاتی هستند که کاربران در ازای دریافت جوایز درون‌برنامه ، می‌توانند با آن‌ها تعامل داشته باشند. این راهنما به شما نشان می‌دهد که چگونه تبلیغات پاداش را از AdMobدر یک برنامه iOS ادغام کنید.چند داستان موفقیت مشتری را بخوانید: مطالعه موردی 1 ، مطالعه موردی 2 .

پیش نیازها

همیشه با تبلیغات آزمایشی تست کنید

هنگام ساخت و آزمایش برنامه های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می کنید. عدم انجام این کار می تواند منجر به تعلیق حساب شما شود.

ساده ترین راه برای بارگیری تبلیغات آزمایشی استفاده از شناسه واحد آگهی آزمایشی اختصاصی ما برای تبلیغات دارای پاداش iOS است:

ca-app-pub-3940256099942544/1712485313

این به‌طور ویژه پیکربندی شده است تا تبلیغات آزمایشی را برای هر درخواست بازگرداند، و شما می‌توانید هنگام کدنویسی، آزمایش و اشکال‌زدایی از آن در برنامه‌های خود استفاده کنید. فقط مطمئن شوید که قبل از انتشار برنامه خود، آن را با شناسه واحد تبلیغاتی خود جایگزین کنید.

برای کسب اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی SDK Ads Mobile، به Test Ads مراجعه کنید.

پیاده سازی

مراحل اولیه برای ادغام تبلیغات بینابینی دارای پاداش به شرح زیر است:

  • یک تبلیغ را بارگیری کنید
  • [اختیاری] اعتبار سنجی تماس های SSV
  • برای پاسخ به تماس ها ثبت نام کنید
  • تبلیغ را نمایش دهید و رویداد پاداش را مدیریت کنید

یک تبلیغ را بارگیری کنید

بارگیری یک تبلیغ با استفاده از روش استاتیک loadWithAdUnitID:request:completionHandler: در کلاس GADRewardedAd انجام می شود. روش بارگیری به شناسه واحد تبلیغات شما، یک شی GADRequest و یک کنترل کننده تکمیل نیاز دارد که در صورت موفقیت یا عدم موفقیت بارگیری آگهی فراخوانی می شود. شی GADRewardedAd بارگذاری شده به عنوان یک پارامتر در کنترل کننده تکمیل ارائه می شود. مثال زیر نشان می دهد که چگونه یک GADRewardedAd را در کلاس ViewController بارگیری کنید.

سریع

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
    }
    )
  }
}

هدف-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.");
      }];
}

[اختیاری] تأیید اعتبار سمت سرور (SSV) تماس های برگشتی

برنامه‌هایی که به داده‌های اضافی در تماس‌های تأیید سمت سرور نیاز دارند، باید از ویژگی داده سفارشی تبلیغات پاداش استفاده کنند. هر مقدار رشته تنظیم شده روی یک شیء تبلیغاتی پاداش داده شده به پارامتر query custom_data در SSV ارسال می شود. اگر مقدار داده سفارشی تنظیم نشده باشد، مقدار پارامتر query custom_data در پاسخ تماس SSV وجود نخواهد داشت.

نمونه کد زیر نشان می‌دهد که چگونه داده‌های سفارشی را روی یک شی تبلیغاتی پاداش داده شده قبل از درخواست آگهی تنظیم کنید.

سریع

GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error != error {
      rewardedInterstitialAd = ad
      let options = GADServerSideVerificationOptions()
      options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
      rewardedInterstitialAd.serverSideVerificationOptions = options
    }

هدف-C

GADRequest *request = [GADRequest request];
[GADRewardedInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:request
    completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) {
      if (error) {
        // Handle Error
        return;
      }
      self.rewardedInterstitialAd = ad;
      GADServerSideVerificationOptions *options =
          [[GADServerSideVerificationOptions alloc] init];
      options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad.serverSideVerificationOptions = options;
    }];

برای پاسخ به تماس ها ثبت نام کنید

برای دریافت اعلان‌ها برای رویدادهای ارائه، باید پروتکل GADFullScreenContentDelegate را پیاده‌سازی کنید و آن را به ویژگی fullScreenContentDelegate تبلیغ برگشتی اختصاص دهید. پروتکل GADFullScreenContentDelegate برای زمانی که تبلیغ با موفقیت یا ناموفق نمایش داده می شود و زمانی که رد می شود، پاسخ به تماس ها را کنترل می کند. کد زیر نحوه پیاده سازی پروتکل و اختصاص آن به تبلیغ را نشان می دهد:

سریع

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                     request: request,
                     completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
      rewardedAd?.fullScreenContentDelegate = self
    }
    )
  }

  /// 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.")
  }
}

هدف-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 یک شی یک بار مصرف است. این بدان معناست که هنگامی که یک تبلیغ پاداش نشان داده می شود، دیگر نمی توان آن را نشان داد. بهترین روش این است که تبلیغ پاداش دیگری را در روش adDidDismissFullScreenContent: در GADFullScreenContentDelegate کنید تا آگهی پاداش بعدی به محض رد شدن آگهی قبلی شروع به بارگیری کند.

تبلیغ را نمایش دهید و رویداد پاداش را مدیریت کنید

قبل از نمایش یک تبلیغ با پاداش به کاربران، باید به کاربر یک انتخاب صریح برای مشاهده محتوای تبلیغاتی با پاداش در ازای دریافت پاداش ارائه دهید. تبلیغات با پاداش همیشه باید یک تجربه انتخابی باشد.

هنگام ارائه تبلیغ خود، باید یک شی GADUserDidEarnRewardHandler برای مدیریت پاداش برای کاربر ارائه دهید.

کد زیر بهترین روش برای نمایش یک تبلیغ با پاداش را ارائه می دهد.

سریع

func show() {
  if let ad = rewardedAd {
    ad.present(fromRootViewController: self) {
      let reward = ad.adReward
      print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
      // TODO: Reward the user.
    }
  } else {
    print("Ad wasn't ready")
  }
}

هدف-C

- (void)show {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                                  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 فراخوانی می کند adDidDismissFullScreenContent: .

نمونه هایی در GitHub