مهاجرت SDK

این صفحه مهاجرت های نسخه های فعلی و قبلی را پوشش می دهد.

به SDK v9 مهاجرت کنید

Google 移动广告 SDK 版本 9.0.0 将于 2022 年初推出,其中包含一些重大更改,以及一些 API 重命名和已弃用的 API 的删除。本指南概述了这些更改以及使用我们最新的 SDK 使您的应用程序更新的最佳实践。

广告在 iOS 10 上停止投放

Google 移动广告 SDK 9.0.0 版支持的最低 iOS 版本是 iOS 11。

升级到 Google Mobile Ads SDK 9.0.0 版不会破坏您在 iOS 10 设备上的应用,但不会在这些设备上投放广告。

更严格地执行状态栏控制

从 9.0.0 版本开始,当您展示全屏格式的广告时,您的应用应确保广告能够控制状态栏的展示。如果您不这样做,您将在日志中看到一条错误消息。

根据应用中视图控制器的特定布局,您可能不需要进行任何更改来确保这一点,但在某些情况下,您可能需要设置父视图控制器的modalPresentationCapturesStatusBarAppearance属性。

将 adDidPresentFullScreenContent: 重命名为 adWillPresentFullScreenContent:

没有行为改变。委托方法在广告即将展示之前被调用,因此新方法名称更好地反映了它的功能。

删除 GADRequest 上的位置设置 API

- (void)setLocationWithLatitude:longitude:accuracy:已从GADRequest中删除,因为 Google 不使用位置数据来定位广告。如果需要,使用第三方 API 将信息提供给第三方广告网络。

自定义事件接口弃用

自定义事件使使用 AdMob 中介的发布商可以为不属于受支持的广告网络之一的广告网络添加瀑布中介。

所有自定义事件协议均已弃用。相反,使用现有的GADMediationAdapterGADMediationAdEventDelegate协议来实现相同的功能。此更改提高了清晰度,并使您能够为以前不可用的奖励广告和滚动广告创建自定义事件。

蜜蜂

下表列出了应从版本 9.0.0 开始使用的自定义事件 API 的相应中介适配器 API。

v8 v9
GADCustomEventBanner
GADCustomEvent 插页式
GADCustomEventNativeAd
GAD中介适配器GAD中介横幅广告
GAD 中介插页式广告
GADMediationInterscrollerAd
GAD 中介奖励广告
GADMediationNativeAd
delegate委托由GADMediationAdapter类的每个加载函数的加载完成处理程序返回
-init -init
-requestBannerAd:parameter: label:request: -loadBannerForAdConfiguration: completionHandler:
-requestInterstitialAdWith Parameter:label:request: -loadInterstitialFor AdConfiguration: completionHandler:
-requestNativeAdWithParameter: request:adTypes:options: rootViewController: -loadNativeAdFor AdConfiguration: completionHandler:
不适用-loadInterscrollerAdFor AdConfiguration: completionHandler:
不适用-loadRewardedAdFor AdConfiguration: completionHandler:
-presentFromRootViewController: -presentFromViewController:
-handlesUserClicks -handlesUserClicks
-handlesUserImpressions -handlesUserImpressions

委托方法

下表列出了从版本 9.0.0 开始应使用的自定义事件委托方法的相应中介广告事件委托方法。

v8 v9
GADCustomEventBannerDelegate
GADCustomEventInterstitialDelegate
GADCustomEventNativeAdDelegate
GADMediationAdEventDelegate GAD中介广告
-customEventBanner:didReceiveAd:
-customEventInterstitialDidReceiveAd:
广告加载状态包含在GADMediationAdapter类中每个加载函数的加载完成处理程序中
-customEventBanner:didFailAd:
-customEventInterstitial:didFailAd:
-customEventBannerWasClicked:
-customEventInterstitialWasClicked:
-reportClick
-customEventBannerWill PresentModal:
-customEventInterstitialWill PresentModal:
-willPresentFullScreenView
-customEventBannerWill DismissModal:
-customEventInterstitialWill DismissModal:
-willDismissFullScreenView
-customEventBannerDid DismissModal:
-customEventInterstitialDid DismissModal:
-didDismissFullScreenView
-customEventBannerWill LeaveApplication:
-customEventInterstitialWill LeaveApplication:
-willBackgroundApplication
viewControllerFor PresentingModalView -[GADMediationBannerAd view]

其他删除/替换的方法和常量

方法、常量或属性的更改
kGAD-前缀常量已移除。使用GAD-前缀的常量。
GADAdNetworkResponseInfo credentials被删除。请改用adUnitMapping
GADCustomNativeAd GADCustomNativeAd中的mediaView已弃用。请改用mediaContent
GoogleMobileAds中的应用内购买 API inAppPurchase中的GoogleMobileAds API 已被移除。

به SDK v8 مهاجرت کنید

Google Mobile Ads SDK نسخه 8.0.0 چند تغییر عمده و همچنین برخی تغییر نام ها و حذف API ها را معرفی می کند.

به روز رسانی API با فرمت تمام صفحه

با شروع نسخه 8.0.0، تبلیغات بینابینی و دارای پاداش یک سبک عمومی تبلیغات تمام صفحه را برای ثبات بیشتر به اشتراک می گذارند. این APIهای تبلیغات تمام صفحه جدید دو تفاوت عمده با APIهای تبلیغات تمام صفحه نسخه 7 دارند:

  1. load روش کلاس استاتیک

    روش قبلی برای بارگیری/نمایش آگهی تمام صفحه به شرح زیر است:

    1. یک نمونه شی تبلیغاتی ایجاد کنید و یک مرجع به آن نگه دارید.
    2. نماینده ای را تعیین کنید که بارگیری را کنترل کرده و پاسخگوی تماس ها را نشان دهد.
    3. یک تبلیغ را بارگیری کنید.
    4. بررسی کنید که آیا آگهی با استفاده از isReady بارگیری شده است.
    5. آگهی را نمایش دهید.

    در نسخه 8 رویکرد کمی تغییر می کند. تماس‌های بارگیری دیگر بخشی از یک نماینده نیستند. در عوض، آنها به عنوان یک کنترل کننده تکمیل به روش load منتقل می شوند:

    1. یک روش بار استاتیک در کلاس تبلیغات فراخوانی کنید و یک کنترل کننده تکمیل بار ارائه دهید.
    2. در پاسخ به تماس تکمیل بارگذاری، به آگهی بارگیری شده که برگردانده شده است اشاره کنید.
    3. نماینده ای را تعیین کنید که پاسخگوی تماس های نمایشی را مدیریت کند.
    4. آگهی را نمایش دهید.

    رویکرد جدید این مزایا را فراهم می کند:

    • شما هرگز به تبلیغی که بارگذاری نشده است اشاره ای نخواهید داشت.
    • شما مجبور نیستید در حین بارگذاری یک شیء تبلیغاتی آن را نگه دارید.
  2. رویدادهای تبلیغاتی مداوم

    نوع رویداد API موجود v8 API
    بارگذاری رویدادها GADInterstitialDelegate یا GADRewardedAdDelegate GADInterstitialAdLoadCompletionHandler یا GADRewardedAdLoadCompletionHandler
    رویدادهای ارائه GADFullScreenContentDelegate

    قبلاً، برای گوش دادن به رویدادهای تبلیغاتی، کلاسی را ثبت می‌کردید که پروتکل GADInterstitialDelegate را در ویژگی نماینده بینابینی پیاده‌سازی می‌کند، یا کلاسی را ثبت می‌کنید که پروتکل GADRewardedAdDelegate را بسته به قالبی که از آن استفاده می‌کنید، در ویژگی نماینده آگهی پاداش‌دهی شده پیاده‌سازی می‌کند. همین نماینده روش‌هایی داشت که به چرخه عمر بارگذاری و ارائه یک تبلیغ مربوط می‌شد.

    با نسخه 8، رویدادهای بارگذاری و ارائه جداگانه هستند. اکنون می‌توانید یک GADFullScreenContentDelegate را هر زمان که بخواهید قبل از نمایش آگهی ثبت کنید، به‌جای اینکه قبل از بارگیری آگهی، یک نماینده را تعیین کنید. رویدادهای بار آگهی، که مخصوص هر قالب هستند، به یک کنترل کننده تکمیل بار منتقل می شوند که در روش بارگذاری ارسال شده است.

بینابینی

بارگیری آگهی

قطعه کد زیر به شما نشان می دهد که چگونه یک تبلیغ بینابینی را بارگیری کنید و در صورت موفقیت یا عدم بارگیری آگهی به رویدادها گوش دهید.

v7

سریع

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/44118910")
    interstitial.delegate = self
    let request = GADRequest()
    interstitial.load(request)
  }

  /// Tells the delegate an ad request succeeded.
  func interstitialDidReceiveAd(_ ad: GADInterstitial) {
    print("Interstitial ad loaded.")
  }

  /// Tells the delegate an ad request failed.
  func interstitial(_ ad: GADInterstitial, didFailToReceiveAdWithError error: GADRequestError) {
    print("Interstitial ad failed to load with error: \(error.localizedDescription)")
  }
}

هدف-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/44118910"];
  self.interstitial.delegate = self;
  GADRequest *request = [GADRequest request];
  [self.interstitial loadRequest:request];
}

/// Tells the delegate an ad request succeeded.
- (void)interstitialDidReceiveAd:(GADInterstitial *)ad {
  NSLog(@"Insterstitial ad loaded.");
}

/// Tells the delegate an ad request failed.
- (void)interstitial:(GADInterstitial *)ad
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"Interstitial ad failed to load with error: %@", [error localizedDescription]);
}

v8

سریع

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GADRequest()
    GADInterstitialAd.load(withAdUnitID:"ca-app-pub-8123415297019784/4985798738",
                                request: request,
                      completionHandler: { (ad, error) in
                        if let error = error {
                          print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                          return
                        }
                        self.interstitial = ad
                        self.interstitial.fullScreenContentDelegate = self
                      }
    )
  }
}

هدف-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/44118910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

نمایش تبلیغ

v7

سریع

func showInterstitial() {
  ...
  if interstitial.isReady {
    interstitial.present(fromRootViewController: self)
  } else {
    print("Ad wasn't ready")
  }
}

هدف-C

- (void)showInterstitial: {
  ...
  if (self.interstitial.isReady) {
    [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

v8

سریع

func showInterstitial() {
  ...
  if let ad = interstitial {
    ad.present(fromRootViewController: self)
  } else {
    print("Ad wasn't ready")
  }
}

هدف-C

- (void)showInterstitial: {
  ...
  if (self.interstitial) {
    [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

رویدادهای تبلیغاتی ارائه

تکه‌های کد زیر به شما نشان می‌دهد که چگونه می‌توانید برای زمانی که آگهی ارائه می‌شود (با موفقیت یا ناموفق) و زمانی که رد می‌شود، تماس‌های برگشتی را مدیریت کنید.

v7

سریع

override func viewDidLoad() {
  super.viewDidLoad()
  interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/44118910")
  interstitial.delegate = self
  ...
}

/// Tells the delegate that an interstitial will be presented.
func interstitialWillPresentScreen(_ ad: GADInterstitial) {
  print("Interstitial ad will be presented.")
}

/// Tells the delegate the interstitial is to be animated off the screen.
func interstitialWillDismissScreen(_ ad: GADInterstitial) {
  print("Interstitial ad will be dismissed.")
}

/// Tells the delegate the interstitial had been animated off the screen.
func interstitialDidDismissScreen(_ ad: GADInterstitial) {
  print("Interstitial ad dismissed.")
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
///
/// This is not a reliable callback for an ad click event and is removed in
/// version 8. If you wish to listen to an ad causing a user to leave the app,
/// use applicationWillResignActive: or sceneWillResignActive: instead.
func interstitialWillLeaveApplication(_ ad: GADInterstitial) {
  print("Interstitial ad will leave application.")
}

هدف-C

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/44118910"];
  self.interstitial.delegate = self;
  ...
}

/// Tells the delegate that an interstitial will be presented.
- (void)interstitialWillPresentScreen:(GADInterstitial *)ad {
  NSLog(@"Interstitial ad will be presented.");
}

/// Tells the delegate the interstitial is to be animated off the screen.
- (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
  NSLog(@"Interstitial ad will be dismissed.");
}

/// Tells the delegate the interstitial had been animated off the screen.
- (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
  NSLog(@"Interstitial ad dismissed.");
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
///
/// This is not a reliable callback for an ad click event and is removed in
/// version 8. If you wish to listen to an ad causing a user to leave the app,
/// use applicationWillResignActive: or sceneWillResignActive: instead.
- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad {
  NSLog(@"Interstitial ad will leave application.");
}

v8

سریع

override func viewDidLoad() {
  super.viewDidLoad()
  let request = GADRequest()
  GADInterstitialAd.load(withAdUnitID:"ca-app-pub-8123415297019784/4985798738",
                              request: request,
                    completionHandler: { (ad, error) in
                      if let error = error {
                        print(error.localizedDescription)
                        return
                      }
                      self.interstitial = ad
                      self.interstitial.fullScreenContentDelegate = self
                    }
  )
}

func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("Ad did present full screen content.")
}

func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
  print("Ad failed to present full screen content with error \(error.localizedDescription).")
}

func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("Ad did dismiss full screen content.")
}

هدف-C

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/44118910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription])
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

- (void)adDidPresentFullScreenContent:(id)ad {
  NSLog(@"Ad did present full screen content.");
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"Ad failed to present full screen content with error %@.", [error localizedDescription]);
}

- (void)adDidDismissFullScreenContent:(id)ad {
  NSLog(@"Ad did dismiss full screen content.");
}

پاداش داده شد

بارگیری آگهی

v7

سریع

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADRewardedAdDelegate {
  /// The rewarded ad.
  var rewardedAd: GADRewardedAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
    rewardedAd.delegate = self
    rewardedAd?.load(GADRequest()) { error in
      if let error = error {
        print("Rewarded ad failed to load with error: \(error.localizedDescription)")
      } else {
        print("Rewarded ad loaded.")
      }
    }
  }
}

هدف-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"];
  self.rewardedAd.delegate = self;
  GADRequest *request = [GADRequest request];
  [self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
    if (error) {
      NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
    } else {
      NSLog(@"Rewarded ad loaded.");
    }
  }];
}

v8

سریع

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {
  /// The rewarded ad.
  var rewardedAd: GADRewardedAd?

  override func viewDidLoad() {
  super.viewDidLoad()
  let request = GADRequest()
  GADRewardedAd.load(withAdUnitID: "ca-app-pub-8123415297019784/9501821136",
                          request: request, completionHandler: { (ad, error) in
                            if let error = error {
                              print("Rewarded ad failed to load with error: \(error.localizedDescription)")
                              return
                            }
                            self.rewardedAd = ad
                            self.rewardedAd?.fullScreenContentDelegate = self
                          }
  )
  }
}

هدف-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  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.");
    self.rewardedAd.fullScreenContentDelegate = self;
}

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

زمانی که کاربر پاداشی دریافت می‌کند، تبلیغات دارای پاداش از شما می‌خواهد که رویداد را مدیریت کنید. با نسخه 7 API GADRewardedAd ، rewardedAd:userDidEarnReward: را به عنوان بخشی از پروتکل GADRewardedAdDelegate سازی می کنید. برای نسخه 8، شما GADUserDidEarnRewardHandler را برای ارائه تبلیغ پیاده سازی می کنید.

v7

سریع

func showRewardedAd() {
  ...
  if rewardedAd.isReady {
    rewardedAd.present(fromRootViewController: self delegate:self)
  } else {
    print("Ad wasn't ready")
  }
}

/// Tells the delegate that the user earned a reward.
func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarnReward: GADAdReward) {
  // TODO: Reward the user.
}

هدف-C

- (void)showRewardedAd: {
  ...
  if (self.rewardedAd.isReady) {
    [self.rewardedAd presentFromRootViewController:self delegate:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

/// Tells the delegate that the user earned a reward.
- (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward {
  // TODO: Reward the user.
}

v8

سریع

func showRewardedAd() {
  ...
  if let ad = rewardedAd {
      ad.present(fromRootViewController: self,
               userDidEarnRewardHandler: {
                 let reward = ad.adReward
                 // TODO: Reward the user.
               }
      )
  } else {
    print("Ad wasn't ready")
  }
}

هدف-C

- (void)showRewardedAd: {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                          userDidEarnRewardHandler:^ {
      GADAdReward *reward = self.rewardedAd.adReward;
      // TODO: Reward the user.
    }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

رویدادهای تبلیغاتی ارائه

با GADRewardedAd API شما یک GADRewardedAdDelegate را به روشی که تبلیغ را ارائه می دهد، ارسال می کنید. با GADRewardedAd API، یک GADFullscreenContentDelegate را به عنوان یک ویژگی روی آگهی قبل از ارائه آگهی تنظیم می کنید.

v7

سریع

func showRewardedAd() {
  ...
  if rewardedAd.isReady {
    rewardedAd.present(fromRootViewController: self delegate:self)
  } else {
    print("Ad wasn't ready")
  }
}

/// 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 with error: \(error.localizedDescription).")
}

هدف-C

- (void)showRewardedAd: {
  ...
  if (self.rewardedAd.isReady) {
    [self.rewardedAd presentFromRootViewController:self delegate:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

/// Tells the delegate that the rewarded ad was presented.
- (void)rewardedAdDidPresent:(GADRewardedAd *)rewardedAd {
  NSLog(@"Rewarded ad presented.");
}

/// Tells the delegate that the rewarded ad failed to present.
- (void)rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error {
  NSLog(@"Rewarded ad failed to present with error: %@",
        [error localizedDescription]);
}

/// Tells the delegate that the rewarded ad was dismissed.
- (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
  NSLog(@"Rewarded ad dismissed.");
}

v8

سریع

override func viewDidLoad() {
  super.viewDidLoad()
  let request = GADRequest()
  GADRewardedAd.load(withAdUnitID: "ca-app-pub-8123415297019784/9501821136",
                          request: request, completionHandler: { (ad, error) in
                            if let error = error {
                              print(error.localizedDescription)
                              return
                            }
                            self.rewardedAd = ad
                            self.rewardedAd?.fullScreenContentDelegate = self
                          }
  )
}

/// Tells the delegate that the rewarded ad was presented.
func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("Rewarded ad presented.")
}
/// Tells the delegate that the rewarded ad was dismissed.
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("Rewarded ad dismissed.")
}
/// Tells the delegate that the rewarded ad failed to present.
func ad(_ ad: GADFullScreenPresentingAd,
    didFailToPresentFullScreenContentWithError error: Error) {
  print("Rewarded ad failed to present with error: \(error.localizedDescription).")
}

هدف-C

- (void)viewDidLoad {
  [super viewDidLoad];

  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.");
    self.rewardedAd.fullScreenContentDelegate = self;
}

/// Tells the delegate that the rewarded ad was presented.
- (void)adDidPresentFullScreenContent:(id)ad {
  NSLog(@"Rewarded ad presented.");
}

/// Tells the delegate that the rewarded ad failed to present.
- (void)ad:(id)ad
    didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"Rewarded ad failed to present with error: %@",
       [error localizedDescription]);
}

/// Tells the delegate that the rewarded ad was dismissed.
- (void)adDidDismissFullScreenContent:(id)ad {
  NSLog(@"Rewarded ad dismissed.");
}

حذف API Legacy GADRewardedBasedVideoAd

API جدیدتر GADRewardedAd برای اولین بار در مارس 2019 معرفی شد و بیش از 18 ماه است که ترجیح داده شده است. در مقایسه با API قدیمی GADRewardedBasedVideoAd ، پیشرفت‌های بیشتری داشته است، از جمله توانایی بارگیری بیش از یک آگهی با پاداش در یک زمان.

API قدیمی GADRewardedBasedVideoAd در SDK نسخه 8.0.0 حذف شده است.

منسوخ شدن بنر هوشمند به نفع بنر تطبیقی

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

سریع

class ViewController: UIViewController {

  override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // Note: The safe area is not known until viewWillAppear.
    let adSize = getFullWidthAdaptiveAdSize()
  }

  func getFullWidthAdaptiveAdSize() -> GADAdSize {
    // Here safe area is taken into account, hence the view frame is used after the
    // view has been laid out.
    let frame = { () -> CGRect in
      if #available(iOS 11.0, *) {
        return view.frame.inset(by: view.safeAreaInsets)
      } else {
        return view.frame
      }
    }()
    return GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(frame.size.width)
  }
}

هدف-C

@implementation ViewController

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  // Note: The safe area is not known until viewWillAppear.
  GADAdSize adSize = [self getFullWidthAdaptiveAdSize];
}

- (GADAdSize)getFullWidthAdaptiveAdSize {
  CGRect frame = self.view.frame;
  // Here safe area is taken into account, hence the view frame is used after
  // the view has been laid out.
  if (@available(iOS 11.0, *)) {
    frame = UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets);
  }
  return GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(frame.size.width);
}

@end

حذف پاسخ تماس برنامه را ترک کنید

willLeaveApplication برای همه قالب‌های تبلیغاتی به نفع روش‌های applicationDidEnterBackground: و sceneDidEnterBackground: حذف شده است. استفاده از API های سطح سیستم عامل هر زمان که کاربران برنامه شما را ترک می کنند، صرف نظر از اینکه به دلیل تعامل تبلیغاتی باشد یا نه، به شما اطلاع می دهد.

توجه داشته باشید که پاسخ تماس willLeaveApplication هرگز به عنوان یک کنترل کننده کلیک تبلیغات در نظر گرفته نشده است و تکیه بر این تماس برای گزارش کلیک ها معیار دقیقی ایجاد نمی کند. به عنوان مثال، با کلیک بر روی نماد AdChoices که یک مرورگر خارجی را راه‌اندازی می‌کند، پاسخ تماس را فراخوانی می‌کند اما یک کلیک حساب نمی‌شود.

تغییر نام کلاس ها

جدول زیر نام کلاس‌های خاصی را که در نسخه 8 تغییر کرده یا حذف شده‌اند فهرست می‌کند.

  • همه کلاس‌های مرتبط با GADUnifiedNativeAd به GADNativeAd تغییر نام داده‌اند.
  • GADRewardBasedVideoAd ، GADNativeExpressAdView ، و GADInstreamAd حذف شده‌اند.
  • همه کلاس‌های دارای پیشوند DFP با پیشوند GAM جایگزین شده‌اند.
کلاس v7.68.0 کلاس v8.0.0
DFPBannerView GAMBannerView
DFPBannerViewOptions GAMBannerViewOptions
DFPIInterstitial GAInterstitialAd
DFPRequest GAMRequest
خطای GADRequest خطای NSE
GADUnifiedNativeAdView GADNativeAdView
GADUnifiedNativeAd GADNativeAd
GADUnifiedNativeAdAssetIdentifiers GADNativeAdAssetIdentifiers
GADUnifiedNativeAdDelegate GADNativeAdDelegate
GADUnifiedNativeAdUnconfirmedClickDelegate GADNativeAdUnconfirmedClickDelegate
GADNativeCustomTemplateAd GADCustomNative Ad
GADNativeCustomTemplateAdLoaderDelegate GADCustomNativeAdLoaderDelegate
GADNativeAdDelegate GADCustomNativeAdDelegate
GADINAppPurchase حذف شده
GADInterstitial GADInterstitialAd
GADNativeExpressAdView حذف شده
GADRewardBasedVideoAd حذف شده
GADInstreamAd حذف شده
GADInstreamAdView حذف شده

روش‌ها حذف/جایگزین شدند

جدول زیر تغییرات خاص نسخه 8 را فهرست می کند. به طور خلاصه:

  • روش‌ها و ویژگی‌های منسوخ شده قبلی حذف شده‌اند.
  • -willLeaveApplication: روش های نمایندگی برای همه فرمت ها حذف شده است.
  • نام کلاس شبکه تبلیغاتی به ویژگی GADResponseInfo شده است.
  • شناسه دستگاه آزمایشی به ویژگی GADRequestConfiguration منتقل شده است.
کلاس v7.68.0 v7.68.0 API v8.0.0 API یادداشت
GADMobileAds +configureWithApplicationID: -startWithCompletion Handler: شناسه برنامه اکنون در Info.plist تنظیم شده است.
+disableAutomatedInApp PurchaseReporting -disableAutomatedInApp PurchaseReporting
+disableSDKCrashReporting غیرفعال کردن SDKCrashReporting
GADRequest دستگاه های تست GADRequestConfiguration .testdeviceidentifiers ویژگی testDeviceIdentifiers برای همه درخواست‌های تبلیغاتی اعمال می‌شود، در حالی که ویژگی قدیمی testDevices برای هر درخواست تنظیم شده بود.
جنسیت حذف شده
روز تولد حذف شده
+sdkVersion GADMobileAds.sharedInstance .sdkVersion
-setBirthday WithMonth:day:year: حذف شده
-setLocationWithDescription: -setLocationWith Latitude:longitude:accuracy:
-tagForChildDirectedTreatment: [GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment]
GADErrorCode kGADEخطا* خطای GADE* پیشوند k از تمام ثابت های کد خطا حذف می شود.
GADBannerView دارای Refreshed خودکار است autoload فعال شد
inAppPurchaseDelegate حذف شده
mediatedAdView حذف شده
adNetworkClassName answerInfo .adNetworkClassName
DFPBannerView -setValidAdSizesWithSizes: -setValidAdSizes:
DFPBannerViewOptions -adSizeDelegate حذف شده
GADBannerViewDelegate -adViewDidReceiveAd: -bannerViewDidReceiveAd:
-adView:didFailToReceive AdWithError: -bannerView:didFailToReceive AdWithError:
-adViewWillPresentScreen: -bannerViewWillPresentScreen:
-adViewWillDismissScreen: -bannerViewWillDisissScreen:
-adViewDidDismissScreen: -bannerViewDidDisissScreen:
-adViewWillLeaveApplication: حذف شده
GADNativeCustomTemplateAd شناسه الگو GADCustomNativeAd.formatID
-performClickOnAssetWithKey: customClickHandler: -performClickOnAssetWithKey:
GADNativeAdImageAd LoaderOptions preferredImageOrientation GADNativeAdMediaAdOptions .mediaAspectRatio
GADInterstitial inAppPurchaseDelegate حذف شده
آماده است حذف شده به جای آن از canPresentFrom RootViewController:error: استفاده کنید.
استفاده شده است حذف شده
-init -initWithAdUnitID:
-setAdUnitID: -initWithAdUnitID:
adNetworkClassName answerInfo .adNetworkClassName
-interstitialWill LeaveApplication: حذف شده
GADUnifiedNativeAd ویدئو کنترلر mediaContent.videoController
adNetworkClassName answerInfo .adNetworkClassName