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
GADz nazw wszystkich typów. - Zmieniono prefiks
GAMnaAdManager. - Zmieniono prefiks
GADMnaMediation.
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:
GADDynamicHeightSearchBannerViewGADDynamicHeightSearchRequestGADSearchBannerView
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
additionalParametersnie powoduje już stosowania kierowania niestandardowego do żądań reklamy Ad Managera. Aby dowiedzieć się, jak stosować kierowanie niestandardowe, przeczytaj artykuł o kierowaniu niestandardowym.
- Przekazywanie klucza
max_ad_content_ratingdoadditionalParametersnie jest już obsługiwane. Aby ustawić maksymalną ocenę treści reklam, zapoznaj się z informacjami o filtrowaniu treści reklam.
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 |
|
|
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: |
-loadBannerForAdConfiguration: |
|
-requestInterstitialAdWith |
-loadInterstitialFor |
|
-requestNativeAdWithParameter:
|
-loadNativeAdFor |
|
| Nie dotyczy | -loadInterscrollerAdFor |
|
| Nie dotyczy | -loadRewardedAdFor |
|
-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 |
|
-customEventBannerWill-customEventInterstitialWill
|
-willPresentFullScreenView |
|
-customEventBannerWill-customEventInterstitialWill
|
-willDismissFullScreenView |
|
-customEventBannerDid-customEventInterstitialDid
|
-didDismissFullScreenView |
|
-customEventBannerWill-customEventInterstitialWill
|
-willBackgroundApplication |
|
viewControllerFor |
-[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:
Metoda klasy statycznej
load.Poprzednia metoda wczytywania i wyświetlania reklamy pełnoekranowej:
- Utwórz instancję obiektu reklamy i zachowaj odwołanie do niej.
- Przypisz obiekt delegowany, który obsługuje wywołania zwrotne dotyczące wczytywania i wyświetlania.
- Wczytaj reklamę.
- Sprawdź, czy reklama została wczytana, za pomocą metody
isReady. - 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
loadjako moduł obsługi zakończenia:- Wywołaj statyczną metodę wczytywania w klasie reklamy i podaj moduł obsługi zakończenia wczytywania.
- W wywołaniu zwrotnym zakończenia wczytywania zachowaj odwołanie do zwróconej wczytanej reklamy.
- Przypisz przedstawiciela, który obsługuje wywołania zwrotne wyświetlania.
- 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.
Spójne zdarzenia reklamowe.
Typ zdarzenia Istniejący interfejs API v8 API Zdarzenia wczytywania GADInterstitialDelegatelubGADRewardedAdDelegateGAMInterstitialAdLoadCompletionHandlerlubGADRewardedAdLoadCompletionHandlerZdarzenia prezentacji GADFullScreenContentDelegateWcześ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ć
GADFullScreenContentDelegatew 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
GADUnifiedNativeAdzostały zmienione naGADNativeAd. - Usunięto:
GADRewardBasedVideoAd,GADNativeExpressAdViewiGADInstreamAd. - Wszystkie klasy z prefiksem
DFPzostały zastąpione prefiksemGAM.
| 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. |
| +disableAutomatedInApp |
-disableAutomatedInApp |
||
| +disableSDKCrashReporting | -disableSDKCrashReporting | ||
| GADRequest | testDevices | GADRequestConfiguration |
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 |
||
| -setBirthday |
Usunięta | ||
| -setLocationWithDescription: | -setLocationWith |
||
| -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 |
||
| DFPBannerView | -setValidAdSizesWithSizes: | -setValidAdSizes: | |
| DFPBannerViewOptions | -adSizeDelegate | Usunięta | |
| GADBannerViewDelegate | -adViewDidReceiveAd: | -bannerViewDidReceiveAd: | |
| -adView:didFailToReceive |
-bannerView:didFailToReceive |
||
| -adViewWillPresentScreen: | -bannerViewWillPresentScreen: | ||
| -adViewWillDismissScreen: | -bannerViewWillDismissScreen: | ||
| -adViewDidDismissScreen: | -bannerViewDidDismissScreen: | ||
| -adViewWillLeaveApplication: | Usunięta | ||
| GADNativeCustomTemplateAd | templateID | GADCustomNativeAd.formatID | |
| -performClickOnAssetWithKey: |
-performClickOnAssetWithKey: | ||
| GADNativeAdImageAd |
preferredImageOrientation | GADNativeAdMediaAdOptions |
|
| GADInterstitial | inAppPurchaseDelegate | Usunięta | |
| isReady | Usunięta | Zamiast tego użyj canPresentFrom |
|
| hasBeenUsed | Usunięta | ||
| -init | -initWithAdUnitID: | ||
| -setAdUnitID: | -initWithAdUnitID: | ||
| adNetworkClassName | responseInfo |
||
| -interstitialWill |
Usunięta | ||
| GADUnifiedNativeAd | videoController | mediaContent.videoController | |
| adNetworkClassName | responseInfo |