Migration du SDK

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Cette page couvre les migrations pour les versions actuelles et précédentes.

Migrer vers le SDK v9

La version 9.0.0 du SDK Google Mobile Ads arrive début 2022 avec quelques modifications majeures, ainsi que plusieurs changements de nom d'API et la suppression d'API obsolètes. Ce guide décrit ces changements et les meilleures pratiques pour mettre à jour votre application avec notre dernier SDK.

Les annonces cessent d'être diffusées sur iOS 10

La version iOS minimale prise en charge par la version 9.0.0 du SDK Google Mobile Ads est iOS 11.

La mise à niveau vers la version 9.0.0 du SDK Google Mobile Ads n'endommagera pas votre application sur les appareils iOS 10, cependant, aucune annonce ne sera diffusée sur ces appareils.

Application plus stricte des contrôles de la barre d'état

À partir de la version 9.0.0, lorsque vous présentez des publicités au format plein écran, votre application doit s'assurer que les publicités sont en mesure de contrôler la présentation de la barre d'état. Vous verrez un message d'erreur dans les journaux si vous ne le faites pas.

Selon la disposition spécifique des contrôleurs de vue dans votre application, vous n'aurez peut-être pas besoin d'apporter de modifications pour garantir cela, mais dans certains cas, vous devrez peut-être définir la propriété modalPresentationCapturesStatusBarAppearance de votre contrôleur de vue parent.

Renommez adDidPresentFullScreenContent : en adWillPresentFullScreenContent :

Il n'y a pas de changement de comportement. La méthode déléguée est appelée juste avant que l'annonce ne soit sur le point d'être présentée, de sorte que le nouveau nom de méthode reflète mieux sa fonctionnalité.

Supprimer l'API des paramètres de localisation sur GADRequest

- (void)setLocationWithLatitude:longitude:accuracy: a été supprimé de GADRequest car les données de localisation ne sont pas utilisées par Google pour cibler les annonces. Utilisez des API tierces pour fournir les informations aux réseaux publicitaires tiers si nécessaire.

Abandon des interfaces d'événements personnalisées

Les événements personnalisés permettent aux éditeurs utilisant la médiation AdMob d'ajouter une médiation en cascade pour un réseau publicitaire qui ne fait pas partie des réseaux publicitaires pris en charge .

Tous les protocoles d'événements personnalisés sont obsolètes. Utilisez plutôt les protocoles GADMediationAdapter et GADMediationAdEventDelegate existants pour obtenir les mêmes fonctionnalités. Cette modification améliore la clarté et vous permet de créer des événements personnalisés pour les publicités avec récompense et les publicités interscroller qui n'étaient pas disponibles auparavant.

Apis

Le tableau ci-dessous répertorie les API d'adaptateur de médiation correspondantes aux API d'événements personnalisés qui doivent être utilisées à partir de la version 9.0.0.

v8 v9
GADCustomEventBanner
GADCustomEventInterstitiel
GADCustomEventNativeAd
GADMediationAdapter GADMediationBannerAd
GADMediationAnnonce interstitielle
GADMediationInterscrollerAd
GADMediationRewardedAd
GADMediationNativeAd
delegate Le délégué est renvoyé par le gestionnaire d'achèvement de chargement de chaque fonction de chargement de la classe GADMediationAdapter
-init -init
-requestBannerAd:parameter: label:request: -loadBannerForAdConfiguration: completionHandler:
-requestInterstitialAdWith Parameter:label:request: -loadInterstitialFor AdConfiguration: completionHandler:
-requestNativeAdWithParameter: request:adTypes:options: rootViewController: -loadNativeAdFor AdConfiguration: completionHandler:
N / A -loadInterscrollerAdFor AdConfiguration: completionHandler:
N / A -loadRewardedAdFor AdConfiguration: completionHandler:
-presentFromRootViewController: -presentFromViewController:
-handlesUserClicks -handlesUserClicks
-handlesUserImpressions -handlesUserImpressions

Méthodes déléguées

Le tableau ci-dessous répertorie les méthodes de délégation d'événement publicitaire de médiation correspondantes aux méthodes de délégation d'événement personnalisées qui doivent être utilisées à partir de la version 9.0.0.

v8 v9
GADCustomEventBannerDelegate
GADCustomEventInterstitialDelegate
GADCustomEventNativeAdDelegate
GADMediationAdEventDelegate GADMediationAd
-customEventBanner:didReceiveAd:
-customEventInterstitialDidReceiveAd:
L'état de chargement de l'annonce est inclus dans le gestionnaire de fin de chargement de chaque fonction de chargement de la classe 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]

Autres méthodes et constantes supprimées/remplacées

Modifications apportées à la méthode, à la constante ou à la propriété
kGAD- constantes préfixées Supprimé. Utilisez des constantes préfixées GAD- .
GADAdNetworkResponseInfo les credentials ont été supprimés. Utilisez plutôt adUnitMapping .
GADCustomNativeAd mediaView dans GADCustomNativeAd est obsolète. Utilisez mediaContent à la place.
API d'achat intégré dans GoogleMobileAds Les API inAppPurchase dans GoogleMobileAds ont été supprimées.

Migrer vers le SDK v8

La version 8.0.0 du SDK Google Mobile Ads introduit quelques modifications majeures, ainsi que des changements de nom et des suppressions d'API.

Mises à jour de l'API au format plein écran

À compter de la version 8.0.0, les annonces interstitielles et avec récompense partagent un style d'annonce générique plein écran pour plus de cohérence. Ces nouvelles API publicitaires plein écran présentent deux différences majeures par rapport aux API publicitaires plein écran de la version 7 :

  1. load de méthode de classe statique.

    L'approche précédente pour charger/afficher une annonce en plein écran est la suivante :

    1. Créez une instance d'objet publicitaire et conservez une référence à celle-ci.
    2. Attribuez un délégué qui gère le chargement et affiche les rappels.
    3. Charger une annonce.
    4. Vérifiez si l'annonce est chargée à l'aide isReady .
    5. Montrez l'annonce.

    Dans la version 8, l'approche change légèrement. Les rappels de charge ne font plus partie d'un délégué. Au lieu de cela, ils sont passés dans la méthode load en tant que gestionnaire d'achèvement :

    1. Appelez une méthode de chargement statique sur la classe d'annonces et fournissez un gestionnaire d'achèvement de chargement.
    2. Dans le rappel de fin de chargement, conservez une référence à l'annonce chargée qui est renvoyée.
    3. Attribuez un délégué qui gère les rappels d'affichage.
    4. Montrez l'annonce.

    La nouvelle approche offre ces avantages :

    • Vous n'aurez jamais de référence à une annonce qui n'est pas chargée.
    • Vous n'êtes pas obligé de conserver un objet publicitaire pendant son chargement.
  2. Événements publicitaires cohérents.

    Type d'événement API existante API v8
    Charger les événements GADInterstitialDelegate ou GADRewardedAdDelegate GADInterstitialAdLoadCompletionHandler ou GADRewardedAdLoadCompletionHandler
    Événements de présentation GADFullScreenContentDelegate

    Auparavant, pour écouter les événements publicitaires, vous deviez enregistrer une classe qui met en œuvre le protocole GADInterstitialDelegate dans la propriété déléguée d'un interstitiel, ou enregistrer une classe qui met en œuvre le protocole GADRewardedAdDelegate dans la propriété déléguée d'une annonce avec récompense, selon le format que vous utilisez. Ce même délégué avait des méthodes liées à la fois au cycle de vie de chargement et de présentation d'une annonce.

    Avec la version 8, les événements de chargement et de présentation sont séparés. Vous pouvez désormais enregistrer un GADFullScreenContentDelegate à tout moment avant de diffuser une annonce au lieu de devoir définir un seul délégué avant de charger l'annonce. Les événements de chargement d'annonces, qui sont spécifiques à chaque format, sont déplacés vers un seul gestionnaire d'achèvement de chargement transmis dans la méthode de chargement.

Interstitiel

Charger l'annonce

Les extraits de code ci-dessous vous montrent comment charger une annonce interstitielle et écouter les événements lorsque l'annonce réussit ou échoue à se charger.

v7

Rapide

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

Objectif 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

Rapide

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

Objectif 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;
  }];
}

Annonce display

v7

Rapide

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

Objectif c

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

v8

Rapide

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

Objectif c

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

Événements publicitaires de présentation

Les extraits de code ci-dessous vous montrent comment gérer les rappels lorsque l'annonce est présentée (avec ou sans succès) et lorsqu'elle est rejetée.

v7

Rapide

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

Objectif 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

Rapide

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

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

Récompensé

Charger l'annonce

v7

Rapide

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

Objectif 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

Rapide

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

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

Afficher l'annonce et gérer la récompense

Les annonces avec récompense vous obligent à gérer l'événement lorsqu'un utilisateur gagne une récompense. Avec la version 7 de l'API GADRewardedAd , vous implémentez rewardedAd:userDidEarnReward: dans le cadre du protocole GADRewardedAdDelegate . Pour la version 8, vous implémentez le GADUserDidEarnRewardHandler afin de présenter l'annonce.

v7

Rapide

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

Objectif 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

Rapide

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

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

Événements publicitaires de présentation

Avec l'API GADRewardedAd , vous transmettez un GADRewardedAdDelegate à la méthode qui présente l'annonce. Avec l'API GADRewardedAd , vous définissez un GADFullscreenContentDelegate en tant que propriété sur l'annonce avant de présenter l'annonce.

v7

Rapide

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

Objectif 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

Rapide

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

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

Suppression de l'ancienne API GADRewardedBasedVideoAd

La nouvelle API GADRewardedAd a été introduite pour la première fois en mars 2019 et est l'API récompensée préférée depuis plus de 18 mois. Il a eu plus d'améliorations par rapport à l'ancienne API GADRewardedBasedVideoAd , y compris la possibilité de charger plusieurs annonces avec récompense à la fois.

L'ancienne API GADRewardedBasedVideoAd est supprimée dans la version 8.0.0 du SDK.

Abandon des bannières intelligentes au profit des bannières adaptatives

Les bannières publicitaires intelligentes sont obsolètes au profit des bannières publicitaires adaptatives . Les bannières adaptatives offrent des performances supérieures et une plus grande flexibilité dans la définition de la largeur des annonces. Si vous préférez continuer à utiliser des bannières pleine largeur, cela peut toujours être fait à l'aide de bannières adaptatives, comme indiqué dans l'extrait de code suivant :

Rapide

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

Objectif 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

Quitter la suppression du rappel d'application

Le rappel willLeaveApplication pour tous les formats d'annonces a été supprimé au profit des méthodes applicationDidEnterBackground: et sceneDidEnterBackground: L'utilisation d'API au niveau du système d'exploitation vous avertit chaque fois que les utilisateurs quittent votre application, que cela soit dû ou non à une interaction publicitaire.

Notez que le rappel willLeaveApplication n'a jamais été conçu pour être un gestionnaire de clics publicitaires, et s'appuyer sur ce rappel pour signaler les clics n'a pas produit une métrique précise. Par exemple, un clic sur l'icône AdChoices qui a lancé un navigateur externe a invoqué le rappel mais n'a pas compté un clic.

Renommer les classes

Le tableau ci-dessous répertorie les noms de classes spécifiques qui ont été modifiés ou supprimés dans la version 8. En résumé :

  • Toutes les classes associées à GADUnifiedNativeAd ont été renommées GADNativeAd .
  • GADRewardBasedVideoAd , GADNativeExpressAdView et GADInstreamAd ont été supprimés.
  • Toutes les classes avec le préfixe DFP ont été remplacées par un préfixe GAM .
v7.68.0 Classe Classe v8.0.0
DFPBannerView GAMBannerView
Options d'affichage de la bannière DFP GAMBannerViewOptions
DFPInterstitiel Annonce interstitielle GAM
DFPRequest Demande GAM
GADRequestError NSError
GADUnifiedNativeAdView GADNativeAdView
GADUnifiedNativeAd GADNativeAd
GADUnifiedNativeAdAssetIdentifiers GADNativeAdAssetIdentifiers
GADUnifiedNativeAdDelegate GADNativeAdDelegate
GADUnifiedNativeAdUnconfirmedClickDelegate GADNativeAdUnconfirmedClickDelegate
GADNativeCustomTemplateAd GADCustomNativeAd
GADNativeCustomTemplateAdLoaderDelegate GADCustomNativeAdLoaderDelegate
GADNativeAdDelegate GADCustomNativeAdDelegate
GADInAppAchat Supprimé
GADInterstitiel GADAnnonce interstitielle
GADNativeExpressAdView Supprimé
GAAnnonce vidéo basée sur les récompenses Supprimé
GADIInstreamAd Supprimé
GADInstreamAdView Supprimé

Méthodes supprimées/remplacées

Le tableau ci-dessous répertorie les modifications spécifiques apportées à la version 8. En résumé :

  • Les méthodes et propriétés précédemment obsolètes ont été supprimées.
  • -willLeaveApplication: les méthodes déléguées ont été supprimées pour tous les formats.
  • Le nom de la classe de réseau publicitaire a été déplacé vers la propriété GADResponseInfo .
  • L'identifiant de l'appareil de test a été déplacé vers la propriété GADRequestConfiguration .
v7.68.0 Classe API v7.68.0 API v8.0.0 Remarques
GADMobileAds + configureWithApplicationID : -startWithCompletionHandler : L'ID d'application est maintenant défini dans Info.plist.
+ désactiver le rapport d'achat automatisé dans l'application -disableAutomatedInApp PurchaseReporting
+désactiverSDKCrashReporting -disableSDKCrashReporting
GADDemande testDevices GADRequestConfiguration .testdeviceidentifiers La propriété testDeviceIdentifiers s'applique à toutes les demandes d'annonces, tandis que l'ancienne propriété testDevices était définie par demande.
le sexe Supprimé
date d'anniversaire Supprimé
+sdkVersion GADMobileAds.sharedInstance .sdkVersion
-setBirthday WithMonth:day:year: Supprimé
-setLocationWithDescription : -setLocationWith Latitude : longitude : précision :
-tagForChildDirectedTreatment : [balise GADMobileAds.sharedInstance.requestConfigurationForChildDirectedTreatment]
GADCodeErreur kGADError* GADErreur* Le préfixe k est supprimé de toutes les constantes de code d'erreur.
GADBannerView hasAutoRefreshed autoloadEnabled
inAppPurchaseDelegate Supprimé
MediatedAdView Supprimé
adNetworkClassName responseInfo .adNetworkClassName
DFPBannerView -setValidAdSizesWithSizes : -setValidAdSizes :
Options d'affichage de la bannière DFP -adSizeDelegate Supprimé
GADBannerViewDelegate -adViewDidReceiveAd : -bannerViewDidReceiveAd :
-adView:didFailToReceive AdWithError : -bannerView:didFailToReceive AdWithError :
-adViewWillPresentScreen : -bannerViewWillPresentScreen :
-adViewWillDismissScreen : -bannerViewWillDismissScreen :
-adViewDidDismissScreen : -bannerViewDidDismissScreen :
-adViewWillLeaveApplication : Supprimé
GADNativeCustomTemplateAd IDmodèle GADCustomNativeAd.formatID
-performClickOnAssetWithKey : customClickHandler : -performClickOnAssetWithKey :
GADNativeAdImageAd LoaderOptions préférenceImageOrientation GADNativeAdMediaAdOptions .mediaAspectRatio
GADInterstitiel inAppPurchaseDelegate Supprimé
est prêt Supprimé Utilisez canPresentFrom RootViewController:error: à la place.
a été utilisé Supprimé
-init -initWithAdUnitID :
-setAdUnitID : -initWithAdUnitID :
adNetworkClassName responseInfo .adNetworkClassName
-interstitielWill LeaveApplication : Supprimé
GADUnifiedNativeAd vidéoContrôleur mediaContent.videoController
adNetworkClassName responseInfo .adNetworkClassName