Migracja pakietu SDK

Na tej stronie znajdziesz informacje na temat migracji obecnej i poprzedniej wersji pakietu SDK do reklam mobilnych Google na iOS. Wersja 11.0.0 powinna zostać udostępniona w styczniu 2024 r.

Migracja z pakietu SDK w wersji 10 do 11

Minimalny cel wdrożenia

Minimalna wartość docelowa wdrożenia została zwiększona do iOS 12.

Minimalna wersja Xcode

Minimalna obsługiwana wersja Xcode została zwiększona do 15.1.

Reklamy przestają się wyświetlać w iOS 12

Pakiet SDK do reklam mobilnych Google w wersji 11.0.0 wyświetla reklamy tylko na urządzeniach z systemem iOS 13 lub nowszym.

Usunięto zależność GoogleAppMeasurement

W wersji 11.0.0 zależność od GoogleAppMeasurement została usunięta. Ta zależność, która uwzględniała przełącznik danych o użytkownikach w AdMob, zostanie wycofana na początku 2024 r. Aby nadal zbierać dane o użytkownikach w AdMob, połącz aplikację AdMob z Firebase i zintegruj z nią pakiet SDK Google Analytics dla Firebase.

Zmiany w prezentacji reklam na pełnym ekranie

Te zmiany wpływają na różne formaty reklam:

  • Reklama wyświetlana przy otwarciu aplikacji
  • Pełnoekranowa
  • Otrzymano
  • Reklama pełnoekranowa z nagrodą

Parametr kontrolera widoku w -canPresentFromRootViewController:error: i -presentFromRootViewController: może mieć wartość null. Jeśli przekażesz wartość nil, reklama będzie wyświetlana z kontrolera widoków najwyższego poziomu w hierarchii kontrolera widoków.

Usunięte metody

Poniższe metody zostały usunięte.

Typ wersji 11.0.0 Metoda Uwagi
Reklama przy otwarciu aplikacji GAD load(withAdUnitID adUnitID: String, request: GADRequest?, orientation: UIInterfaceOrientation) Użyj w zamian load(withAdUnitID adUnitID: String, request: GADRequest?).
GADMediationBannerAdEventDelegate willBackgroundApplication() Brak zamiennika.
GADMediationInterstitialAdEventDelegate willBackgroundApplication() Brak zamiennika.
GADMediationNativeAdEventDelegate willBackgroundApplication() Brak zamiennika.
GADMediationRewardedAdEventDelegate didRewardUser(with reward: GADAdReward) Użyj w zamian didRewardUser().
GADMediatedUnifiedNativeAdNotificationSource mediatedNativeAdWillLeaveApplication(_ mediatedNativeAd: GADMediatedUnifiedNativeAd) Brak zamiennika.
GADRequestConfiguration setSameAppKeyEnabled(_ enabled: Bool) Użyj w zamian zasady setPublisherFirstPartyIDEnabled(_ enabled: Bool).
tagForUnderAge(ofConsent underAgeOfConsent: Bool) Zamiast niej używaj właściwości tagForUnderAgeOfConsent.
tag(forChildDirectedTreatment childDirectedTreatment: Bool) Zamiast niej używaj właściwości tagForChildDirectedTreatment.

Usunięto usługi

Te właściwości zostały usunięte.

Klasa w wersji 11.0.0 Właściwość Uwagi
GADMediationAdConfiguration hasUserLocation Brak zamiennika.
userLatitude
userLongitude
userLocationAccuracyInMeters
childDirectedTreatment Użyj w zamian GADMobileAds.sharedInstance.requestConfiguration.tagForChildDirectedTreatment.
GADResponseInfo adNetworkClassName Użyj w zamian zasady adNetworkClassName z aplikacji loadedAdNetworkResponseInfo.

Usunięto GADAdFormatUnknown

Usunięto GADAdFormatUnknown bez zamiennika.

Zmiany w logowaniu wersji pakietu SDK

Wersja 11.0.0 usuwa sdkVersion. Aby zarejestrować wersję pakietu SDK do reklam mobilnych Google, użyj parametru versionNumber.

Wersja 10.0.0

GADMobileAds.sharedInstance().sdkVersion

Wersja 11.0.0

GADGetStringFromVersionNumber(GADMobileAds.sharedInstance().versionNumber)

Zmiany w obsłudze błędów GADAdLoader

Od wersji 11.0.0 GADAdLoader nie wysyła żądania reklamy, jeśli jego parametr delegate nie jest zgodny z protokołem przekazywania danych żądanych typów reklam. Wcześniej, po wysłaniu żądania reklamy, zakończyła się niepowodzeniem.

Zmiany w sposobie testowania

Zapoznaj się z tabelą zawierającą zaktualizowane warunki, które określają, kiedy poniższe właściwości zwracają wartość true.

Klasa Właściwość
GADMediationAdConfiguration isTestRequest
GADCustomEventRequest isTesting
v10.0.0 v11.0.0
  • W testDeviceIdentifiers urządzenie jest wyraźnie zadeklarowane jako urządzenie testowe.
  • W testDeviceIdentifiers urządzenie jest wyraźnie zadeklarowane jako urządzenie testowe.
  • Urządzenie jest symulatorem.
  • Urządzenie jest wyraźnie zadeklarowane w interfejsie AdMob jako urządzenie testowe.

Migracja z wersji 9 do 10

Reklamy przestają się wyświetlać na urządzeniach z iOS 11

Pakiet SDK do reklam mobilnych Google w wersji 10.0.0 wyświetla reklamy tylko na urządzeniach z systemem iOS 12 lub nowszym.

Przejście na pakiet SDK do reklam mobilnych Google w wersji 10.0.0 nie zaburzy działania aplikacji na urządzeniach z iOS 11 i iOS 10, jednak reklamy nie będą się na nich wyświetlać.

Kompilowanie za pomocą kodu bitowego nie jest już obsługiwane

Do integracji pakietu SDK do reklam mobilnych Google konieczne jest teraz wyłączenie kodu bitowego w aplikacjach mobilnych.

Usunięte typy

Typ Uwagi
GADGender Brak zamiennika.
GADMRewardBasedVideoAdNetworkAdapterProtocol Wszystkie adaptery zapośredniczenia z nagrodą wymienione na stronie Wybierz sieci nie używają tych protokołów od ponad roku. Na potrzeby zapośredniczenia i zdarzeń niestandardowych użyj GADMediationAdapter.
GADMRewardBasedVideoAdNetworkConnectorProtocol

Usunięto usługi

Te właściwości są usuwane bez zamiennika.

Klasa w wersji 10.0.0 Właściwość
GADMediationAdRequest userBirthday
userGender
userHasLocation
userLatitude
userLongitude
userLocationAccuracyInMeters
userLocationDescription
GADCustomEventRequest userHasLocation
userLatitude
userLongitude
userLocationAccuracyInMeters
userLocationDescription

Migracja z wersji 8 do 9

Reklamy przestają się wyświetlać na urządzeniach z iOS 10

Minimalną wersją iOS, którą obsługuje pakiet SDK do reklam mobilnych Google w wersji 9.0.0, jest iOS 11.

Przejście na pakiet SDK do reklam mobilnych Google w wersji 9.0.0 nie zaburzy działania Twojej aplikacji na urządzeniach z iOS 10, ale na tych urządzeniach nie będą się wyświetlać żadne reklamy.

bardziej rygorystyczne egzekwowanie ustawień na pasku stanu;

Od wersji 9.0.0 wyświetlanie reklam w formacie pełnoekranowym w aplikacji powinno umożliwiać im kontrolowanie wyświetlania paska stanu przez reklamy. W przeciwnym razie w dziennikach pojawi się komunikat o błędzie.

W zależności od konkretnego układu kontrolerów widoków w aplikacji nie musisz wprowadzać żadnych zmian, aby to zapewnić. Zastanów się, czy w elemencie rootViewController reklamy musisz ustawić właściwość childViewControllerForStatusBarHidden.

Zmień nazwę elementu adDidpresentFullScreenContent: na adWillpresentFullScreenContent:

Nie ma to wpływu na działanie. Metoda delegata jest wywoływana tuż przed wyświetleniem reklamy, więc nazwa nowej metody lepiej odzwierciedla jej funkcje.

Usunięcie interfejsu API ustawienia lokalizacji w GADRequest

Lokalizacja - (void)setLocationWithLatitude:longitude:accuracy: została usunięta z domeny GADRequest, ponieważ Google nie używa danych o lokalizacji do kierowania reklam. Jeśli to konieczne, używaj interfejsów API innych firm do przekazywania informacji do zewnętrznych sieci reklamowych.

Wycofanie interfejsów zdarzeń niestandardowych

Zdarzenia niestandardowe umożliwiają wydawcom korzystającym z AdMob zapośredniczenia dodawanie zapośredniczenia kaskadowego w przypadku sieci reklamowej, która nie należy do obsługiwanych sieci reklamowych.

Wszystkie protokoły zdarzeń niestandardowych zostały wycofane. Aby uzyskać te same funkcje, użyj istniejących protokołów GADMediationAdapter i GADMediationAdEventDelegate. Ta zmiana jest bardziej przejrzysta i umożliwia tworzenie zdarzeń niestandardowych na potrzeby reklam z nagrodą oraz reklam typu interscroller, które wcześniej nie były dostępne.

Interfejsy API

W tabeli poniżej znajdziesz odpowiadające im interfejsy API adaptera zapośredniczenia do interfejsów API zdarzeń niestandardowych, których należy używać od wersji 9.0.0.

v8 v9
GADCustomEventBanner
GADCustomEventInterstitial
GADCustomEventNativeReklama
GADMediationAdapter GADMediationBannerAd
GADMediationReklama pełnoekranowa
GADMediationInterscrollerAd
GADMediationRewardedAd
GADMediationNativeReklama
delegate Przekazywanie dostępu jest zwracane przez moduł obsługi zakończenia wczytywania każdej funkcji wczytywania klasy GADMediationAdapter
-init -init
-requestBannerAd:parameter:label:request: -loadBannerForAdConfiguration:completionHandler:
-requestInterstitialAdWithParameter:label:request: -loadInterstitialForAdConfiguration:completionHandler:
-requestNativeAdWithParameter:request:adTypes:options:rootViewController: -loadNativeAdForAdConfiguration:completionHandler:
Nie dotyczy -loadInterscrollerAdForAdConfiguration:completionHandler:
Nie dotyczy -loadRewardedAdForAdConfiguration:completionHandler:
-presentFromRootViewController: -presentFromViewController:
-handlesUserClicks -handlesUserClicks
-handlesUserImpressions -handlesUserImpressions

Metody delegowania

W tabeli poniżej znajdziesz odpowiednie metody przekazywania dostępu do zdarzeń reklamy w zapośredniczeniu do niestandardowych metod delegowania zdarzeń, których należy używać od wersji 9.0.0.

v8 v9
GADCustomEventBannerBanner
GADCustomEventInterstitialReceived
GADCustomEventNativeAd Department
GADMediationAdEventDelegate Reklama z zapośredniczeniem GAD
-customEventBanner:didReceiveAd:
-customEventInterstitialDidReceiveAd:
Stan wczytywania reklam jest podany w module obsługi zakończenia wczytywania każdej funkcji wczytywania w klasie GADMediationAdapter.
-customEventBanner:didFailAd:
-customEventInterstitial:didFailAd:
-customEventBannerWasClicked:
-customEventInterstitialWasClicked:
-reportClick
-customEventBannerWillPresentModal:
-customEventInterstitialWillPresentModal:
-willPresentFullScreenView
-customEventBannerWillDismissModal:
-customEventInterstitialWillDismissModal:
-willDismissFullScreenView
-customEventBannerDidDismissModal:
-customEventInterstitialDidDismissModal:
-didDismissFullScreenView
-customEventBannerWillLeaveApplication:
-customEventInterstitialWillLeaveApplication:
-willBackgroundApplication
viewControllerForPresentingModalView -[GADMediationBannerAd view]

Inne usunięte/zastąpione metody i stałe

zmiany metody, stałej lub właściwości;
Stałe z przedrostkiem kGAD- Usunięto. Używaj stałych z przedrostkiem GAD-.
GADAdNetworkResponseInfo Urządzenia credentials zostały usunięte. Użyj w zamian zasady adUnitMapping.
GAMRequest Interfejs kGAMSimulatorID w przeglądarce GAMRequest został wycofany. Użyj w zamian pola GADSimulatorID w usłudze GADRequestConfiguration.
GADCustomNativeAd Interfejs mediaView w przeglądarce GADCustomNativeAd został wycofany. Użyj w zamian zasady mediaContent.
Interfejsy API zakupów w aplikacji w: GoogleMobileAds W GoogleMobileAds usunięto inAppPurchase interfejsów API.

Migracja z wersji 7 do wersji 8

Pakiet SDK do reklam mobilnych Google w wersji 8.0.0 wprowadza kilka istotnych zmian, a także zmiany nazw i usunięcia interfejsów API.

Aktualizacje interfejsu API w formacie pełnoekranowym

Od wersji 8.0.0 reklamy pełnoekranowe i reklamy z nagrodą mają ogólny styl reklam pełnoekranowych, aby zapewnić większą spójność. Te nowe interfejsy API reklam pełnoekranowych różnią się od wersji 7 interfejsów API reklam pełnoekranowych w dwóch poważnych różnicach:

  1. Statyczna metoda klasy load.

    Poprzednie podejście do wczytywania/wyświetlania reklam pełnoekranowych jest następujące:

    1. Utwórz wystąpienie obiektu reklamowego i utrzymaj do niego odniesienie.
    2. Przypisz przedstawiciela, który obsługuje wczytywanie i wyświetla wywołania zwrotne.
    3. Wczytaj reklamę.
    4. Sprawdź, czy reklama wczytuje się za pomocą isReady.
    5. Wyświetl reklamę.

    W wersji 8 podejście nieco się zmienia. Wywołania zwrotne wczytywania nie należą już do przedstawicieli. Zamiast tego są one przekazywane do metody load jako moduł obsługi uzupełniania:

    1. Wywołaj metodę wczytywania statycznego w klasie reklamy i udostępnij moduł obsługi ukończenia wczytywania.
    2. W wywołaniu zwrotnym zakończenia wczytywania zachowaj odniesienie do zwróconej reklamy.
    3. Przypisz przedstawiciela, który obsługuje wywołania zwrotne.
    4. Wyświetl reklamę.

    Nowe podejście daje następujące korzyści:

    • Nie zobaczysz żadnego odwołania do reklamy, która nie została wczytana.
    • Podczas ładowania obiektu reklamowego nie musisz go trzymać.
  2. Spójne zdarzenia reklamowe.

    Typ zdarzenia Istniejący interfejs API Interfejs API w wersji 8
    Zdarzenia wczytywania GADInterstitialDelegate lub GADRewardedAdDelegate GADInterstitialAdLoadCompletionHandler lub GADRewardedAdLoadCompletionHandler
    Wydarzenia związane z prezentacją GADFullScreenContentDelegate

    Wcześniej, aby nasłuchiwać zdarzeń reklamowych, trzeba było zarejestrować klasę, która implementuje protokół GADInterstitialDelegate we właściwości delegata reklamy pełnoekranowej, lub zarejestrować klasę, która implementuje protokół GADRewardedAdDelegate we właściwości delegata reklamy z nagrodą w zależności od używanego formatu. Ten sam delegat miał metody związane zarówno z cyklem wczytywania i prezentacji reklamy, jak i z cyklem życia reklamy.

    W wersji 8 zdarzenia wczytywania i prezentacji są oddzielne. Teraz możesz zarejestrować GADFullScreenContentDelegate w dowolnym momencie przed wyświetleniem reklamy, nie trzeba wtedy ustawiać jednego przedstawiciela przed wczytaniem reklamy. Zdarzenia wczytywania reklamy, które są specyficzne dla każdego formatu, są przenoszone do jednego modułu obsługi ukończenia wczytywania przekazanego w metodzie wczytywania.

Pełnoekranowa

Wczytaj reklamę

Fragmenty kodu widoczne poniżej pokazują, jak wczytać reklamę pełnoekranową i nasłuchiwać zdarzeń, gdy reklama się uda lub nie wczyta.

v7

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: GADInterstitial!

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  var interstitial: GADInterstitialAd?

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

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

Reklama displayowa

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

Zdarzenia dotyczące reklam z prezentacją

Poniższe fragmenty kodu pokazują, jak obsługiwać wywołania zwrotne w przypadku pojawienia się reklamy (skutecznej lub nieudanej) oraz zamknięcia.

v7

Swift

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

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

Swift

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

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

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

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

Objective-C

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

Otrzymano

Wczytaj reklamę

v7

Swift

import GoogleMobileAds
import UIKit

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

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  self.rewardedAd = [[GADRewardedAd alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"];
  self.rewardedAd.delegate = self;
  GADRequest *request = [GADRequest request];
  [self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
    if (error) {
      NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
    } else {
      NSLog(@"Rewarded ad loaded.");
    }
  }];
}

v8

Swift

import GoogleMobileAds
import UIKit

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

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADRequest *request = [GADRequest request];
  [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                          request:request
                completionHandler:^(GADRewardedAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
      return;
    }
    self.rewardedAd = ad;
    NSLog(@"Rewarded ad loaded.");
    self.rewardedAd.fullScreenContentDelegate = self;
}

Reklama displayowa i nagroda z uchwytem

W przypadku reklam z nagrodą musisz obsłużyć zdarzenie, gdy użytkownik otrzyma nagrodę. W wersji 7 interfejsu API GADRewardedAd implementujesz rewardedAd:userDidEarnReward: w ramach protokołu GADRewardedAdDelegate. Do wyświetlania reklamy w wersji 8 musisz zaimplementować GADUserDidEarnRewardHandler.

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

Zdarzenia dotyczące reklam z prezentacją

Za pomocą interfejsu API GADRewardedAd przekazujesz GADRewardedAdDelegate do metody, która wyświetla reklamę. Za pomocą interfejsu GADRewardedAd API ustawiasz GADFullscreenContentDelegate jako właściwość w reklamie przed jej wyświetleniem.

v7

Swift

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

/// Tells the delegate that the rewarded ad was presented.
func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) {
  print("Rewarded ad presented.")
}
/// Tells the delegate that the rewarded ad was dismissed.
func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
  print("Rewarded ad dismissed.")
}
/// Tells the delegate that the rewarded ad failed to present.
func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) {
  print("Rewarded ad failed to present with error: \(error.localizedDescription).")
}

Objective-C

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

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

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

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

v8

Swift

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

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

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];

  GADRequest *request = [GADRequest request];
  [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                          request:request
                completionHandler:^(GADRewardedAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
      return;
    }
    self.rewardedAd = ad;
    NSLog(@"Rewarded ad loaded.");
    self.rewardedAd.fullScreenContentDelegate = self;
}

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

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

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

Usunięcie starszej wersji interfejsu GADRewardedBasedVideoAd API

Nowszy interfejs GADRewardedAd API został wprowadzony w marcu 2019 roku i od ponad 18 miesięcy jest preferowanym interfejsem API z nagrodą. Ma więcej ulepszeń niż starsza wersja interfejsu API GADRewardedBasedVideoAd, w tym możliwość wczytywania więcej niż 1 reklamy z nagrodą jednocześnie.

Starsza wersja interfejsu API GADRewardedBasedVideoAd została usunięta z pakietu SDK w wersji 8.0.0.

Wycofanie banerów inteligentnych na rzecz banerów adaptacyjnych

Reklamy typu banery inteligentne zostały wycofane i zastąpione banerami adaptacyjnymi. Banery adaptacyjne zapewniają największą skuteczność i większą elastyczność w ustawianiu szerokości reklam. Jeśli nadal chcesz używać banerów o pełnej szerokości, możesz to zrobić za pomocą banerów adaptacyjnych, jak pokazano w tym fragmencie kodu:

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

Opuść prośbę o usunięcie wywołania zwrotnego aplikacji

Wywołanie zwrotne willLeaveApplication wszystkich formatów reklam zostało zastąpione metodami applicationDidEnterBackground: i sceneDidEnterBackground:. Używanie interfejsów API na poziomie systemu operacyjnego powiadamia za każdym razem, gdy użytkownik zamknie aplikację, niezależnie od tego, czy jest to spowodowane interakcją z reklamą.

Pamiętaj, że wywołanie zwrotne willLeaveApplication nigdy nie miało być modułem obsługi kliknięć reklamy, a korzystanie z tego wywołania zwrotnego do raportowania kliknięć nie zapewniło dokładnych danych. Na przykład kliknięcie ikony Informacja, które uruchomiło zewnętrzną przeglądarkę, wywołało wywołanie zwrotne, ale nie policzyło kliknięcia.

Zmienianie nazw zajęć

Tabela poniżej zawiera nazwy klas, które zostały zmienione lub usunięte w wersji 8. W skrócie:

  • Nazwy wszystkich zajęć powiązanych z klasą GADUnifiedNativeAd zostały zmienione na GADNativeAd.
  • Aplikacje GADRewardBasedVideoAd, GADNativeExpressAdView i GADInstreamAd zostały usunięte.
  • Wszystkie klasy z prefiksem DFP zostały zastąpione prefiksem GAM.
Klasa w wersji 7.68.0 Klasa w wersji 8.0.0
DFPBannerView GAMBannerView
DFPBannerViewOptions GAMBannerViewOptions
DFPInterstitial Reklama pełnoekranowa GAM
DFPRequest GAMRequest
GADRequestError NSError
GADUnifiedNativeAdView GADNativeAdView
GADUnifiedNativeAd Reklama natywna GAD
GADUnifiedNativeAdAssetIdentifiers GADNativeAdAssetIdentifiers
GADUnifiedNativeAdDelegate GADNativeAdDelegate
GADUnifiedNativeAdUnconfirmedClickDelegate GADNativeAdUnconfirmedClickDelegate
Reklama natywna z szablonem niestandardowym GAD GADNiestandardowareklama natywna
GADNativeCustomTemplateAdLoaderDelegate GADCustomNativeAdLoaderDelegate
GADNativeAdDelegate GADCustomNativeAdDelegate
GADInAppPurchase Usunięta
GADInterstitial Reklama pełnoekranowa GAD
GADNativeExpressAdView Usunięta
Reklama wideo oparta na nagrodach GAD Usunięta
Reklama GADIn-Stream Usunięta
GADInstreamAdView Usunięta

Metody usunięte/zastąpione

W tabeli poniżej znajdziesz informacje o konkretnych zmianach w wersji 8. W skrócie:

  • Wcześniej wycofane metody i właściwości zostały usunięte.
  • Metody przekazywania dostępu do wszystkich formatów zostały usunięte (-willLeaveApplication:).
  • Nazwa klasy sieci reklamowej została przeniesiona do właściwości GADResponseInfo.
  • Identyfikator urządzenia testowego został przeniesiony do właściwości GADRequestConfiguration.
Klasa w wersji 7.68.0 Interfejs API w wersji 7.68.0 Interfejs API w wersji 8.0.0 Uwagi
Reklamy mobilne GAD +configureWithApplicationID: -startWithCompleteHandler: Identyfikator aplikacji jest teraz ustawiony w pliku Info.plist.
+disableAutomatedInAppzakupów -disableAutomatedInAppzakupów
+wyłączenie pakietuSDKCrashReporting -disableSDKCrashReporting
GADRequest testDevices GADRequestConfiguration.testdeviceidentifiers Właściwość testDeviceIdentifiers ma zastosowanie do wszystkich żądań reklamy, a stara właściwość testdevices została ustawiona dla poszczególnych żądań.
gender Usunięta
urodziny Usunięta
+sdkVersion GADMobileAds.sharedInstance.sdkVersion
-setBirthdayWithMonth:day:year: Usunięta
-setLocationWithDescription: -setLocationWithLatitude:longitude:accuracy:
-tagForChildDirectedTreatment: [tag GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment]
GADErrorCode Błąd kGAD* Błąd GAD* Prefiks k jest usuwany ze wszystkich stałych kodów błędu.
GADBannerView hasAutoRefreshed autoloadEnabled
inAppPurchaseDelegate Usunięta
mediatedAdView Usunięta
adNetworkClassName responseInfo.adNetworkClassName
DFPBannerView -setValidAdSizesWithSizes: -setValidAdSizes:
DFPBannerViewOptions -adSizePrzedstawiciel Usunięta
GADBannerViewDelegate -adViewDidReceivedAd: -bannerViewDidReadAd:
-adView:didFailToReceiveAdWithError: -bannerView:didFailToReceiveAdWithError:
-adViewWillpresentScreen: -bannerViewWillSubjectScreen:
-adViewWillOdrzućScreen: -bannerViewWillOdrzućScreen:
-adViewDidExitScreen: -bannerViewDidExitScreen:
-adViewWillLeaveApplication: Usunięta
Reklama natywna z szablonem niestandardowym GAD templateID GADCustomNativeAd.formatID
-performClickOnAssetWithKey:customClickHandler: -performClickOnAssetWithKey:
GADNativeAdImageAdLoaderOptions preferredImageOrientation GADNativeAdMediaAdOptions.mediaAspectRatio
GADInterstitial inAppPurchaseDelegate Usunięta
isReady Usunięta Zamiast niej użyj canpresentFromRootViewController:error:.
hasBeenUsed Usunięta
-init -initWithAdUnitID:
-setAdUnitID: -initWithAdUnitID:
adNetworkClassName responseInfo.adNetworkClassName
-interstitialWillLeaveApplication: Usunięta
GADUnifiedNativeAd videoController mediaContent.videoController
adNetworkClassName responseInfo.adNetworkClassName