SDK-Migration

Auf dieser Seite werden Migrationen für aktuelle und vorherige Versionen beschrieben.

Von 10 zu Version 11 migrieren

Minimales Bereitstellungsziel

Das Mindestbereitstellungsziel wurde auf iOS 12 erhöht.

Xcode-Mindestversion

Die mindestens unterstützte Xcode-Version 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 oder höher ausgeliefert.

GoogleAppMeasurement-Abhängigkeit entfernt

In Version 11.0.0 wurde die Abhängigkeit von GoogleAppMeasurement entfernt. Diese Abhängigkeit, die auf der Ein/Aus-Schaltfläche für Nutzermesswerte in AdMob basiert, wird Anfang 2024 eingestellt. Damit weiterhin Nutzermesswerte in AdMob erfasst werden, müssen Sie Ihre AdMob-App mit Firebase verknüpfen und das Google Analytics for Firebase SDK in Ihre App einbinden.

Änderungen bei der Vollbildanzeigenpräsentation

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

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

Für den Ansichts-Controller-Parameter in -canPresentFromRootViewController:error: und -presentFromRootViewController: sind Nullwerte zulässig. Falls der Wert nil übergeben wird, wird die Anzeige vom obersten View-Controller in der Ansicht-Controller-Hierarchie ausgeliefert.

Entfernte Methoden

Die folgenden Methoden werden 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) Verwenden Sie stattdessen die Property tagForUnderAgeOfConsent.
tag(forChildDirectedTreatment childDirectedTreatment: Bool) Verwenden Sie stattdessen die Property tagForChildDirectedTreatment.

Unterkünfte entfernt

Die folgenden Eigenschaften werden entfernt.

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

GADAdFormatUnknown wurde entfernt

GADAdFormatUnknown“ wurde ohne Ersatz entfernt.

Änderungen an der Logging SDK-Version

In Version 11.0.0 wird sdkVersion entfernt. Verwenden Sie zum Protokollieren der Version des Google Mobile Ads SDK stattdessen versionNumber.

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 die zugehörige delegate nicht dem Delegierungsprotokoll des angeforderten Anzeigentyps entspricht. Bisher ist die Anfrage nach der Anzeigenanfrage fehlgeschlagen.

Änderungen am Testverhalten

In der Tabelle finden Sie die aktualisierten Bedingungen für den Fall, dass die folgenden Attribute true zurückgeben.

Klasse Property
GADMediationAdConfiguration isTestRequest
GADCustomEventRequest isTesting
v10.0.0 v11.0.0
  • Das Gerät ist in testDeviceIdentifiers explizit als Testgerät deklariert.
  • Das Gerät ist in testDeviceIdentifiers explizit als Testgerät deklariert.
  • Das Gerät ist ein Simulator.
  • Das Gerät wird in der Ad Manager UI explizit als Testgerät deklariert.

Von Version 9 zu Version 10 migrieren

Unter iOS 11 werden keine Anzeigen mehr ausgeliefert

Mit Version 10.0.0 des Google Mobile Ads SDK werden Anzeigen nur auf Geräten mit iOS 12 oder höher ausgeliefert.

Ein Upgrade auf Version 10.0.0 des Google Mobile Ads SDK hat keine Auswirkungen auf Ihre App auf Geräten mit iOS 11 und iOS 10, auf diesen Geräten werden jedoch keine Anzeigen ausgeliefert.

Anforderungen an die Ad Manager-App-ID

Die Ad Manager-App-ID ist jetzt in Info.plist für alle Ad Manager-Apps und das Format ca-app-pub-################~########## erforderlich. Weitere Informationen finden Sie unter „Info.plist“ aktualisieren.

Anforderung von GoogleAppMeasurement.xcframework

GoogleAppMeasurement.xcframework ist jetzt für alle Ad Manager-Apps erforderlich. Wenn Sie das Google Mobile Ads SDK über Cocoapods oder den Swift Package Manager installieren, sind keine weiteren Maßnahmen erforderlich. Wenn Sie Frameworks manuell installieren, finden Sie weitere Informationen unter Manueller Download.

Das Erstellen mit Bitcode wird nicht mehr unterstützt

Das Deaktivieren von Bitcode in Ihren mobilen Apps ist jetzt erforderlich, um das Google Mobile Ads SDK einzubinden.

Typen entfernt

Typ Hinweise
GADGender Kein Ersatz.
GADMRewardBasedVideoAdNetworkAdapterProtocol Für alle unter Werbenetzwerke auswählen aufgeführten Adapter für die Vermittlung mit Prämie werden diese Protokolle seit über einem Jahr nicht mehr verwendet. Verwenden Sie GADMediationAdapter für die Vermittlung und benutzerdefinierte Ereignisse.
GADMRewardBasedVideoAdNetworkConnectorProtocol

Eigenschaften entfernt

Die folgenden Eigenschaften werden ersatzlos entfernt.

v10.0.0-Klasse Property
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 Ad Manager 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

In Version 8.0.0 des Google Mobile Ads SDK wurden einige größere Änderungen eingeführt und APIs umbenannt.

API-Updates für das Vollbildformat

Ab Version 8.0.0 wird für Interstitial-Anzeigen und Anzeigen mit Prämie aus Gründen der Einheitlichkeit ein allgemeines Vollbildanzeigendesign verwendet. Die neuen APIs für Vollbildanzeigen unterscheiden sich von den Vollbildanzeigen-APIs in Version 7 im Wesentlichen in zweierlei Hinsicht:

  1. Statische Klassenmethode load.

    Der bisherige Ansatz zum Laden/Einblenden einer Vollbildanzeige sieht so aus:

    1. Erstellen Sie eine Anzeigenobjektinstanz und weisen Sie einen Verweis darauf zu.
    2. Weisen Sie einen Bevollmächtigten zu, der den Ladevorgang verarbeitet und Callbacks anzeigt.
    3. Laden Sie eine Anzeige.
    4. Prüfen Sie mit isReady, ob die Anzeige geladen wird.
    5. Schalten Sie die Anzeige.

    In Version 8 ändert sich der Ansatz geringfügig. Lade-Callbacks sind nicht mehr Teil eines Delegaten. Stattdessen werden sie als Vervollständigungs-Handler an die Methode load übergeben:

    1. Rufen Sie eine statische Lademethode für die Anzeigenklasse auf und geben Sie einen Handler für den Ladevorgang an.
    2. Behalten Sie im Callback für den Ladeabschluss einen Verweis auf die geladene Anzeige, die zurückgegeben wird.
    3. Weisen Sie einen Bevollmächtigten zu, der Show-Callbacks verarbeitet.
    4. Schalten Sie die Anzeige.

    Der neue Ansatz bietet folgende Vorteile:

    • Sie haben niemals einen Verweis auf eine Anzeige, die nicht geladen ist.
    • Sie müssen sich während des Ladevorgangs nicht an ein Anzeigenobjekt halten.
  2. Konsistente Anzeigenereignisse:

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

    Um auf Anzeigenereignisse zu warten, haben Sie bisher je nach verwendetem Format eine Klasse registriert, die das GADInterstitialDelegate-Protokoll in der Delegate-Eigenschaft einer Interstitial-Anzeige implementiert, oder eine Klasse registriert, die das GADRewardedAdDelegate-Protokoll in der Delegate-Eigenschaft einer Anzeige mit Prämie implementiert. Derselbe Bevollmächtigte hatte Methoden, die sich sowohl auf den Lade- als auch den Präsentationszyklus einer Anzeige bezogen.

    Bei Version 8 sind Lade- und Präsentationsereignisse getrennt. Sie können jetzt jederzeit ein GADFullScreenContentDelegate registrieren, bevor eine Anzeige ausgeliefert wird, anstatt vor dem Laden der Anzeige einen einzelnen Bevollmächtigten festlegen zu müssen. Für jedes Format spezifische Ladeereignisse für Anzeigen werden zu einem einzelnen Handler für den Ladeabschluss verschoben, der in der Lademethode übergeben wird.

Interstitial

Anzeige laden

Die folgenden Code-Snippets zeigen, wie Sie eine Interstitial-Anzeige laden und auf Ereignisse warten, wenn die Anzeige erfolgreich ist oder nicht geladen werden kann.

v7

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: DFPInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = DFPInterstitial(adUnitID: "/6499/example/interstitial")
    interstitial.delegate = self
    let request = GAMRequest()
    interstitial.load(request)
  }

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

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) DFPInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[DFPInterstitial alloc]
      initWithAdUnitID:@"/6499/example/interstitial"];
  self.interstitial.delegate = self;
  GAMRequest *request = [GAMRequest request];
  [self.interstitial loadRequest:request];
}

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

/// Tells the delegate an ad request failed.
- (void)interstitial:(DFPInterstitial *)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: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GAMRequest()
    GAMInterstitialAd.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) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdUnitID:@"/6499/example/interstitial"
                              request:request
                    completionHandler:^(GAMInterstitialAd *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äsentationsanzeigen

Die folgenden Code-Snippets zeigen, wie mit Callbacks verfahren werden soll, die auftreten, wenn die Anzeige eingeblendet (erfolgreich oder nicht erfolgreich) oder geschlossen wird.

v7

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  interstitial = DFPInterstitial(adUnitID: "/6499/example/interstitial")
  interstitial.delegate = self
  ...
}

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

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

/// Tells the delegate the interstitial had been animated off the screen.
func interstitialDidDismissScreen(_ ad: DFPInterstitial) {
  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: DFPInterstitial) {
  print("Interstitial ad will leave application.")
}

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[DFPInterstitial alloc] initWithAdUnitID:"/6499/example/interstitial"];
  self.interstitial.delegate = self;
  ...
}

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

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

/// Tells the delegate the interstitial had been animated off the screen.
- (void)interstitialDidDismissScreen:(DFPInterstitial *)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:(DFPInterstitial *)ad {
  NSLog(@"Interstitial ad will leave application.");
}

v8

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  let request = GAMRequest()
  GAMInterstitialAd.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];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdUnitID:@"/6499/example/interstitial"
                              request:request
                    completionHandler:^(GAMInterstitialAd *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(GAMRequest()) { 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;
  GAMRequest *request = [GAMRequest 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 = GAMRequest()
  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];

  GAMRequest *request = [GAMRequest 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;
}

Anzeige schalten und Prämie erhalten

Bei Anzeigen mit Prämie muss das Ereignis selbst ausgeführt werden, wenn ein Nutzer eine Prämie erhält. Bei Version 7 der GADRewardedAd API implementieren Sie rewardedAd:userDidEarnReward: als Teil des GADRewardedAdDelegate-Protokolls. In Version 8 implementieren Sie GADUserDidEarnRewardHandler, 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äsentationsanzeigen

Mit der GADRewardedAd API übergeben Sie ein GADRewardedAdDelegate an die Methode, die die Anzeige präsentiert. Mit der GADRewardedAd API legen Sie ein GADFullscreenContentDelegate als Attribut für die Anzeige fest, bevor Sie sie 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 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 = GAMRequest()
  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];

  GAMRequest *request = [GAMRequest 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.");
}

Bisherige GADRewardBasedVideoAd API entfernen

Die neue GADRewardedAd API wurde erstmals im März 2019 eingeführt und ist seit über 18 Monaten die bevorzugte API mit Prämie. Sie verfügte im Vergleich zur alten GADRewardedBasedVideoAd API über mehr Verbesserungen, u. a. die Möglichkeit, mehrere Anzeigen mit Prämie gleichzeitig zu laden.

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

Einstellung von Smart-Bannern durch adaptive Banner

Smart-Banneranzeigen werden eingestellt und durch adaptive Banneranzeigen ersetzt. Adaptive Banner bieten eine bessere Leistung und mehr Flexibilität bei der Festlegung der Anzeigenbreite. Wenn Sie weiterhin Banner in voller Breite verwenden möchten, können Sie dennoch adaptive Banner verwenden, 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 Anwendungs-Callbacks verlassen

Der Callback willLeaveApplication wurde für alle Anzeigenformate zugunsten der Methoden applicationDidEnterBackground: und sceneDidEnterBackground: entfernt. Wenn Sie APIs auf Betriebssystemebene verwenden, werden Sie immer informiert, wenn Nutzer Ihre App verlassen. Dabei spielt es keine Rolle, ob dies auf eine Anzeigeninteraktion zurückzuführen ist oder nicht.

Der willLeaveApplication -Callback war nie als Anzeigenklick-Handler vorgesehen. Die Verwendung dieses Callbacks zum Erfassen von Klicks hat zu keinen präzisen Messwerten geführt. Beispiel: Ein Klick auf das Datenschutzinfo-Symbol, mit dem ein externer Browser zwar den Callback aufgerufen, aber keinen Klick gezählt hat.

Klassenumbenennungen

In der folgenden Tabelle sind bestimmte Klassennamen aufgeführt, die in Version 8 geändert oder entfernt wurden. Zusammenfassung:

  • Alle Klassen, die sich auf GADUnifiedNativeAd beziehen, wurden in GADNativeAd umbenannt.
  • GADRewardBasedVideoAd, GADNativeExpressAdView und GADInstreamAd wurden entfernt.
  • 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 GAMInterstitialAnzeige
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

Methoden entfernt/ersetzt

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

  • Zuvor eingestellte Methoden und Eigenschaften wurden entfernt.
  • -willLeaveApplication: Delegationsmethoden wurden für alle Formate entfernt.
  • Der Name der Werbenetzwerkklasse wurde in die Property GADResponseInfo verschoben.
  • Die Testgeräte-ID wurde in das Attribut GADRequestConfiguration verschoben.
v7.68.0-Klasse Version 7.68.0 API API-Version 8.0.0 Hinweise
GADMobileAnzeigen +configureWithApplicationID: -startWithCompletionHandler: Die App-ID ist jetzt in Info.plist festgelegt.
+disableAutomatedInAppPurchaseReporting -disableAutomatedInAppPurchaseReporting
+disableSDKCrashReporting -disableSDKCrashReporting
GADRequest testDevices GADRequestConfiguration.testdeviceidentifiers Die Eigenschaft testDeviceIdentifiers gilt für alle Anzeigenanfragen, während die alte Eigenschaft testGeräte für jede Anfrage festgelegt wurde.
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 entfernt.
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