Migrazione dell'SDK

Questa pagina copre le migrazioni per le versioni correnti e precedenti.

Migra a SDK v9

La versione 9.0.0 di Google Mobile Ads SDK arriverà all'inizio del 2022 con alcune importanti modifiche, oltre a diverse rinominazioni delle API e rimozione di API obsolete. Questa guida illustra queste modifiche e le best practice per aggiornare la tua app con il nostro SDK più recente.

Gli annunci interrompono la pubblicazione su iOS 10

La versione minima di iOS supportata da Google Mobile Ads SDK versione 9.0.0 è iOS 11.

L'aggiornamento a Google Mobile Ads SDK versione 9.0.0 non interromperà la tua app sui dispositivi iOS 10, tuttavia, su tali dispositivi non verranno pubblicati annunci.

Applicazione più rigorosa dei controlli della barra di stato

A partire dalla versione 9.0.0, quando presenti annunci in formato schermo intero, la tua app dovrebbe garantire che gli annunci siano in grado di controllare la presentazione della barra di stato. Se non riesci a farlo, vedrai un messaggio di errore nei log.

A seconda del layout specifico dei controller di visualizzazione nell'app, potrebbe non essere necessario apportare modifiche per garantire ciò, ma in alcuni casi potrebbe essere necessario impostare la proprietà modalPresentationCapturesStatusBarAppearance del controller di visualizzazione padre.

Rinomina adDidPresentFullScreenContent: in adWillPresentFullScreenContent:

Non vi è alcun cambiamento di comportamento. Il metodo delegato viene richiamato subito prima della presentazione dell'annuncio, quindi il nuovo nome del metodo riflette meglio la sua funzionalità.

Rimuovere l'API di impostazione della posizione su GADRequest

- (void)setLocationWithLatitude:longitude:accuracy: è stato eliminato da GADRequest poiché i dati sulla posizione non vengono utilizzati da Google per il targeting degli annunci. Utilizza API di terze parti per fornire le informazioni a reti pubblicitarie di terze parti, se necessario.

Deprecazione delle interfacce di eventi personalizzate

Gli eventi personalizzati consentono ai publisher che utilizzano la mediazione AdMob di aggiungere la mediazione a cascata per una rete pubblicitaria che non è una delle reti pubblicitarie supportate .

Tutti i protocolli di eventi personalizzati sono obsoleti. Utilizzare invece i protocolli GADMediationAdapter e GADMediationAdEventDelegate esistenti per ottenere le stesse funzionalità. Questa modifica migliora la chiarezza e ti consente di creare eventi personalizzati per annunci con premio e annunci a scorrimento incrociato che in precedenza non erano disponibili.

API

La tabella seguente elenca le API dell'adattatore di mediazione corrispondenti alle API degli eventi personalizzati che dovrebbero essere utilizzate a partire dalla versione 9.0.0.

v8 v9
GADCustomEventBanner
GADCustomEventInterstitial
GADCustomEventNativeAd
GADMediationAdapter GADMediationBannerAd
GADMediationInterstitialAd
GADMediationInterscrollerAd
GADMediationRewardedAd
GADMediationNativeAd
delegate Il delegato viene restituito dal gestore di completamento del caricamento di ciascuna funzione di caricamento della 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

Delega metodi

La tabella seguente elenca i metodi delegati di eventi di mediazione corrispondenti ai metodi delegati di eventi personalizzati che devono essere utilizzati a partire dalla versione 9.0.0.

v8 v9
GADCustomEventBannerDelegate
GADCustomEventInterstitialDelegate
GADCustomEventNativeAdDelegate
GADMediationAdEventDelegate GADMediationAd
-customEventBanner:didReceiveAd:
-customEventInterstitialDidReceiveAd:
Lo stato del caricamento dell'annuncio è incluso nel gestore di completamento del caricamento di ciascuna funzione di caricamento nella 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]

Altri metodi e costanti rimossi/sostituiti

Modifiche al metodo, alla costante o alla proprietà
kGAD- costanti con prefisso RIMOSSO. Usa le costanti con prefisso GAD- .
GADAdNetworkResponseInfo credentials sono state rimosse. Utilizzare invece adUnitMapping .
GADCustomNativeAd mediaView in GADCustomNativeAd è obsoleto. Usa invece mediaContent .
API di acquisto in-app in GoogleMobileAds Le API inAppPurchase in GoogleMobileAds sono state rimosse.

Migra a SDK v8

Google Mobile Ads SDK versione 8.0.0 introduce alcune importanti modifiche, nonché alcune rinominazioni e rimozioni di API.

Aggiornamenti API in formato schermo intero

A partire dalla versione 8.0.0, gli annunci interstitial e con premio condividono uno stile di annunci generico a schermo intero per una maggiore coerenza. Queste nuove API pubblicitarie a schermo intero presentano due principali distinzioni rispetto alle API pubblicitarie a schermo intero della versione 7:

  1. load del metodo di classe statico.

    L'approccio precedente per caricare/mostrare un annuncio a schermo intero è il seguente:

    1. Crea un'istanza dell'oggetto annuncio e mantieni un riferimento ad essa.
    2. Assegna un delegato che gestisca il carico e mostri i callback.
    3. Carica un annuncio.
    4. Verifica se l'annuncio è stato caricato utilizzando isReady .
    5. Mostra l'annuncio.

    Nella versione 8, l'approccio cambia leggermente. I callback di carico non fanno più parte di un delegato. Invece, vengono passati al metodo di load come gestore di completamento:

    1. Chiama un metodo di caricamento statico sulla classe ad e fornisci un gestore di completamento del caricamento.
    2. Nella richiamata di completamento del caricamento, mantieni un riferimento all'annuncio caricato che viene restituito.
    3. Assegna un delegato che gestisce le richiamate di visualizzazione.
    4. Mostra l'annuncio.

    Il nuovo approccio offre questi vantaggi:

    • Non avrai mai un riferimento a un annuncio che non è stato caricato.
    • Non è necessario tenere un oggetto pubblicitario durante il caricamento.
  2. Eventi pubblicitari coerenti.

    Tipo di evento API esistente API v8
    Carica eventi GADInterstitialDelegate o GADRewardedAdDelegate GADInterstitialAdLoadCompletionHandler o GADRewardedAdLoadCompletionHandler
    Eventi di presentazione GADFullScreenContentDelegate

    In precedenza, per ascoltare qualsiasi evento pubblicitario, registravi una classe che implementa il protocollo GADInterstitialDelegate nella proprietà delegato di un interstitial oppure registra una classe che implementa il protocollo GADRewardedAdDelegate nella proprietà delegato di un annuncio con premio a seconda del formato in uso. Lo stesso delegato disponeva di metodi relativi sia al caricamento che al ciclo di vita della presentazione di un annuncio.

    Con la versione 8, gli eventi di caricamento e di presentazione sono separati. Ora puoi registrare un GADFullScreenContentDelegate qualsiasi momento prima di mostrare un annuncio invece di dover impostare un unico delegato prima di caricare l'annuncio. Gli eventi di caricamento degli annunci, specifici per ogni formato, passano a un unico gestore di completamento del caricamento passato nel metodo di caricamento.

Interstiziale

Carica annuncio

Gli snippet di codice seguenti mostrano come caricare un annuncio interstitial e ascoltare gli eventi quando l'annuncio riesce o non riesce a caricare.

v7

Veloce

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

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

Veloce

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

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

Annuncio pubblicitario

v7

Veloce

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

Obiettivo-C

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

v8

Veloce

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

Obiettivo-C

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

Presentazione di eventi pubblicitari

I frammenti di codice seguenti mostrano come gestire i callback quando l'annuncio viene presentato (con successo o meno) e quando viene ignorato.

v7

Veloce

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

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

Veloce

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

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

Premiato

Carica annuncio

v7

Veloce

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

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

Veloce

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

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

Visualizza l'annuncio e gestisci il premio

Gli annunci con premio richiedono che tu gestisca l'evento quando un utente guadagna un premio. Con la versione 7 dell'API GADRewardedAd , implementi rewardedAd:userDidEarnReward: come parte del protocollo GADRewardedAdDelegate . Per la versione 8, implementi GADUserDidEarnRewardHandler per presentare l'annuncio.

v7

Veloce

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

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

Veloce

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

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

Presentazione di eventi pubblicitari

Con l'API GADRewardedAd passi un GADRewardedAdDelegate al metodo che presenta l'annuncio. Con l'API GADRewardedAd , imposti un GADFullscreenContentDelegate come proprietà sull'annuncio prima di presentare l'annuncio.

v7

Veloce

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

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

Veloce

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

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

Rimozione dell'API legacy GADRewardedBasedVideoAd

La nuova API GADRewardedAd è stata introdotta per la prima volta a marzo 2019 ed è stata l'API con premio preferita per oltre 18 mesi. Ha avuto più miglioramenti rispetto all'API GADRewardedBasedVideoAd legacy, inclusa la possibilità di caricare più di un annuncio con premio alla volta.

L'API GADRewardedBasedVideoAd legacy è stata rimossa nella versione SDK 8.0.0.

Ritiro del banner intelligente a favore del banner adattivo

Gli annunci banner intelligenti sono deprecati a favore degli annunci banner adattivi . I banner adattivi offrono prestazioni superiori e maggiore flessibilità nell'impostazione della larghezza dell'annuncio. Se preferisci continuare a utilizzare i banner a larghezza intera, puoi comunque farlo utilizzando il banner adattivo, come mostrato nel seguente snippet di codice:

Veloce

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

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

Lascia la rimozione della richiamata dell'applicazione

Il callback willLeaveApplication per tutti i formati di annunci è stato rimosso a favore dei metodi applicationDidEnterBackground: e sceneDidEnterBackground: L'utilizzo delle API a livello di sistema operativo ti avvisa ogni volta che gli utenti lasciano la tua app, indipendentemente dal fatto che sia dovuto o meno a un'interazione con l'annuncio.

Tieni presente che il callback willLeaveApplication non è mai stato concepito come un gestore di clic sugli annunci e fare affidamento su questo callback per segnalare i clic non ha prodotto una metrica accurata. Ad esempio, un clic sull'icona AdChoices che ha avviato un browser esterno ha richiamato la richiamata ma non ha contato un clic.

Rinomina le classi

La tabella seguente elenca i nomi di classi specifici che sono stati modificati o rimossi nella versione 8. In sintesi:

  • Tutte le classi relative a GADUnifiedNativeAd sono state rinominate in GADNativeAd .
  • GADRewardBasedVideoAd , GADNativeExpressAdView e GADInstreamAd sono stati rimossi.
  • Tutte le classi con il prefisso DFP sono state sostituite con un prefisso GAM .
Classe v7.68.0 Classe v8.0.0
DFBannerView GAMBannerView
DFBannerViewOptions Opzioni di visualizzazione di GAMBanner
DFPInterstitial GAMInterstitialAd
Richiesta DFP Richiesta GAM
Errore richiesta GAD Errore NSE
GADUnifiedNativeAdView GADNativeAdView
GADUnifiedNativeAd GADNativeAd
GADUnifiedNativeAdAssetIdentifiers GADNativeAdAssetIdentifiers
GADUnifiedNativeAdDelegate GADNativeAdDelegate
GADUnifiedNativeAdUnconfirmedClickDelegate GADNativeAdUnconfirmedClickDelegate
GADNativeCustomTemplateAd GADCustomNativeAd
GADNativeCustomTemplateAdLoaderDelegate GADCustomNativeAdLoaderDelegate
GADNativeAdDelegate GADCustomNativeAdDelegate
GADinAppAcquisto RIMOSSO
GADInterstitial GADInterstitialAd
GADNativeExpressAdView RIMOSSO
GADRewardBasedVideoAd RIMOSSO
GAInstream Ad RIMOSSO
GAInstreamAdView RIMOSSO

Metodi rimossi/sostituiti

La tabella seguente elenca le modifiche specifiche della versione 8. In sintesi:

  • I metodi e le proprietà precedentemente deprecati sono stati rimossi.
  • -willLeaveApplication: i metodi delegati sono stati rimossi per tutti i formati.
  • Il nome della classe della rete pubblicitaria è stato spostato nella proprietà GADResponseInfo .
  • L'identificatore del dispositivo di test è stato spostato nella proprietà GADRequestConfiguration .
Classe v7.68.0 API v7.68.0 API v8.0.0 Appunti
GADMobileAds +configureWithApplicationID: -startWithCompletionHandler: L'ID app è ora impostato in Info.plist.
+DisableAutomatedInApp PurchaseReporting -disableAutomatedInApp PurchaseReporting
+disableSDKCrashReporting -disableSDKCrashReporting
Richiesta GAD testDevices GADRequestConfiguration .testdeviceidentifiers La proprietà testDeviceIdentifiers si applica a tutte le richieste di annunci, mentre la vecchia proprietà testDevices è stata impostata per ogni richiesta.
Genere RIMOSSO
compleanno RIMOSSO
+sdkVersion GADMobileAds.sharedInstance .sdkVersion
-setCompleanno ConMese:giorno:anno: RIMOSSO
-setLocationWithDescription: -setLocationWith Latitude:longitude:precision:
-tagForChildDirectedTreatment: [GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment]
Codice di errore GADE kGADErrore* Errore GADE* Il prefisso k viene eliminato da tutte le costanti del codice di errore.
GADBannerView ha AutoRefresh caricamento automatico abilitato
inAppPurchaseDelegate RIMOSSO
mediatedAdView RIMOSSO
adNetworkClassName responseInfo .adNetworkClassName
DFBannerView -setValidAdSizesWithSizes: -setValidAdSizes:
DFBannerViewOptions -adSizeDelegate RIMOSSO
GADBannerViewDelegate -adViewDidReceiveAd: -bannerViewDidReceiveAnnuncio:
-adView:didFailToReceive AdWithError: -bannerView:didFailToReceive AdWithError:
-adViewWillPresentScreen: -bannerViewWillPresentScreen:
-adViewWillDismissScreen: -bannerViewWillDismissScreen:
-adViewDidDismissScreen: -bannerViewDidDismissScreen:
-adViewLascerà l'applicazione: RIMOSSO
GADNativeCustomTemplateAd ID modello GADCustomNativeAd.formatID
-performClickOnAssetWithKey: customClickHandler: -performClickOnAssetWithKey:
GADNativeAdImageAd LoaderOptions Orientamento immagine preferito GADNativeAdMediaAdOptions .mediaAspectRatio
GADInterstitial inAppPurchaseDelegate RIMOSSO
è pronta RIMOSSO Usa canPresentFrom RootViewController: errore: invece.
è stato usato RIMOSSO
-dentro -initWithAdUnitID:
-setAdUnitID: -initWithAdUnitID:
adNetworkClassName responseInfo .adNetworkClassName
-InterstitialLasceràApplicazione: RIMOSSO
GADUnifiedNativeAd videocontrollore mediaContent.videoController
adNetworkClassName responseInfo .adNetworkClassName