SDK-Migration

Auf dieser Seite finden Sie Informationen zu Migrationen für die aktuelle und die vorherige Version des Google Mobile Ads SDK für iOS. Version 11.0.0 wird voraussichtlich im Januar 2024 veröffentlicht.

Von der SDK-Version 10 zur Version 11 migrieren

Minimales Bereitstellungsziel

Das Mindestbereitstellungsziel wurde auf iOS 12 erhöht.

Mindestversion von Xcode

Die unterstützte Mindestversion von Xcode wurde auf 15.1 erhöht.

Unter iOS 12 werden keine Anzeigen mehr ausgeliefert

Mit Version 11.0.0 des Google Mobile Ads SDK werden Anzeigen nur auf Geräten mit iOS 13 ausgeliefert. und höher.

GoogleAppMeasurement-Abhängigkeit entfernt

In Version 11.0.0 ist die Abhängigkeit von GoogleAppMeasurement wurde entfernt. Diese Abhängigkeit, die die Ein/Aus-Schaltfläche für Nutzermesswerte in AdMob ermöglicht hat, wird eingestellt. Bis Nutzermesswerte in AdMob weiter zu erfassen, verknüpfen Sie Ihre AdMob-App mit Firebase und Integrieren des Google Analytics for Firebase SDK in für Ihre App.

Änderungen an der Vollbildanzeigendarstellung

Die folgenden Änderungen wirken sich auf die verschiedenen Anzeigenformate aus:

  • App-Start-Anzeige
  • Interstitial
  • Verfügbar
  • Interstitial mit Prämie

Der View-Controller-Parameter in -canPresentFromRootViewController:error: und Für -presentFromRootViewController: sind Nullwerte zulässig. Wird „nil“ übergeben, wird die Anzeige werden vom obersten Ansichts-Controller in der Ansichts-Controller-Hierarchie dargestellt.

Entfernte Methoden

Die folgenden Methoden wurden entfernt.

v11.0.0-Typ Methode Hinweise
GADAppOpenAd load(withAdUnitID adUnitID: String, request: GADRequest?, orientation: UIInterfaceOrientation) Verwenden Sie stattdessen load(withAdUnitID adUnitID: String, request: GADRequest?).
GADMediationBannerAdEventDelegate willBackgroundApplication() Kein Ersatz.
GADMediationInterstitialAdEventDelegate willBackgroundApplication() Kein Ersatz.
GADMediationNativeAdEventDelegate willBackgroundApplication() Kein Ersatz.
GADMediationRewardedAdEventDelegate didRewardUser(with reward: GADAdReward) Verwenden Sie stattdessen didRewardUser().
GADMediatedUnifiedNativeAdNotificationSource mediatedNativeAdWillLeaveApplication(_ mediatedNativeAd: GADMediatedUnifiedNativeAd) Kein Ersatz.
GADRequestConfiguration setSameAppKeyEnabled(_ enabled: Bool) Verwenden Sie stattdessen setPublisherFirstPartyIDEnabled(_ enabled: Bool).
tagForUnderAge(ofConsent underAgeOfConsent: Bool) Verwende stattdessen die Property tagForUnderAgeOfConsent.
tag(forChildDirectedTreatment childDirectedTreatment: Bool) Verwende stattdessen die Property tagForChildDirectedTreatment.

Properties entfernt

Die folgenden Eigenschaften wurden entfernt.

v11.0.0-Klasse Attribut Hinweise
GADMediationAdConfiguration hasUserLocation Kein Ersatz.
userLatitude
userLongitude
userLocationAccuracyInMeters
childDirectedTreatment Verwenden Sie stattdessen GADMobileAds.sharedInstance.requestConfiguration.tagForChildDirectedTreatment.
GADResponseInfo adNetworkClassName Verwende stattdessen adNetworkClassName von loadedAdNetworkResponseInfo.

GADAdFormatUnknown entfernt

GADAdFormatUnknown wurde ohne Ersatz entfernt.

Änderungen an der Logging-SDK-Version

In Version 11.0.0 wird sdkVersion entfernt. Um die Version des Google Mobile Ads SDK zu protokollieren, versionNumber verwenden .

Version 10.0.0

GADMobileAds.sharedInstance().sdkVersion

Version 11.0.0

GADGetStringFromVersionNumber(GADMobileAds.sharedInstance().versionNumber)

Änderungen an der Fehlerbehandlung von GADAdLoader

Ab Version 11.0.0 sendet GADAdLoader keine Anzeigenanfrage, wenn delegate den angeforderten Anzeigentypen nicht entspricht Delegat-Protokoll. Zuvor wurden nachdem die Anzeigenanfrage gestellt wurde.

Änderungen am Testverhalten

In der Tabelle sind die aktualisierten Bedingungen für Folgendes aufgeführt: Properties geben true zurück.

Klasse Attribut
GADMediationAdConfiguration isTestRequest
GADCustomEventRequest isTesting
v10.0.0 v11.0.0
  • Das Gerät wurde in testDeviceIdentifiers explizit als Testgerät deklariert.
  • Das Gerät wurde in testDeviceIdentifiers explizit als Testgerät deklariert.
  • Das Gerät ist ein Simulator.
  • Das Gerät wird in der Benutzeroberfläche von AdMob explizit als Testgerät deklariert.

Von Version 9 zu Version 10 migrieren

广告停止在 iOS 11 设备上投放

Google 移动广告 SDK 版本 10.0.0 仅在搭载 iOS 12 及更高版本的设备上投放广告。

升级到 Google 移动广告 SDK 版本 10.0.0 不会影响您的应用在 iOS 11 和 iOS 10 设备上的行为,但广告不会在这些设备上投放。

不再支持使用位码构建

现在,您必须在移动应用中停用位码,才能集成 Google 移动广告 SDK。

已移除的类型

类型 备注
GADGender 无替代项。
GADMRewardBasedVideoAdNetworkAdapterProtocol 选择广告联盟一文中列出的所有激励广告中介适配器已停止使用这些协议超过一年了。将 GADMediationAdapter 用于中介和自定义事件。
GADMRewardBasedVideoAdNetworkConnectorProtocol

已移除的属性

以下属性已移除且无替代项。

v10.0.0 中的类 媒体资源
GADMediationAdRequest userBirthday
userGender
userHasLocation
userLatitude
userLongitude
userLocationAccuracyInMeters
userLocationDescription
GADCustomEventRequest userHasLocation
userLatitude
userLongitude
userLocationAccuracyInMeters
userLocationDescription

Von Version 8 zu Version 9 migrieren

Unter iOS 10 werden keine Anzeigen mehr ausgeliefert

iOS 11 ist die mindestens erforderliche iOS-Version, die vom Google Mobile Ads SDK 9.0.0 unterstützt wird.

Wenn Sie ein Upgrade auf Version 9.0.0 des Google Mobile Ads SDK ausführen, funktioniert Ihre App auf iOS 10-Geräten zwar weiterhin, auf diesen Geräten werden jedoch keine Anzeigen ausgeliefert.

Strengere Erzwingung von Steuerelementen in der Statusleiste

Ab Version 9.0.0 sollte bei der Präsentation von Vollbildanzeigen in Ihrer App sichergestellt sein, dass durch die Anzeigen die Darstellung der Statusleiste gesteuert werden kann. Andernfalls wird in den Protokollen eine Fehlermeldung angezeigt.

Abhängig vom jeweiligen Layout der Ansichts-Controller in Ihrer App müssen Sie möglicherweise keine Änderungen vornehmen, um dies zu gewährleisten. Sie sollten die Property childViewControllerForStatusBarHidden in der rootViewController der Anzeige festlegen.

Benennen Sie "ad DidPresentFullScreenContent:" in "adWillPresentFullScreenContent" um:

Es gibt keine Verhaltensänderung. Die Delegatmethode wird aufgerufen, bevor die Anzeige präsentiert werden soll. Der neue Methodenname spiegelt daher die Funktionalität besser wider.

API zur Standorteinstellung von GADRequest entfernen

- (void)setLocationWithLatitude:longitude:accuracy: wurde aus GADRequest gelöscht, da Google Standortdaten nicht für die Anzeigenausrichtung verwendet. Nutzen Sie bei Bedarf APIs von Drittanbietern, um die Informationen für Drittanbieter-Werbenetzwerke bereitzustellen.

Einstellung von Benutzeroberflächen für benutzerdefinierte Ereignisse

Mithilfe von benutzerdefinierten Ereignissen können Publisher, die die AdMob Vermittlung verwenden, die abfolgebasierte Vermittlung für ein Werbenetzwerk hinzufügen, das nicht zu den unterstützten Werbenetzwerken gehört.

Alle benutzerdefinierten Ereignisprotokolle wurden eingestellt. Verwenden Sie stattdessen die vorhandenen Protokolle GADMediationAdapter und GADMediationAdEventDelegate, um dieselben Funktionen zu erreichen. Durch diese Änderung wird die Verständlichkeit verbessert und Sie können benutzerdefinierte Ereignisse für Anzeigen mit Prämie und Interscroller-Anzeigen erstellen, die zuvor nicht verfügbar waren.

APIs

In der folgenden Tabelle sind die entsprechenden APIs für den Vermittlungsadapter für benutzerdefinierte Ereignis-APIs aufgeführt, die ab Version 9.0.0 verwendet werden sollten.

v8 v9
GADCustomEventBanner
GADCustomEventInterstitial
GADCustomEventNativeAd
GADMediationAdapter GADMediationBannerAd
GADMediationInterstitialAd
GADMediationInterscrollerAd
GADMediationPrämieAd
GADMediationNativeAd
delegate Delegate wird vom Handler für den Ladeabschluss aller Ladefunktionen der Klasse GADMediationAdapter zurückgegeben.
-init -init
-requestBannerAd:parameter:label:request: -loadBannerForAdConfiguration:completionHandler:
-requestInterstitialAdWithParameter:label:request: -loadInterstitialForAdConfiguration:completionHandler:
-requestNativeAdWithParameter:request:adTypes:options:rootViewController: -loadNativeAdForAdConfiguration:completionHandler:
-loadInterscrollerAdForAdConfiguration:completionHandler:
-loadRewardedAdForAdConfiguration:completionHandler:
-presentFromRootViewController: -presentFromViewController:
-handlesUserClicks -handlesUserClicks
-handlesUserImpressions -handlesUserImpressions

Methoden delegieren

In der folgenden Tabelle sind die Delegationsmethoden von Vermittlungsanzeigenereignissen für benutzerdefinierte Ereignisse aufgeführt, die ab Version 9.0.0 verwendet werden sollten.

v8 v9
GADCustomEventBannerDelegate
GADCustomEventInterstitialDelegate
GADCustomEventNativeAdDelegate
GADMediationAdEventDelegate GADMediationAd
-customEventBanner:didReceiveAd:
-customEventInterstitialDidReceiveAd:
Der Ladestatus von Anzeigen ist im Handler für den Ladevorgang der einzelnen Ladefunktionen in der Klasse GADMediationAdapter enthalten.
-customEventBanner:didFailAd:
-customEventInterstitial:didFailAd:
-customEventBannerWasClicked:
-customEventInterstitialWasClicked:
-reportClick
-customEventBannerWillPresentModal:
-customEventInterstitialWillPresentModal:
-willPresentFullScreenView
-customEventBannerWillDismissModal:
-customEventInterstitialWillDismissModal:
-willDismissFullScreenView
-customEventBannerDidDismissModal:
-customEventInterstitialDidDismissModal:
-didDismissFullScreenView
-customEventBannerWillLeaveApplication:
-customEventInterstitialWillLeaveApplication:
-willBackgroundApplication
viewControllerForPresentingModalView -[GADMediationBannerAd view]

Andere entfernte/ersetzte Methoden und Konstanten

Änderungen an Methode, Konstante oder Eigenschaft
kGAD--Präfix-Konstanten Entfernt. Verwenden Sie GAD--Konstanten.
GADAdNetworkResponseInfo credentials wurden entfernt. Verwenden Sie stattdessen adUnitMapping.
GAMRequest kGAMSimulatorID in GAMRequest wurde eingestellt. Verwenden Sie stattdessen GADSimulatorID in GADRequestConfiguration.
GADCustomNativeAd mediaView in GADCustomNativeAd wurde eingestellt. Verwenden Sie stattdessen mediaContent.
APIs für In-App Purchases in GoogleMobileAds inAppPurchase APIs in GoogleMobileAds wurden entfernt.

Von Version 7 zu Version 8 migrieren

Version 8.0.0 des Google Mobile Ads SDK bringt einige wichtige Änderungen mit APIs umbenannt und entfernt werden.

Aktualisierungen der API für das Vollbildformat

Ab Version 8.0.0 haben Interstitial-Anzeigen und Anzeigen mit Prämie eine allgemeine, vollständige für mehr Konsistenz. Diese neuen APIs für Vollbildanzeigen haben zwei Hauptunterschiede zu den APIs für Vollbildanzeigen der Version 7:

  1. Methode load der statischen Klasse.

    Die bisherige Vorgehensweise zum Laden/Einblenden einer Vollbildanzeige lautet wie folgt:

    1. Erstellen Sie eine Anzeigenobjektinstanz und speichern Sie einen Verweis darauf.
    2. Weisen Sie einen Bevollmächtigten zu, der Last- und Anzeigerückrufe verarbeitet.
    3. Laden Sie eine Anzeige.
    4. Prüfen Sie mit isReady, ob die Anzeige geladen wird.
    5. Anzeige einblenden

    In Version 8 ändert sich der Ansatz geringfügig. Lade-Callbacks werden nicht mehr Teil eines Bevollmächtigten ist. Stattdessen werden sie an die Methode load Abschluss-Handler:

    1. Rufen Sie eine statische Lademethode für die Anzeigenklasse auf und stellen Sie einen Abschluss des Ladevorgangs bereit. -Handler.
    2. Behalten Sie im Rückruf für den Abschluss des Ladevorgangs einen Verweis auf die geladene Anzeige bei, die zurückgegeben.
    3. Weisen Sie einen Bevollmächtigten zu, der Callbacks für die Show verarbeitet.
    4. Anzeige einblenden

    Der neue Ansatz bietet folgende Vorteile:

    • Sie haben niemals einen Verweis auf eine Anzeige, die nicht geladen ist.
    • Sie müssen sich nicht an einem Anzeigenobjekt festhalten, während es geladen wird.
  2. Einheitliche Anzeigenereignisse:

    Ereignistyp Vorhandene API Version 8 API
    Ladeereignisse GADInterstitialDelegate oder GADRewardedAdDelegate GADInterstitialAdLoadCompletionHandler oder GADRewardedAdLoadCompletionHandler
    Präsentationsveranstaltungen GADFullScreenContentDelegate

    Um auf Anzeigenereignisse zu warten, mussten Sie bisher eine Klasse registrieren, die implementiert die GADInterstitialDelegate an die Delegat-Property eines Interstitials übergeben oder eine Klasse registrieren, implementiert die GADRewardedAdDelegate Protokoll an die delegierte Property einer Anzeige mit Prämie, je nachdem, die Sie verwenden. Derselbe Bevollmächtigte verfügte über Methoden, die sich sowohl auf das Laden als Lebenszyklus der Präsentation einer Anzeige.

    In Version 8 sind Lade- und Präsentationsereignisse getrennt. Sie können jetzt registrieren GADFullScreenContentDelegate vor der Anzeigenschaltung erfolgen, anstatt einen einzelnen vor dem Laden der Anzeige delegieren. Ladeereignisse von Anzeigen, die für das jeweilige Format, wechseln Sie zu einem einzelnen Ladeabschluss-Handler, der an die Lademethode übergeben wird.

Interstitial

Anzeige laden

Die Code-Snippets unten zeigen, wie Sie eine Interstitial-Anzeige laden und auf Ereignisse ausgelöst, wenn die Anzeige erfolgreich oder nicht geladen werden kann.

v7

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    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)")
  }
}

Objective-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/4411468910"];
  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

Swift

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
                      }
    )
  }
}

Objective-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/4411468910"
                              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;
  }];
}

Displayanzeige

v7

Swift

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

Objective-C

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

v8

Swift

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

Objective-C

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

Ereignisse für Präsentationen

Die Code-Snippets unten zeigen, wie Rückrufe gehandhabt werden, wenn die Anzeige präsentiert (erfolgreich oder erfolglos) und wenn sie geschlossen wird.

v7

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  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.")
}

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/4411468910"];
  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

Swift

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

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
                              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.");
}

Verfügbar

Anzeige laden

v7

Swift

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

Objective-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

Swift

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
                          }
  )
  }
}

Objective-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;
}

Displayanzeige und Prämie erstellen

Bei Anzeigen mit Prämie müssen Sie das Ereignis bearbeiten, wenn ein Nutzer eine Prämie erhält. Mit Version 7 der GADRewardedAd API, die Sie implementieren, rewardedAd:userDidEarnReward: als Teil des GADRewardedAdDelegate-Protokolls. Bei Version 8 implementieren Sie GADUserDidEarnRewardHandler, um um die Anzeige zu präsentieren.

v7

Swift

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.
}

Objective-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

Swift

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

Objective-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");
  }
}

Ereignisse für Präsentationen

Mit der GADRewardedAd API übergeben Sie eine GADRewardedAdDelegate an die Methode der die Anzeige präsentiert. Mit der GADRewardedAd API legen Sie Folgendes fest: „GADFullscreenContentDelegate“ als Property in der Anzeige zu verwenden, bevor die Anzeige.

v7

Swift

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

Objective-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

Swift

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

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

Entfernung der alten GADRewardBasedVideoAd API

Das neuere GADRewardedAd Die API wurde im März 2019 eingeführt und ist die bevorzugte Version mit Prämie API seit über 18 Monaten. Es wurde im Vergleich zur Legacy-Version besser verbessert. GADRewardedBasedVideoAd API, einschließlich der Möglichkeit, mehrere jeweils eine Anzeige mit Prämie.

Die alte GADRewardedBasedVideoAd API wurde in der SDK-Version 8.0.0 entfernt.

Einstellung von Smart-Bannern durch adaptive Banner

Smart-Banneranzeigen wurden eingestellt zugunsten eines adaptiven Banners Anzeigen. Adaptive Banner bieten eine bessere Leistung und mehr Flexibilität bei die Anzeigenbreite festlegen. Wenn Sie weiterhin Banner mit voller Breite verwenden möchten, kann dennoch mit adaptiven Bannern erfolgen, wie im folgenden Code-Snippet gezeigt:

Swift

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)
  }
}

Objective-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

Entfernung des App-Callbacks verlassen

Der willLeaveApplication -Callback für alle Anzeigenformate wurde zugunsten der applicationDidEnterBackground: und sceneDidEnterBackground: . Durch die Verwendung von APIs auf Betriebssystemebene wirst du jedes Mal benachrichtigt, wenn Nutzer deine App verlassen, unabhängig von ob auf eine Anzeigeninteraktion zurückzuführen ist oder nicht.

Beachte, dass der willLeaveApplication -Callback nie dazu gedacht war, einen Anzeigenklick-Handler. Durch die Verwendung dieses Callbacks zum Melden von Klicks konnten keine eine genaue Metrik erzeugen. Ein Klick auf das Symbol „Datenschutzinfo“ Symbol, das einen externen Browser startet, um den Callback aufzurufen, aber keinen klicken.

Klassen umbenennen

In der folgenden Tabelle sind bestimmte Klassennamen aufgeführt, die in Version 8. Zusammenfassung:

  • Alle zu GADUnifiedNativeAd verwandten Kurse wurden umbenannt in GADNativeAd.
  • GADRewardBasedVideoAd, GADNativeExpressAdView und GADInstreamAd haben entfernt wurden.
  • Alle Klassen mit dem Präfix DFP wurden durch das Präfix GAM ersetzt.
v7.68.0-Klasse v8.0.0-Klasse
DFPBannerView GAMBannerView
DFPBannerViewOptions GAMBannerViewOptions
DFPInterstitial GAMInterstitialAd
DFPRequest GAMRequest
GADRequestError NSError
GADUnifiedNativeAdView GADNativeAdView
GADUnifiedNativeAd GADNativeAd
GADUnifiedNativeAdAssetIdentifiers GADNativeAdAssetIdentifiers
GADUnifiedNativeAdDelegate GADNativeAdDelegate
GADUnifiedNativeAdUnconfirmedClickDelegate GADNativeAdUnconfirmedClickDelegate
GADNativeCustomTemplateAd GADCustomNativeAd
GADNativeCustomTemplateAdLoaderDelegate GADCustomNativeAdLoaderDelegate
GADNativeAdDelegate GADCustomNativeAdDelegate
GADInAppPurchase Entfernt
GADInterstitial GADInterstitialAd
GADNativeExpressAdView Entfernt
GADRewardBasedVideoAd Entfernt
GADInstreamAd Entfernt
GADInstreamAdView Entfernt

Entfernte/ersetzte Methoden

In der folgenden Tabelle sind die spezifischen Änderungen in Version 8 aufgeführt. Zusammenfassung:

  • Zuvor eingestellte Methoden und Attribute wurden entfernt.
  • -willLeaveApplication: Delegierte-Methoden wurden für alle Formate entfernt.
  • Der Name der Werbenetzwerkklasse wurde in das Attribut GADResponseInfo verschoben.
  • Die Testgeräte-ID wurde in den GADRequestConfiguration verschoben Property.
v7.68.0-Klasse Version 7.68.0 API API-Version 8.0.0 Hinweise
GADMobileAds +configureWithApplicationID: -startWithCompletionHandler: Die App-ID wird jetzt in der Info.plist-Datei festgelegt.
+disableAutomatedInAppPurchaseReporting -disableAutomatedInAppPurchaseReporting
+disableSDKCrashReporting -disableSDKCrashReporting
GADRequest testDevices GADRequestConfiguration.testdeviceidentifiers Die Eigenschaft testDeviceIdentifiers wird auf alle Anzeigenanfragen angewendet, während die Eigenschaft alte testdevices-Property wurde pro Anfrage festgelegt.
gender Entfernt
Geburtstag Entfernt
+sdkVersion GADMobileAds.sharedInstance.sdkVersion
-setBirthdayWithMonth:day:year: Entfernt
-setLocationWithDescription: -setLocationWithLatitude:longitude:accuracy:
-tagForChildDirectedTreatment: [GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment]
GADErrorCode kGADError* GADError* Das Präfix k wird aus allen Fehlercodekonstanten gelöscht.
GADBannerView hasAutoRefreshed autoloadEnabled
inAppPurchaseDelegate Entfernt
mediatedAdView Entfernt
adNetworkClassName responseInfo.adNetworkClassName
DFPBannerView -setValidAdSizesWithSizes: -setValidAdSizes:
DFPBannerViewOptions -adSizeDelegate Entfernt
GADBannerViewDelegate -adViewDidReceiveAd: -bannerViewDidReceiveAd:
-adView:didFailToReceiveAdWithError: -bannerView:didFailToReceiveAdWithError:
-adViewWillPresentScreen: -bannerViewWillPresentScreen:
-adViewWillDismissScreen: -bannerViewWillDismissScreen:
-adViewDidDismissScreen: -bannerViewDidDismissScreen:
-adViewWillLeaveApplication: Entfernt
GADNativeCustomTemplateAd templateID GADCustomNativeAd.formatID
-performClickOnAssetWithKey:customClickHandler: -performClickOnAssetWithKey:
GADNativeAdImageAdLoaderOptions preferredImageOrientation GADNativeAdMediaAdOptions.mediaAspectRatio
GADInterstitial inAppPurchaseDelegate Entfernt
isReady Entfernt Verwenden Sie stattdessen canPresentFromRootViewController:error:.
hasBeenUsed Entfernt
-init -initWithAdUnitID:
-setAdUnitID: -initWithAdUnitID:
adNetworkClassName responseInfo.adNetworkClassName
-interstitialWillLeaveApplication: Entfernt
GADUnifiedNativeAd videoController mediaContent.videoController
adNetworkClassName responseInfo.adNetworkClassName