Migracja wersji pakietu SDK

Na tej stronie opisano migracje dotyczące bieżącej i poprzednich wersji Google Mobile Ads SDK na iOS. Wersję 13.0.0 planujemy opublikować w lutym 2026 r.

Migracja z wersji 12 do wersji 13

Zwiększono minimalny cel wdrożenia

Minimalna wersja docelowa została zwiększona do iOS 13.

Zmiany w interfejsach API rozmiarów zakotwiczonych banerów adaptacyjnych

W wersji 13.0.0 wycofano dotychczasowe interfejsy API do określania rozmiaru zakotwiczonych banerów adaptacyjnych i wprowadzono interfejsy API do określania rozmiaru dużych zakotwiczonych banerów adaptacyjnych. Google Mobile Ads SDK może wyświetlać reklamy wideo w banerach reklamowych, korzystając z nowych interfejsów API do zarządzania dużymi zakotwiczonymi banerami adaptacyjnymi.

W tabeli poniżej znajdziesz wycofane interfejsy API do określania rozmiaru i ich odpowiedniki:

v12 (wycofana) v13 (zamiennik)
GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(CGFloat width) GADLargeAnchoredAdaptiveBannerAdSizeWithWidth(CGFloat width)
GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(CGFloat width) GADLargeLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(CGFloat width)
GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth(CGFloat width) GADLargePortraitAnchoredAdaptiveBannerAdSizeWithWidth(CGFloat width)

Dalsza obsługa równoczesności w Swift 6

Wersja 13.0.0 nadal dodaje obsługę ścisłej równoczesności w Swift 6.

Dodano bardziej rygorystyczne egzekwowanie typu tablicy neighboringContentURLStrings

Od wersji 13.0.0 Google Mobile Ads SDK zgłasza wyjątek, jeśli w tablicy neighboringContentURLStrings zostanie wykryty obiekt, który nie jest typu String.

Migracja z wersji 11 do wersji 12

Uaktualnienie do Xcode 16.0

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

Obsługa nazewnictwa Swift

Wersja 12.0.0 zawiera zmiany, które są zgodne z konwencjami nazewnictwa opisanymi w wytycznych dotyczących projektowania interfejsów API w języku Swift. Te zmiany dotyczą tylko języka Swift. Nie wprowadziliśmy żadnych zmian w nazwach interfejsów API Objective-C.

Zmiany prefiksów klas

W prefiksach klas wprowadzono te zmiany:

  • Usunięto prefiks GAD z nazw wszystkich typów.
  • Zmieniono prefiks GAM na AdManager.
  • Zmieniono prefiks GADM na Mediation.

Rozwiąż problemy

Najlepszym sposobem na rozwiązanie błędów wynikających z tych zmian jest wprowadzenie poprawki.

Rozwiązywanie konfliktów nazw

Aby rozwiązać konflikty nazw, użyj przestrzeni nazw podanej przez moduł. Na przykład GADRequest to teraz Request. Poniższy przykład zawiera przestrzeń nazw klasy Google Mobile Ads SDK Request:

import GoogleMobileAds
...
var request: GoogleMobileAds.Request?

Szczegółowa lista zmian w Swift

W tabelach poniżej znajdziesz zmiany wprowadzone w interfejsach API Swift:

Wersja 11 Wersja 12
GADAdapterInitializationState AdapterInitializationState
GADAdChoicesPosition AdChoicesPosition
GADAdChoicesView AdChoicesView
GADAdFormat AdFormat
GADAdLoader AdLoader
GADAdLoaderAdType AdLoaderAdType
GADAdLoaderDelegate AdLoaderDelegate
GADAdMetadataDelegate AdMetadataDelegate
GADAdMetadataProvider AdMetadataProvider
GADAdNetworkExtras AdNetworkExtras
GADAdNetworkResponseInfo AdNetworkResponseInfo
GADAdReward AdReward
GADAdSize AdSize
GADAdSizeDelegate AdSizeDelegate
GADAdValue AdValue
GADAdValuePrecision AdValuePrecision
GADAppEventDelegate AppEventDelegate
GADAppOpenAd AppOpenAd
GADAppOpenSignalRequest AppOpenSignalRequest
GADAudioVideoManager AudioVideoManager
GADAudioVideoManagerDelegate AudioVideoManagerDelegate
GADBannerSignalRequest BannerSignalRequest
GADBannerView BannerView
GADBannerViewDelegate BannerViewDelegate
GADCustomEventExtras CustomEventExtras
GADCustomEventRequest CustomEventRequest
GADCustomNativeAd CustomNativeAd
GADCustomNativeAdLoaderDelegate CustomNativeAdLoaderDelegate
GADCustomNativeAdDelegate CustomNativeAdDelegate
GADDebugOptionsViewControllerDelegate DebugOptionsViewControllerDelegate
GADDebugOptionsViewController DebugOptionsViewController
GADDisplayAdMeasurement DisplayAdMeasurement
GADExtras Extras
GADFullScreenPresentingAd FullScreenPresentingAd
GADFullScreenContentDelegate FullScreenContentDelegate
GADAdapterStatus AdapterStatus
GADInitializationStatus InitializationStatus
GADInterstitialAd InterstitialAd
GADInterstitialSignalRequest InterstitialSignalRequest
GADMediaAspectRatio MediaAspectRatio
GADMediaContent MediaContent
GADMediaView MediaView
GADMobileAds MobileAds
GADMultipleAdsAdLoaderOptions MultipleAdsAdLoaderOptions
GADMuteThisAdReason MuteThisAdReason
GADNativeAd NativeAd
GADNativeAdLoaderDelegate NativeAdLoaderDelegate
GADNativeAdView NativeAdView
GADNativeAdCustomClickGestureOptions NativeAdCustomClickGestureOptions
GADNativeAdDelegate NativeAdDelegate
GADNativeAdImage NativeAdImage
GADNativeAdImageAdLoaderOptions NativeAdImageAdLoaderOptions
GADNativeAdInlineBehavior NativeAdInlineBehavior
GADNativeAdInlineBehaviorOptions NativeAdInlineBehaviorOptions
GADNativeAdMediaAdLoaderOptions NativeAdMediaAdLoaderOptions
GADNativeAdUnconfirmedClickDelegate NativeAdUnconfirmedClickDelegate
GADNativeAdViewAdOptions NativeAdViewAdOptions
GADNativeMuteThisAdLoaderOptions NativeMuteThisAdLoaderOptions
GADNativeSignalRequest NativeSignalRequest
GADPresentationError PresentationError
GADPublisherPrivacyPersonalizationState PublisherPrivacyPersonalizationState
GADQueryInfo QueryInfo
GADRequest Request
GADRequestError RequestError
GADRequestConfiguration RequestConfiguration
GADResponseInfo ResponseInfo
GADRewardedAd RewardedAd
GADRewardedSignalRequest RewardedSignalRequest
GADRewardedInterstitialAd RewardedInterstitialAd
GADRewardedInterstitialSignalRequest RewardedInterstitialSignalRequest
GADSearchBannerView SearchBannerView
GADServerSideVerificationOptions ServerSideVerificationOptions
GADSignal Signal
GADSignalRequest SignalRequest
GADVersionNumber VersionNumber
GADVideoController VideoController
GADVideoControllerDelegate VideoControllerDelegate
Ad Manager
GAMBannerAdLoaderDelegate AdManagerBannerAdLoaderDelegate
GAMBannerView AdManagerBannerView
GAMBannerViewOptions AdManagerBannerViewOptions
GAMInterstitialAd AdManagerInterstitialAd
GAMRequest AdManagerRequest
Mediacja
GADMAdNetworkAdapter MediationAdNetworkAdapter
GADMAdNetworkConnector MediationAdNetworkConnector
GADMBannerAnimationType MediationBannerAnimationType
GADMediatedUnifiedNativeAd MediationUnifiedNativeAd
GADMediatedUnifiedNativeAdNotificationSource MediationUnifiedNativeAdNotificationSource
GADMediationAd MediationAd
GADMediationAdConfiguration MediationAdConfiguration
GADMediationAdEventDelegate MediationAdEventDelegate
GADMediationAdRequest MediationAdRequest
GADMediationAdapter MediationAdapter
GADMediationAppOpenAd MediationAppOpenAd
GADMediationAppOpenAdEventDelegate MediationAppOpenAdEventDelegate
GADMediationBannerAd MediationBannerAd
GADMediationBannerAdConfiguration MediationBannerAdConfiguration
GADMediationBannerAdEventDelegate MediationBannerAdEventDelegate
GADMediationCredentials MediationCredentials
GADMediationInterstitialAd MediationInterstitialAd
GADMediationInterstitialAdConfiguration MediationInterstitialAdConfiguration
GADMediationInterstitialAdEventDelegate MediationInterstitialAdEventDelegate
GADMediationNativeAd MediationNativeAd
GADMediationNativeAdConfiguration MediationNativeAdConfiguration
GADMediationNativeAdEventDelegate MediationNativeAdEventDelegate
GADMediationRewardedAd MediationRewardedAd
GADMediationRewardedAdConfiguration MediationRewardedAdConfiguration
GADMediationRewardedAdEventDelegate MediationRewardedAdEventDelegate
GADMediationServerConfiguration MediationServerConfiguration
Określanie stawek w czasie rzeczywistym
GADRTBAdapter RTBAdapter
GADRTBMediationSignalsConfiguration RTBMediationSignalsConfiguration
GADRTBRequestParameters RTBRequestParameters

Stałe

Wersja 11 Wersja 12
GADAdLoaderAdType.gamBanner AdLoaderAdType.adManagerBanner
GADAdSizeBanner AdSizeBanner
GADAdSizeFluid AdSizeFluid
GADAdSizeFullBanner AdSizeFullBanner
GADAdSizeInvalid AdSizeInvalid
GADAdSizeLargeBanner AdSizeLargeBanner
GADAdSizeLeaderboard AdSizeLeaderboard
GADAdSizeMediumRectangle AdSizeMediumRectangle
GADAdSizeSkyscraper AdSizeSkyscraper
GoogleMobileAdsVersionString GoogleMobileAdsVersion

Właściwości

Typ Wersja 11 Wersja 12
GADAdLoader loading isLoading
GADAudioVideoManager audioSessionApplicationManaged isAudioSessionApplicationManaged
GADBannerView autoloadEnabled isAutoloadEnabled
GADMobileAds sharedInstance shared
applicationMuted isApplicationMuted
GADMuteThisAdReason reasonDescription reason
GADNativeAd customMuteThisAdAvailable isCustomMuteThisAdAvailable
GADNativeAdCustomClickGestureOptions tapsAllowed areTapsAllowed
GADNativeAdImageAdLoaderOptions imageLoadingDisabled isImageLoadingDisabled
GADNativeMuteThisAdLoaderOptions customMuteThisAdRequested isCustomMuteThisAdRequested
GADNativeSignalRequest imageLoadingDisabled isImageLoadingDisabled
customMuteThisAdRequested isCustomMuteThisAdRequested
GADRequest neighboringContentURLStrings neighboringContentURLs
GADResponseInfo extrasDictionary extras
GADServerSideVerificationOptions customRewardString customRewardText
GADSignal signalString signal
GADSignalRequest neighboringContentURLStrings neighboringContentURLs
GADVideoController customControlsRequested areCustomControlsRequested
clickToExpandEnabled isClickToExpandEnabled
GADVideoOptions startMuted shouldStartMuted
customControlsRequested areCustomControlsRequested
clickToExpandRequested isClickToExpandRequested

Funkcje

Typ Wersja 11 Wersja 12
GADAdSize GADPortraitInlineAdaptiveBannerAdSizeWithWidth(_:) portraitInlineAdaptiveBanner(width:)
GADLandscapeInlineAdaptiveBannerAdSizeWithWidth(_:) landscapeInlineAdaptiveBanner(width:)
GADCurrentOrientationInlineAdaptiveBannerAdSizeWithWidth(_:) currentOrientationInlineAdaptiveBanner(width:)
GADInlineAdaptiveBannerAdSizeWithWidthAndMaxHeight(_:, _:) inlineAdaptiveBanner(width:maxHeight:)
GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth(_:) portraitAnchoredAdaptiveBanner(width:)
GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(_:) landscapeAnchoredAdaptiveBanner(width:)
GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(_:) currentOrientationAnchoredAdaptiveBanner(width:)
GADAdSizeFromCGSize(_:) adSizeFor(cgSize:)
GADAdSizeFullWidthPortraitWithHeight(_:) fullWidthPortrait(height:)
GADAdSizeFullWidthLandscapeWithHeight(_:) fullWidthLandscape(height:)
GADAdSizeEqualToSize(_:, _:) isAdSizeEqualToSize(size1:size2:)
IsGADAdSizeValid(_:) isAdSizeValid(size:)
GADAdSizeIsFluid(_:) isAdSizeFluid(size:)
CGSizeFromGADAdSize(_:) cgSize(for:)
NSStringFromGADAdSize(_:) string(for:)
NSValueFromGADAdSize(_:) nsValue(for:)
GADAdSizeFromNSValue(_:) adSizeFor(nsValue:)
GADClosestValidSizeForAdSizes(_:_:) closestValidSizeForAdSizes(original:possibleAdSizes:)
GADAppEventDelegate adView(_:didReceiveAppEvent:withInfo:) adView(_:didReceiveAppEvent:with:)
interstitialAd(_:didReceiveAppEvent:withInfo:) adView(_:didReceiveAppEvent:with:)
GADAppOpenAd load(withAdResponseString:) load(with:)
load(withAdUnitID:request:completionHandler:) load(with:request:completionHandler:)
canPresent(fromRootViewController:) canPresent(from:)
present(fromRootViewController:) present(from:)
GADBannerView load(withAdResponseString:) load(with:)
GADInterstitial load(withAdResponseString:) load(with:)
load(withAdUnitID:request:completionHandler:) load(with:request:completionHandler:)
canPresent(fromRootViewController:) canPresent(from:)
present(fromRootViewController:) present(from:)
GADRewardedAd load(withAdResponseString:) load(with:)
load(withAdUnitID:request:completionHandler:) load(with:request:completionHandler:)
canPresent(fromRootViewController:) canPresent(from:)
present(fromRootViewController:userDidEarnRewardHandler:) present(from:userDidEarnRewardHandler:)
GADRewardedInterstitialAd load(withAdResponseString:) load(with:)
load(withAdUnitID:request:completionHandler:) load(with:request:completionHandler:)
canPresent(fromRootViewController:) canPresent(from:)
present(fromRootViewController:userDidEarnRewardHandler:) present(from:userDidEarnRewardHandler:)
GADVersionNumber GADGetStringFromVersionNumber(_ version: GADVersionNumber) string(for:)
Mediacja
GADMAdNetworkAdapter getBannerWith(_:) getBanner(with:)
presentInterstitial(fromRootViewController:) presentInterstitial(from:)
getNativeAd(withAdTypes:options:) getNativeAd(with:options:)
GADMediatedUnifiedNativeAd didRecordClickOnAsset(withName:view:viewController:) didRecordClickOnAsset(with:view:viewController:)
GADMediationAdapter setUpWith(_:completionHandler:) setUp(with:completionHandler:)
GADMediationAdSize present(fromRootViewController:) present(from:)
GADMediationAppOpenAd present(fromRootViewController:) present(from:)
GADMediationInterstitialAd present(fromRootViewController:) present(from:)
GADMediationRewardedAd present(fromRootViewController:) present(from:)
GAMInterstitialAd load(withAdManagerAdUnitID:request:completionHandler:) load(with:request:completionHandler:)

Ustawianie parametrów kierowania niestandardowego

Aby ustawić kierowanie niestandardowe w żądaniu reklamy, użyj customTargeting.

Zmiany w interfejsie API dotyczące kontrolowania stanu wyciszenia dźwięku filmu

Właściwość isMuted i metoda setMute: w GADVideoController zostały zastąpione właściwością muted.

Zmiany we wbudowanych reklamach adaptacyjnych

Aby zoptymalizować wykorzystanie miejsca, wbudowane reklamy adaptacyjne początkowo nie zajmują miejsca w ramce. Wywołanie metody CGSizeFromGADAdSize(_:) z rozmiarem adaptacyjnej reklamy śródtekstowej zwraca teraz wysokość 0, dopóki pakiet SDK do reklam mobilnych Google nie zwróci reklamy.

Usunięto reklamy w wyszukiwarce niestandardowej

Te klasy zostaną usunięte bez zastąpienia:

  • GADDynamicHeightSearchBannerView
  • GADDynamicHeightSearchRequest
  • GADSearchBannerView

Zmiany w kodach błędów

Zmieniliśmy te kody błędów:

Klasa Uwagi
GADErrorMediationNoFill Błędy są teraz zwracane jako GADErrorNoFill.
GADErrorReceivedInvalidResponse Zastąpiono go przez GADErrorReceivedInvalidAdString.

Usunięto GADSimulatorID

Użytkownik GADSimulatorID został usunięty. Symulatory są już domyślnie w trybie testowym.

Zmiany w kierowaniu niestandardowym

Słownik customTargeting w GADRequest używa teraz typu wartości Any zamiast String. Umożliwia to przekazywanie wartości liczbowych do interfejsu API.

Zmiany parametrów dodatkowych

  • Przekazywanie kluczy do additionalParameters nie powoduje już stosowania kierowania niestandardowego do żądań reklamy Ad Managera. Aby dowiedzieć się, jak stosować kierowanie niestandardowe, przeczytaj artykuł o kierowaniu niestandardowym.

Migracja z wersji 10 do wersji 11

Minimalny cel wdrożenia

Minimalna wersja docelowa została podniesiona do iOS 12.

Minimalna wersja Xcode

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

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

Google Mobile Ads SDK 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 usunięto zależność od GoogleAppMeasurement. Ta zależność, która obsługiwała przełącznik danych o użytkownikach w AdMob, zostanie wycofana na początku 2024 r. Aby dalej zbierać dane o użytkownikach w AdMob, połącz swoją aplikację w AdMob z Firebase i zintegruj z nią pakiet SDK Google Analytics dla Firebase.

Zmiany w wyświetlaniu reklam pełnoekranowych

Te zmiany dotyczą różnych formatów reklam:

  • Reklama przy otwarciu aplikacji
  • Pełnoekranowa
  • Z nagrodą
  • Reklama pełnoekranowa z nagrodą

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

Usunięte metody

Usunęliśmy te metody:

Typ v11.0.0 Metoda Uwagi
GADAppOpenAd load(withAdUnitID adUnitID: String, request: GADRequest?, orientation: UIInterfaceOrientation) Zamiast tego użyj load(withAdUnitID adUnitID: String, request: GADRequest?).
GADMediationBannerAdEventDelegate willBackgroundApplication() Brak wymiany.
GADMediationInterstitialAdEventDelegate willBackgroundApplication() Brak wymiany.
GADMediationNativeAdEventDelegate willBackgroundApplication() Brak wymiany.
GADMediationRewardedAdEventDelegate didRewardUser(with reward: GADAdReward) Zamiast tego użyj didRewardUser().
GADMediatedUnifiedNativeAdNotificationSource mediatedNativeAdWillLeaveApplication(_ mediatedNativeAd: GADMediatedUnifiedNativeAd) Brak wymiany.
GADRequestConfiguration setSameAppKeyEnabled(_ enabled: Bool) Użyj w zamian zasady setPublisherFirstPartyIDEnabled(_ enabled: Bool).
tagForUnderAge(ofConsent underAgeOfConsent: Bool) Zamiast tego użyj właściwości tagForUnderAgeOfConsent.
tag(forChildDirectedTreatment childDirectedTreatment: Bool) Zamiast tego użyj właściwości tagForChildDirectedTreatment.

Usunięto właściwości

Usunięto te właściwości.

Klasa w wersji 11.0.0 Właściwość Uwagi
GADMediationAdConfiguration hasUserLocation Brak wymiany.
userLatitude
userLongitude
userLocationAccuracyInMeters
childDirectedTreatment Zamiast tego użyj GADMobileAds.sharedInstance.requestConfiguration.tagForChildDirectedTreatment.
GADResponseInfo adNetworkClassName Zamiast tego użyj adNetworkClassName z loadedAdNetworkResponseInfo.

Usunięto GADAdFormatUnknown

Usunięto element GADAdFormatUnknown bez zastąpienia.

Zmiany w rejestrowaniu wersji pakietu SDK

Wersja 11.0.0 usuwa sdkVersion. Aby zarejestrować wersję Google Mobile Ads SDK, użyj 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 pakiet GADAdLoader nie wysyła żądania reklamy, jeśli jego delegate nie jest zgodny z protokołem delegowanym typów żądanych reklam. Wcześniej nie udawało się to po wysłaniu żądania reklamy.

Zmiany w testowaniu

W tabeli poniżej znajdziesz zaktualizowane warunki, w których te właściwości zwracają wartość true.

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

Migracja z wersji 9 do wersji 10

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

Google Mobile Ads SDK w wersji 10.0.0 wyświetla reklamy tylko na urządzeniach z systemem iOS 12 lub nowszym.

Uaktualnienie do wersji 10.0.0 pakietu Google Mobile Ads SDK nie spowoduje, że aplikacja przestanie działać na urządzeniach z iOS 11 i iOS 10, ale nie będą się na nich wyświetlać reklamy.

Wymaganie dotyczące identyfikatora aplikacji w usłudze Ad Manager

Identyfikator aplikacji Ad Managera jest teraz wymagany w Info.plist w przypadku wszystkich aplikacji Ad Managera i musi mieć format ca-app-pub-################~##########. Więcej informacji znajdziesz w sekcji Aktualizowanie pliku Info.plist.

Wymaganie dotyczące GoogleAppMeasurement.xcframework

Plik GoogleAppMeasurement.xcframework jest teraz wymagany we wszystkich aplikacjach Ad Managera. Jeśli instalujesz Google Mobile Ads SDK za pomocą Cocoapods lub Swift Package Manager, nie musisz podejmować żadnych dodatkowych działań. Jeśli instalujesz platformy ręcznie, więcej informacji znajdziesz w sekcji Pobieranie ręczne.

Kompilowanie z kodem bitowym nie jest już obsługiwane

Aby zintegrować Google Mobile Ads SDK, musisz teraz wyłączyć kod bitowy w aplikacjach mobilnych.

Usunięte typy

Typ Uwagi
GADGender Brak wymiany.
GADMRewardBasedVideoAdNetworkAdapterProtocol Wszystkie adaptery zapośredniczenia reklam z nagrodą wymienione na stronie Wybierz sieci przestały używać tych protokołów ponad rok temu. Używaj GADMediationAdapter do zapośredniczenia i zdarzeń niestandardowych.
GADMRewardBasedVideoAdNetworkConnectorProtocol

Usunięto właściwości

Te właściwości zostaną usunięte bez zastąpienia.

Klasa v10.0.0 Właściwość
GADMediationAdRequest userBirthday
userGender
userHasLocation
userLatitude
userLongitude
userLocationAccuracyInMeters
userLocationDescription
GADCustomEventRequest userHasLocation
userLatitude
userLongitude
userLocationAccuracyInMeters
userLocationDescription

Migracja z wersji 8 na wersję 9

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

Minimalna wersja iOS obsługiwana przez pakiet Google Mobile Ads SDK w wersji 9.0.0 to iOS 11.

Uaktualnienie do wersji 9.0.0 pakietu Google Mobile Ads SDK nie spowoduje, że aplikacja przestanie działać na urządzeniach z iOS 10, ale nie będą się na nich wyświetlać reklamy.

Bardziej rygorystyczne egzekwowanie ustawień paska stanu

Od wersji 9.0.0, gdy wyświetlasz reklamy w formacie pełnoekranowym, aplikacja powinna zapewniać, że reklamy mogą kontrolować wyświetlanie paska stanu. Jeśli tego nie zrobisz, w dziennikach pojawi się komunikat o błędzie.

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

Zmień nazwę adDidPresentFullScreenContent: na adWillPresentFullScreenContent:

Nie ma żadnych zmian w działaniu. Metoda delegowana jest wywoływana tuż przed wyświetleniem reklamy, więc nowa nazwa metody lepiej odzwierciedla jej funkcję.

Usuń interfejs API ustawień lokalizacji z GADRequest

- (void)setLocationWithLatitude:longitude:accuracy: została usunięta z GADRequest, ponieważ Google nie używa danych o lokalizacji do kierowania reklam. W razie potrzeby używaj interfejsów API innych firm, aby przekazywać informacje do zewnętrznych sieci reklamowych.

Wycofanie interfejsów zdarzeń niestandardowych

Zdarzenia niestandardowe umożliwiają wydawcom korzystającym z zapośredniczenia Ad Managera dodawanie zapośredniczenia kaskadowego w przypadku sieci reklamowej, która nie jest jedną z obsługiwanych sieci reklamowych.

Wszystkie protokoły zdarzeń niestandardowych są wycofane. Zamiast tego używaj istniejących protokołów GADMediationAdapter i GADMediationAdEventDelegate, aby uzyskać te same funkcje. Ta zmiana zwiększa przejrzystość i umożliwia tworzenie zdarzeń niestandardowych w przypadku reklam z nagrodą i reklam interscroller, które wcześniej nie były dostępne.

Interfejsy API

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

v8 v9
GADCustomEventBanner
GADCustomEventInterstitial
GADCustomEventNativeAd
GADMediationAdapter GADMediationBannerAd
GADMediationInterstitialAd
GADMediationInterscrollerAd
GADMediationRewardedAd
GADMediationNativeAd
delegate Delegat jest zwracany 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 metody delegowane zdarzeń reklamowych zapośredniczenia odpowiadające metodom delegowanym zdarzeń niestandardowych, których należy używać od wersji 9.0.0.

v8 v9
GADCustomEventBannerDelegate
GADCustomEventInterstitialDelegate
GADCustomEventNativeAdDelegate
GADMediationAdEventDelegate GADMediationAd
-customEventBanner:didReceiveAd:
-customEventInterstitialDidReceiveAd:
Stan wczytywania reklamy jest uwzględniany 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 lub zastąpione metody i stałe

Zmiany w metodzie, stałej lub właściwości
Stałe z prefiksem kGAD- Usunięto. Używaj stałych z prefiksem GAD-.
GADAdNetworkResponseInfo Usunięto: credentials. Użyj w zamian zasady adUnitMapping.
GAMRequest Metoda kGAMSimulatorID w GAMRequest została wycofana. Zamiast tego użyj zasady GADSimulatorID w GADRequestConfiguration.
GADCustomNativeAd Wycofano mediaView w GADCustomNativeAd. Użyj w zamian zasady mediaContent.
Interfejsy API zakupów w aplikacji w GoogleMobileAds Usunięto interfejsy API inAppPurchase w usłudze GoogleMobileAds.

Migracja z wersji 7 na wersję 8

Wersja 8.0.0 pakietu Google Mobile Ads SDK wprowadza kilka ważnych zmian, a także zmiany nazw i usunięcie niektórych interfejsów API.

Aktualizacje interfejsu API formatu pełnoekranowego

Począwszy od wersji 8.0.0, reklamy pełnoekranowe i reklamy z nagrodą mają wspólny ogólny styl reklamy pełnoekranowej, co zapewnia większą spójność. Te nowe interfejsy API reklam pełnoekranowych różnią się od interfejsów API reklam pełnoekranowych w wersji 7 pod 2 względami:

  1. Metoda klasy statycznej load.

    Poprzednia metoda wczytywania i wyświetlania reklamy pełnoekranowej:

    1. Utwórz instancję obiektu reklamy i zachowaj odwołanie do niej.
    2. Przypisz obiekt delegowany, który obsługuje wywołania zwrotne dotyczące wczytywania i wyświetlania.
    3. Wczytaj reklamę.
    4. Sprawdź, czy reklama została wczytana, za pomocą metody isReady.
    5. Wyświetl reklamę.

    W wersji 8 podejście nieco się zmienia. Wywołania zwrotne wczytywania nie są już częścią przedstawiciela. Zamiast tego są przekazywane do metody load jako moduł obsługi zakończenia:

    1. Wywołaj statyczną metodę wczytywania w klasie reklamy i podaj moduł obsługi zakończenia wczytywania.
    2. W wywołaniu zwrotnym zakończenia wczytywania zachowaj odwołanie do zwróconej wczytanej reklamy.
    3. Przypisz przedstawiciela, który obsługuje wywołania zwrotne wyświetlania.
    4. Wyświetl reklamę.

    Nowe podejście zapewnia te korzyści:

    • Nigdy nie będziesz mieć odwołania do reklamy, która nie została wczytana.
    • Nie musisz przechowywać obiektu reklamy podczas jego wczytywania.
  2. Spójne zdarzenia reklamowe.

    Typ zdarzenia Istniejący interfejs API v8 API
    Zdarzenia wczytywania GADInterstitialDelegate lub GADRewardedAdDelegate GAMInterstitialAdLoadCompletionHandler lub GADRewardedAdLoadCompletionHandler
    Zdarzenia prezentacji GADFullScreenContentDelegate

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

    W wersji 8 zdarzenia wczytywania i prezentacji są oddzielne. Teraz możesz zarejestrować GADFullScreenContentDelegate w dowolnym momencie przed wyświetleniem reklamy, zamiast ustawiać pojedynczy obiekt delegowany przed jej wczytaniem. Zdarzenia wczytywania reklam, które są specyficzne dla każdego formatu, są przenoszone do jednej procedury obsługi zakończenia wczytywania przekazywanej w metodzie wczytywania.

Pełnoekranowa

Wczytaj reklamę

Poniższe fragmenty kodu pokazują, jak wczytać reklamę pełnoekranową i nasłuchiwać zdarzeń, gdy reklama zostanie wczytana lub nie.

wersja 7

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: DFPInterstitial!

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

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

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) DFPInterstitial *interstitial;

@end

@implementation ViewController

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

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

/// Tells the delegate an ad request failed.
- (void)interstitial:(DFPInterstitial *)ad
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"Interstitial ad failed to load with error: %@", [error localizedDescription]);
}

v8

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  var interstitial: GAMInterstitialAd?

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdUnitID:@"/21775744923/example/interstitial"
                              request:request
                    completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

Reklama displayowa

wersja 7

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 reklamowe związane z prezentacją

Poniższe fragmenty kodu pokazują, jak obsługiwać wywołania zwrotne, gdy reklama jest wyświetlana (pomyślnie lub nie) i gdy jest zamykana.

wersja 7

Swift

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

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

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

/// Tells the delegate the interstitial had been animated off the screen.
func interstitialDidDismissScreen(_ ad: DFPInterstitial) {
  print("Interstitial ad dismissed.")
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
///
/// This is not a reliable callback for an ad click event and is removed in
/// version 8. If you wish to listen to an ad causing a user to leave the app,
/// use applicationWillResignActive: or sceneWillResignActive: instead.
func interstitialWillLeaveApplication(_ ad: DFPInterstitial) {
  print("Interstitial ad will leave application.")
}

Objective-C

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

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

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

/// Tells the delegate the interstitial had been animated off the screen.
- (void)interstitialDidDismissScreen:(DFPInterstitial *)ad {
  NSLog(@"Interstitial ad dismissed.");
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
///
/// This is not a reliable callback for an ad click event and is removed in
/// version 8. If you wish to listen to an ad causing a user to leave the app,
/// use applicationWillResignActive: or sceneWillResignActive: instead.
- (void)interstitialWillLeaveApplication:(DFPInterstitial *)ad {
  NSLog(@"Interstitial ad will leave application.");
}

v8

Swift

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

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

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

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

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdUnitID:@"/21775744923/example/interstitial"
                              request:request
                    completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription])
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

- (void)adDidPresentFullScreenContent:(id)ad {
  NSLog(@"Ad did present full screen content.");
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"Ad failed to present full screen content with error %@.", [error localizedDescription]);
}

- (void)adDidDismissFullScreenContent:(id)ad {
  NSLog(@"Ad did dismiss full screen content.");
}

Z nagrodą

Wczytaj reklamę

wersja 7

Swift

import GoogleMobileAds
import UIKit

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

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

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

v8

Swift

import GoogleMobileAds
import UIKit

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

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

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () 

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

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

Wyświetlanie reklamy displayowej i przyznawanie nagrody

Reklamy z nagrodą wymagają obsługi zdarzenia, gdy użytkownik otrzymuje nagrodę. W wersji 7 interfejsu API GADRewardedAd implementujesz rewardedAd:userDidEarnReward: jako część protokołu GADRewardedAdDelegate. W przypadku wersji 8 musisz zaimplementować GADUserDidEarnRewardHandler, aby wyświetlać reklamę.

wersja 7

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 reklamowe dotyczące prezentacji

W interfejsie API GADRewardedAd przekazujesz GADRewardedAdDelegate do metody, która wyświetla reklamę. W interfejsie API GADRewardedAd ustawiasz GADFullscreenContentDelegate jako właściwość reklamy przed jej wyświetleniem.

wersja 7

Swift

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

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

Objective-C

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

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

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

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

v8

Swift

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

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

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];

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

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

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

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

Usunięcie starszego interfejsu API GADRewardedBasedVideoAd

Nowszy interfejs API GADRewardedAd został wprowadzony w marcu 2019 r. i od ponad 18 miesięcy jest preferowanym interfejsem API do reklam z nagrodą. W porównaniu ze starszym interfejsem API GADRewardedBasedVideoAd wprowadzono w nim więcej ulepszeń, w tym możliwość wczytywania więcej niż jednej reklamy z nagrodą naraz.

Starszy interfejs API GADRewardedBasedVideoAd został usunięty w pakiecie SDK w wersji 8.0.0.

Wycofanie banerów inteligentnych na rzecz banerów adaptacyjnych

Banery inteligentne zostały wycofane na rzecz banerów adaptacyjnych. Banery adaptacyjne zapewniają większą skuteczność i elastyczność w ustawianiu szerokości reklamy. Jeśli chcesz nadal używać banerów o pełnej szerokości, możesz to zrobić za pomocą banera adaptacyjnego, 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

Usuwanie wywołania zwrotnego aplikacji Leave

Wywołanie zwrotne willLeaveApplication dla wszystkich formatów reklam zostało usunięte na rzecz metod applicationDidEnterBackground: i sceneDidEnterBackground:. Interfejsy API na poziomie systemu operacyjnego powiadamiają Cię, gdy użytkownicy opuszczają aplikację, niezależnie od tego, czy jest to spowodowane interakcją z reklamą.

Pamiętaj, że wywołanie zwrotne willLeaveApplication nigdy nie miało służyć do obsługi kliknięć reklam, a poleganie na nim w celu raportowania kliknięć nie zapewniało dokładnych danych. Na przykład kliknięcie ikony Informacja, które uruchomiło przeglądarkę zewnętrzną, wywołało wywołanie zwrotne, ale nie zostało zliczone jako kliknięcie.

zmiany nazw zajęć,

W tabeli poniżej znajdziesz nazwy klas, które zostały zmienione lub usunięte w wersji 8. Podsumowanie:

  • Nazwy wszystkich zajęć powiązanych z GADUnifiedNativeAd zostały zmienione na GADNativeAd.
  • Usunięto: GADRewardBasedVideoAd, GADNativeExpressAdView i GADInstreamAd.
  • Wszystkie klasy z prefiksem DFP zostały zastąpione prefiksem GAM.
v7.68.0 Class Klasa v8.0.0
DFPBannerView GAMBannerView
DFPBannerViewOptions GAMBannerViewOptions
DFPInterstitial GAMInterstitialAd
DFPRequest GAMRequest
GADRequestError NSError
GADUnifiedNativeAdView GADNativeAdView
GADUnifiedNativeAd GADNativeAd
GADUnifiedNativeAdAssetIdentifiers GADNativeAdAssetIdentifiers
GADUnifiedNativeAdDelegate GADNativeAdDelegate
GADUnifiedNativeAdUnconfirmedClickDelegate GADNativeAdUnconfirmedClickDelegate
GADNativeCustomTemplateAd GADCustomNativeAd
GADNativeCustomTemplateAdLoaderDelegate GADCustomNativeAdLoaderDelegate
GADNativeAdDelegate GADCustomNativeAdDelegate
GADInAppPurchase Usunięta
GADInterstitial GADInterstitialAd
GADNativeExpressAdView Usunięta
GADRewardBasedVideoAd Usunięta
GADInstreamAd Usunięta
GADInstreamAdView Usunięta

Usunięte lub zastąpione metody

W tabeli poniżej znajdziesz konkretne zmiany wprowadzone w wersji 8. Podsumowanie:

  • Usunięto wcześniej wycofane metody i właściwości.
  • Metody delegowane -willLeaveApplication: zostały usunięte we wszystkich formatach.
  • 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.
v7.68.0 Class Interfejs API w wersji 7.68.0 Interfejs API w wersji 8.0.0 Uwagi
GADMobileAds +configureWithApplicationID: -startWithCompletionHandler: Identyfikator aplikacji jest teraz ustawiony w pliku Info.plist.
+disableAutomatedInAppPurchaseReporting -disableAutomatedInAppPurchaseReporting
+disableSDKCrashReporting -disableSDKCrashReporting
GADRequest testDevices GADRequestConfiguration.testdeviceidentifiers Właściwość testDeviceIdentifiers ma zastosowanie do wszystkich żądań reklamy, podczas gdy stara właściwość testDevices była ustawiana dla każdego żądania.
płeć Usunięta
urodziny Usunięta
+sdkVersion GADMobileAds.sharedInstance.sdkVersion
-setBirthdayWithMonth:day:year: Usunięta
-setLocationWithDescription: -setLocationWithLatitude:longitude:accuracy:
-tagForChildDirectedTreatment: [GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment]
GADErrorCode kGADError* GADError* Prefiks k jest usuwany ze wszystkich stałych kodów błędów.
GADBannerView hasAutoRefreshed autoloadEnabled
inAppPurchaseDelegate Usunięta
mediatedAdView Usunięta
adNetworkClassName responseInfo.adNetworkClassName
DFPBannerView -setValidAdSizesWithSizes: -setValidAdSizes:
DFPBannerViewOptions -adSizeDelegate Usunięta
GADBannerViewDelegate -adViewDidReceiveAd: -bannerViewDidReceiveAd:
-adView:didFailToReceiveAdWithError: -bannerView:didFailToReceiveAdWithError:
-adViewWillPresentScreen: -bannerViewWillPresentScreen:
-adViewWillDismissScreen: -bannerViewWillDismissScreen:
-adViewDidDismissScreen: -bannerViewDidDismissScreen:
-adViewWillLeaveApplication: Usunięta
GADNativeCustomTemplateAd templateID GADCustomNativeAd.formatID
-performClickOnAssetWithKey:customClickHandler: -performClickOnAssetWithKey:
GADNativeAdImageAdLoaderOptions preferredImageOrientation GADNativeAdMediaAdOptions.mediaAspectRatio
GADInterstitial inAppPurchaseDelegate Usunięta
isReady Usunięta Zamiast tego użyj canPresentFromRootViewController:error:.
hasBeenUsed Usunięta
-init -initWithAdUnitID:
-setAdUnitID: -initWithAdUnitID:
adNetworkClassName responseInfo.adNetworkClassName
-interstitialWillLeaveApplication: Usunięta
GADUnifiedNativeAd videoController mediaContent.videoController
adNetworkClassName responseInfo.adNetworkClassName