Ta strona dotyczy migracji w przypadku obecnej i poprzednich wersji pakietu SDK do reklam mobilnych Google na iOS. Wersja 11.0.0 zostanie wydana w styczniu 2024 r.
Migracja z wersji pakietu SDK 10 na wersję 11
Minimalny cel wdrożenia
Minimalna wartość docelowa wdrożenia została zwiększona do iOS 12.
Minimalna wersja Xcode
Minimalna obsługiwana wersja Xcode została zwiększona do 15.1.
Reklamy przestaną się wyświetlać w systemie iOS 12
Pakiet SDK do reklam mobilnych Google w wersji 11.0.0 wyświetla reklamy tylko na urządzeniach z iOS 13 i wyższe.
Usunięto zależność GoogleAppMeasurement
W wersji 11.0.0 zależność
Aplikacja GoogleAppMeasurement
została
usunięto. Zależność, która wspomagała przełącznik danych o użytkownikach w AdMob,
wycofane na początku 2024 r. Do
nadal zbierać w AdMob dane o użytkownikach,
połączyć aplikację AdMob z Firebase,
zintegruj
pakietu SDK Google Analytics dla Firebase,
do aplikacji.
Zmiany w wyświetlaniu reklam na pełnym ekranie
Na różne formaty reklam wpływają te zmiany:
- Reklama przy otwarciu aplikacji
- Pełnoekranowa
- Z nagrodą
- Reklama pełnoekranowa z nagrodą
Parametr kontrolera widoku w polach -canPresentFromRootViewController:error:
oraz
Pole -presentFromRootViewController:
może zawierać wartość null. Jeśli wartość nil jest nieprawidłowa, reklama jest
z kontrolera widoku najwyższego poziomu w hierarchii tego kontrolera.
Usunięte metody
Usunięte zostaną poniższe metody.
Typ v11.0.0 | Metoda | Uwagi |
---|---|---|
GADAppOpenAd | load(withAdUnitID adUnitID: String, request: GADRequest?, orientation: UIInterfaceOrientation) |
Zamiast niego użyj load(withAdUnitID adUnitID: String, request: GADRequest?) . |
GADMediationBannerAdEventDelegate | willBackgroundApplication() |
Bez zamiennika. |
GADMediationInterstitialAdEventDelegate | willBackgroundApplication() |
Bez zamiennika. |
GADMediationNativeAdEventDelegate | willBackgroundApplication() |
Bez zamiennika. |
GADMediationRewardedAdEventDelegate | didRewardUser(with reward: GADAdReward) |
Zamiast niego użyj didRewardUser() . |
GADMediatedUnifiedNativeAdNotificationSource | mediatedNativeAdWillLeaveApplication(_ mediatedNativeAd: GADMediatedUnifiedNativeAd) |
Bez zamiennika. |
GADRequestConfiguration | setSameAppKeyEnabled(_ enabled: Bool) |
Użyj w zamian zasady setPublisherFirstPartyIDEnabled(_ enabled: Bool) . |
tagForUnderAge(ofConsent underAgeOfConsent: Bool) |
Zamiast tego używaj właściwości tagForUnderAgeOfConsent . |
|
tag(forChildDirectedTreatment childDirectedTreatment: Bool) |
Zamiast tego używaj właściwości tagForChildDirectedTreatment . |
Usunięto usługi
Zostaną usunięte te właściwości.
Klasa w wersji 11.0.0 | Właściwość | Uwagi |
---|---|---|
GADMediationAdConfiguration | hasUserLocation | Bez zamiennika. |
userLatitude | ||
userLongitude | ||
userLocationAccuracyInMeters | ||
childDirectedTreatment | Zamiast niego użyj GADMobileAds.sharedInstance.requestConfiguration.tagForChildDirectedTreatment . |
|
GADResponseInfo | adNetworkClassName | Zamiast tego użyj pakietu adNetworkClassName z usługi loadedAdNetworkResponseInfo . |
Usunięto nieznany format reklamy GADAdFormat
Usunięto: GADAdFormatUnknown
bez zamiennika.
Zmiany w wersji pakietu SDK do logowania
W wersji 11.0.0 usunięto sdkVersion
. Aby zapisać wersję pakietu SDK do reklam mobilnych Google,
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 GADAdLoader
nie wysyła żądania reklamy, jeśli
delegate
.
nie jest zgodna z żądanymi typami reklam” protokołu delegowania. Wcześniej
nie powiódł się po przesłaniu żądania reklamy.
Zmiany w sposobie testowania
Zajrzyj do tabeli ze zaktualizowanymi warunkami, gdy:
właściwości zwracają true
.
Klasa | Właściwość |
---|---|
GADMediationAdConfiguration | isTestRequest |
GADCustomEventRequest | isTesting |
v10.0.0 | v11.0.0 |
|
|
Migracja z wersji 9 na wersję 10
Reklamy przestają się wyświetlać na urządzeniach z iOS 11
Pakiet SDK do reklam mobilnych Google w wersji 10.0.0 wyświetla reklamy tylko na urządzeniach z systemem iOS 12 lub nowszym.
Przejście na pakiet SDK do reklam mobilnych Google w wersji 10.0.0 nie zaburzy działania aplikacji na urządzeniach z iOS 11 i iOS 10, jednak reklamy nie będą się na nich wyświetlać.
Kompilowanie za pomocą kodu bitowego nie jest już obsługiwane
Do integracji pakietu SDK do reklam mobilnych Google konieczne jest teraz wyłączenie kodu bitowego w aplikacjach mobilnych.
Usunięte typy
Typ | Uwagi |
---|---|
GADGender | Brak zamiennika. |
GADMRewardBasedVideoAdNetworkAdapterProtocol | Wszystkie adaptery zapośredniczenia z nagrodą wymienione na stronie Wybierz sieci nie używają tych protokołów od ponad roku. Na potrzeby zapośredniczenia i zdarzeń niestandardowych użyj GADMediationAdapter. |
GADMRewardBasedVideoAdNetworkConnectorProtocol |
Usunięto usługi
Te właściwości są usuwane bez zamiennika.
Klasa w wersji 10.0.0 | Właściwość |
---|---|
GADMediationAdRequest | userBirthday |
userGender | |
userHasLocation | |
userLatitude | |
userLongitude | |
userLocationAccuracyInMeters | |
userLocationDescription | |
GADCustomEventRequest | userHasLocation |
userLatitude | |
userLongitude | |
userLocationAccuracyInMeters | |
userLocationDescription |
Migracja z wersji 8 na wersję 9
Reklamy przestają się wyświetlać na urządzeniach z iOS 10
Minimalną wersją iOS, którą obsługuje pakiet SDK do reklam mobilnych Google w wersji 9.0.0, jest iOS 11.
Przejście na pakiet SDK do reklam mobilnych Google w wersji 9.0.0 nie zaburzy działania Twojej aplikacji na urządzeniach z iOS 10, ale na tych urządzeniach nie będą się wyświetlać żadne reklamy.
bardziej rygorystyczne egzekwowanie ustawień na pasku stanu;
Od wersji 9.0.0 wyświetlanie reklam w formacie pełnoekranowym w aplikacji powinno umożliwiać im kontrolowanie wyświetlania paska stanu przez reklamy. W przeciwnym razie w dziennikach pojawi się komunikat o błędzie.
W zależności od konkretnego układu kontrolerów widoków w aplikacji nie musisz wprowadzać żadnych zmian, aby to zapewnić. Zastanów się, czy w elemencie rootViewController
reklamy musisz ustawić właściwość childViewControllerForStatusBarHidden
.
Zmień nazwę elementu adDidpresentFullScreenContent: na adWillpresentFullScreenContent:
Nie ma to wpływu na działanie. Metoda delegata jest wywoływana tuż przed wyświetleniem reklamy, więc nazwa nowej metody lepiej odzwierciedla jej funkcje.
Usunięcie interfejsu API ustawienia lokalizacji w GADRequest
Lokalizacja - (void)setLocationWithLatitude:longitude:accuracy:
została usunięta z domeny GADRequest
, ponieważ Google nie używa danych o lokalizacji do kierowania reklam. Jeśli to konieczne, używaj interfejsów API innych firm do przekazywania informacji do zewnętrznych sieci reklamowych.
Wycofanie interfejsów zdarzeń niestandardowych
Zdarzenia niestandardowe umożliwiają wydawcom korzystającym z AdMob zapośredniczenia dodawanie zapośredniczenia kaskadowego w przypadku sieci reklamowej, która nie należy do obsługiwanych sieci reklamowych.
Wszystkie protokoły zdarzeń niestandardowych zostały wycofane. Aby uzyskać te same funkcje, użyj istniejących protokołów GADMediationAdapter
i GADMediationAdEventDelegate
. Ta zmiana jest bardziej przejrzysta i umożliwia tworzenie zdarzeń niestandardowych na potrzeby reklam z nagrodą oraz reklam typu interscroller, które wcześniej nie były dostępne.
Interfejsy API
W tabeli poniżej znajdziesz odpowiadające im interfejsy API adaptera zapośredniczenia do interfejsów API zdarzeń niestandardowych, których należy używać od wersji 9.0.0.
v8 | v9 | |
---|---|---|
GADCustomEventBanner GADCustomEventInterstitial GADCustomEventNativeReklama |
GADMediationAdapter | GADMediationBannerAd GADMediationReklama pełnoekranowa GADMediationInterscrollerAd GADMediationRewardedAd GADMediationNativeReklama |
delegate
|
Przekazywanie dostępu jest zwracane przez moduł obsługi zakończenia wczytywania każdej funkcji wczytywania klasy GADMediationAdapter
|
|
-init |
-init |
|
-requestBannerAd:parameter: |
-loadBannerForAdConfiguration: |
|
-requestInterstitialAdWith |
-loadInterstitialFor |
|
-requestNativeAdWithParameter:
|
-loadNativeAdFor |
|
Nie dotyczy | -loadInterscrollerAdFor |
|
Nie dotyczy | -loadRewardedAdFor |
|
-presentFromRootViewController:
|
-presentFromViewController: |
|
-handlesUserClicks |
-handlesUserClicks |
|
-handlesUserImpressions |
-handlesUserImpressions |
Metody delegowania
W tabeli poniżej znajdziesz odpowiednie metody przekazywania dostępu do zdarzeń reklamy w zapośredniczeniu do niestandardowych metod delegowania zdarzeń, których należy używać od wersji 9.0.0.
v8 | v9 | |
---|---|---|
GADCustomEventBannerBanner GADCustomEventInterstitialReceived GADCustomEventNativeAd Department |
GADMediationAdEventDelegate | Reklama z zapośredniczeniem GAD |
-customEventBanner:didReceiveAd: -customEventInterstitialDidReceiveAd:
|
Stan wczytywania reklam jest podany w module obsługi zakończenia wczytywania każdej funkcji wczytywania w klasie GADMediationAdapter .
|
|
-customEventBanner:didFailAd: -customEventInterstitial:didFailAd:
|
||
-customEventBannerWasClicked: -customEventInterstitialWasClicked:
|
-reportClick |
|
-customEventBannerWill -customEventInterstitialWill
|
-willPresentFullScreenView |
|
-customEventBannerWill -customEventInterstitialWill
|
-willDismissFullScreenView |
|
-customEventBannerDid -customEventInterstitialDid
|
-didDismissFullScreenView |
|
-customEventBannerWill -customEventInterstitialWill
|
-willBackgroundApplication |
|
viewControllerFor |
-[GADMediationBannerAd view] |
Inne usunięte/zastąpione metody i stałe
zmiany metody, stałej lub właściwości; | |
---|---|
Stałe z przedrostkiem kGAD-
|
Usunięto. Używaj stałych z przedrostkiem GAD- .
|
GADAdNetworkResponseInfo
|
Urządzenia credentials zostały usunięte. Użyj w zamian zasady adUnitMapping .
|
GAMRequest
|
Interfejs kGAMSimulatorID w przeglądarce GAMRequest został wycofany.
Użyj w zamian pola GADSimulatorID w usłudze GADRequestConfiguration .
|
GADCustomNativeAd
|
Interfejs mediaView w przeglądarce GADCustomNativeAd został wycofany.
Użyj w zamian zasady mediaContent .
|
Interfejsy API zakupów w aplikacji w: GoogleMobileAds |
W GoogleMobileAds usunięto inAppPurchase interfejsów API.
|
Migracja z wersji 7 na wersję 8
Pakiet SDK do reklam mobilnych Google w wersji 8.0.0 wprowadza kilka istotnych zmian, niektóre zmiany nazw i usunięcia interfejsów API.
Aktualizacje interfejsu API formatu pełnoekranowego
Od wersji 8.0.0 reklamy pełnoekranowe i reklamy z nagrodą mają ogólny, stylu reklamy na ekranie. Te nowe interfejsy API do wyświetlania reklam pełnoekranowych mają 2 elementy: główne różnice w stosunku do pełnoekranowych interfejsów API do wyświetlania reklam w wersji 7:
Metoda klasy statycznej
load
.Poprzednia metoda wczytywania/wyświetlania reklam pełnoekranowych:
- Utwórz wystąpienie obiektu reklamy i zachowaj do niego odwołanie.
- Wyznacz przedstawiciela, który zajmuje się ładowaniem i wyświetlaniem wywołań zwrotnych.
- 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ż jest częścią przedstawiciela. Zamiast tego są przekazywane do metody
load
jako moduł obsługi uzupełniania:- Wywołaj metodę wczytywania statycznego w klasie reklamy i podaj zakończenie wczytywania .
- W wywołaniu zwrotnym zakończenia wczytywania zachowaj odniesienie do wczytanej reklamy, która jest .
- Wyznacz przedstawiciela, który będzie obsługiwać wywołania zwrotne.
- Wyświetl reklamę.
Nowe podejście zapewnia następujące korzyści:
- Nie będzie nigdy pojawiać się w odniesieniu do reklamy, która nie została wczytana.
- Nie musisz przytrzymywać obiektu reklamy podczas wczytywania.
Spójne zdarzenia reklamowe.
Typ zdarzenia Istniejący interfejs API Interfejs API w wersji 8 Zdarzenia wczytywania GADInterstitialDelegate
lubGADRewardedAdDelegate
GADInterstitialAdLoadCompletionHandler
lubGADRewardedAdLoadCompletionHandler
Wydarzenia związane z prezentacją GADFullScreenContentDelegate
Wcześniej, aby nasłuchiwać zdarzeń reklamowych, należało zarejestrować klasę, która stosuje
GADInterstitialDelegate
lub zarejestruj klasę, która stosujeGADRewardedAdDelegate
do właściwości przekazywania reklamy z nagrodą w zależności od formatu którego używasz. Ten sam delegat miał metody związane z wczytywaniem cyklu prezentacji reklamy.W wersji 8 zdarzenia wczytywania i prezentacji są oddzielne. Teraz możesz zarejestruj
GADFullScreenContentDelegate
przed wyświetleniem reklamy. Nie trzeba ustawiać przed wczytaniem reklamy. Zdarzenia wczytywania reklam, które są specyficzne dla poszczególnych przejdź do pojedynczego modułu obsługi ukończenia wczytywania przekazanego w metodzie wczytywania.
Pełnoekranowa
Wczytaj reklamę
Fragmenty kodu poniżej pokazują, jak wczytać reklamę pełnoekranową i włączyć nasłuchiwanie zdarzeń, gdy reklama się załaduje lub nie uda się wczytać.
wersja 7
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADInterstitialDelegate { var interstitial: GADInterstitial! override func viewDidLoad() { super.viewDidLoad() interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910") interstitial.delegate = self let request = GADRequest() interstitial.load(request) } /// Tells the delegate an ad request succeeded. func interstitialDidReceiveAd(_ ad: GADInterstitial) { print("Interstitial ad loaded.") } /// Tells the delegate an ad request failed. func interstitial(_ ad: GADInterstitial, didFailToReceiveAdWithError error: GADRequestError) { print("Interstitial ad failed to load with error: \(error.localizedDescription)") } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController ()@property(nonatomic, strong) GADInterstitial *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"]; self.interstitial.delegate = self; GADRequest *request = [GADRequest request]; [self.interstitial loadRequest:request]; } /// Tells the delegate an ad request succeeded. - (void)interstitialDidReceiveAd:(GADInterstitial *)ad { NSLog(@"Insterstitial ad loaded."); } /// Tells the delegate an ad request failed. - (void)interstitial:(GADInterstitial *)ad didFailToReceiveAdWithError:(GADRequestError *)error { NSLog(@"Interstitial ad failed to load with error: %@", [error localizedDescription]); }
v8
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADFullScreenContentDelegate { var interstitial: GADInterstitialAd? override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() GADInterstitialAd.load(withAdUnitID:"ca-app-pub-8123415297019784/4985798738", request: request, completionHandler: { (ad, error) in if let error = error { print("Failed to load interstitial ad with error: \(error.localizedDescription)") return } self.interstitial = ad self.interstitial.fullScreenContentDelegate = self } ) } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController ()@property(nonatomic, strong) GADInterstitialAd *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910" request:request completionHandler:^(GADInterstitialAd *ad, NSError *error) { if (error) { NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]); return; } self.interstitial = ad; self.interstitial.fullScreenContentDelegate = self; }]; }
Reklama displayowa
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 reklamy z prezentacją
Poniższe fragmenty kodu pokazują, jak obsługiwać wywołania zwrotne, gdy reklama (powodzenie lub niepowodzenie) i zamknięcie.
wersja 7
Swift
override func viewDidLoad() { super.viewDidLoad() interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910") interstitial.delegate = self ... } /// Tells the delegate that an interstitial will be presented. func interstitialWillPresentScreen(_ ad: GADInterstitial) { print("Interstitial ad will be presented.") } /// Tells the delegate the interstitial is to be animated off the screen. func interstitialWillDismissScreen(_ ad: GADInterstitial) { print("Interstitial ad will be dismissed.") } /// Tells the delegate the interstitial had been animated off the screen. func interstitialDidDismissScreen(_ ad: GADInterstitial) { print("Interstitial ad dismissed.") } /// Tells the delegate that a user click will open another app /// (such as the App Store), backgrounding the current app. /// /// This is not a reliable callback for an ad click event and is removed in /// version 8. If you wish to listen to an ad causing a user to leave the app, /// use applicationWillResignActive: or sceneWillResignActive: instead. func interstitialWillLeaveApplication(_ ad: GADInterstitial) { print("Interstitial ad will leave application.") }
Objective-C
- (void)viewDidLoad { [super viewDidLoad]; self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/4411468910"]; self.interstitial.delegate = self; ... } /// Tells the delegate that an interstitial will be presented. - (void)interstitialWillPresentScreen:(GADInterstitial *)ad { NSLog(@"Interstitial ad will be presented."); } /// Tells the delegate the interstitial is to be animated off the screen. - (void)interstitialWillDismissScreen:(GADInterstitial *)ad { NSLog(@"Interstitial ad will be dismissed."); } /// Tells the delegate the interstitial had been animated off the screen. - (void)interstitialDidDismissScreen:(GADInterstitial *)ad { NSLog(@"Interstitial ad dismissed."); } /// Tells the delegate that a user click will open another app /// (such as the App Store), backgrounding the current app. /// /// This is not a reliable callback for an ad click event and is removed in /// version 8. If you wish to listen to an ad causing a user to leave the app, /// use applicationWillResignActive: or sceneWillResignActive: instead. - (void)interstitialWillLeaveApplication:(GADInterstitial *)ad { NSLog(@"Interstitial ad will leave application."); }
v8
Swift
override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() GADInterstitialAd.load(withAdUnitID:"ca-app-pub-8123415297019784/4985798738", request: request, completionHandler: { (ad, error) in if let error = error { print(error.localizedDescription) return } self.interstitial = ad self.interstitial.fullScreenContentDelegate = self } ) } func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad did present full screen content.") } func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) { print("Ad failed to present full screen content with error \(error.localizedDescription).") } func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad did dismiss full screen content.") }
Objective-C
- (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910" request:request completionHandler:^(GADInterstitialAd *ad, NSError *error) { if (error) { NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription]) return; } self.interstitial = ad; self.interstitial.fullScreenContentDelegate = self; }]; } - (void)adDidPresentFullScreenContent:(id)ad { NSLog(@"Ad did present full screen content."); } - (void)ad:(id )ad didFailToPresentFullScreenContentWithError:(NSError *)error { NSLog(@"Ad failed to present full screen content with error %@.", [error localizedDescription]); } - (void)adDidDismissFullScreenContent:(id )ad { NSLog(@"Ad did dismiss full screen content."); }
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(GADRequest()) { error in if let error = error { print("Rewarded ad failed to load with error: \(error.localizedDescription)") } else { print("Rewarded ad loaded.") } } } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController ()@property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"]; self.rewardedAd.delegate = self; GADRequest *request = [GADRequest request]; [self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); } else { NSLog(@"Rewarded ad loaded."); } }]; }
v8
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADFullScreenContentDelegate { /// The rewarded ad. var rewardedAd: GADRewardedAd? override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() GADRewardedAd.load(withAdUnitID: "ca-app-pub-8123415297019784/9501821136", request: request, completionHandler: { (ad, error) in if let error = error { print("Rewarded ad failed to load with error: \(error.localizedDescription)") return } self.rewardedAd = ad self.rewardedAd?.fullScreenContentDelegate = self } ) } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController ()@property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); self.rewardedAd.fullScreenContentDelegate = self; }
Reklama displayowa i reklama z nagrodą
W przypadku reklam z nagrodą musisz obsługiwać zdarzenie, gdy użytkownik zdobędzie nagrodę. Na
wersji 7 interfejsu API GADRewardedAd
, zaimplementujesz
rewardedAd:userDidEarnReward:
w ramach protokołu GADRewardedAdDelegate
.
W wersji 8 implementujesz interfejs GADUserDidEarnRewardHandler
, aby
wyświetlić 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 reklamy z prezentacją
Za pomocą interfejsu API GADRewardedAd
przekazujesz GADRewardedAdDelegate
do metody
który wyświetla reklamę. Za pomocą interfejsu API GADRewardedAd
możesz ustawić
GADFullscreenContentDelegate
jako właściwość reklamy przed wyświetleniem parametru
reklama.
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 = GADRequest() GADRewardedAd.load(withAdUnitID: "ca-app-pub-8123415297019784/9501821136", request: request, completionHandler: { (ad, error) in if let error = error { print(error.localizedDescription) return } self.rewardedAd = ad self.rewardedAd?.fullScreenContentDelegate = self } ) } /// Tells the delegate that the rewarded ad was presented. func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Rewarded ad presented.") } /// Tells the delegate that the rewarded ad was dismissed. func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Rewarded ad dismissed.") } /// Tells the delegate that the rewarded ad failed to present. func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) { print("Rewarded ad failed to present with error: \(error.localizedDescription).") }
Objective-C
- (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); self.rewardedAd.fullScreenContentDelegate = self; } /// Tells the delegate that the rewarded ad was presented. - (void)adDidPresentFullScreenContent:(id)ad { NSLog(@"Rewarded ad presented."); } /// Tells the delegate that the rewarded ad failed to present. - (void)ad:(id )ad didFailToPresentFullScreenContentWithError:(NSError *)error { NSLog(@"Rewarded ad failed to present with error: %@", [error localizedDescription]); } /// Tells the delegate that the rewarded ad was dismissed. - (void)adDidDismissFullScreenContent:(id )ad { NSLog(@"Rewarded ad dismissed."); }
Usunięcie starszej wersji interfejsu GADNagrodaBasedVideoAd API
Nowsza
GADRewardedAd
Interfejs API został po raz pierwszy wprowadzony w marcu 2019 r. i jest preferowanym interfejsem reklam z nagrodami.
API od ponad 18 miesięcy. Zawierał więcej ulepszeń w porównaniu do starszej wersji.
GADRewardedBasedVideoAd
API, w tym możliwość wczytywania więcej niż jednego
jedną reklamę z nagrodą.
Starsza wersja interfejsu API GADRewardedBasedVideoAd
została usunięta z pakietu SDK w wersji 8.0.0.
Wycofanie banerów inteligentnych i zastąpienie banerem adaptacyjnym
Banery inteligentne zostały wycofane za baner adaptacyjny. reklam. Banery adaptacyjne zapewniają wysoką skuteczność i elastyczność ustawianie szerokości reklamy. Jeśli nadal chcesz używać banerów o pełnej szerokości, jak widać w tym fragmencie kodu:
Swift
class ViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // Note: The safe area is not known until viewWillAppear. let adSize = getFullWidthAdaptiveAdSize() } func getFullWidthAdaptiveAdSize() -> GADAdSize { // Here safe area is taken into account, hence the view frame is used after the // view has been laid out. let frame = { () -> CGRect in if #available(iOS 11.0, *) { return view.frame.inset(by: view.safeAreaInsets) } else { return view.frame } }() return GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(frame.size.width) } }
Objective-C
@implementation ViewController - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // Note: The safe area is not known until viewWillAppear. GADAdSize adSize = [self getFullWidthAdaptiveAdSize]; } - (GADAdSize)getFullWidthAdaptiveAdSize { CGRect frame = self.view.frame; // Here safe area is taken into account, hence the view frame is used after // the view has been laid out. if (@available(iOS 11.0, *)) { frame = UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets); } return GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(frame.size.width); } @end
Opuść usuwanie wywołania zwrotnego aplikacji
Wywołanie zwrotne willLeaveApplication
dla wszystkich formatów reklam zostało
usunięte na rzecz
applicationDidEnterBackground:
.
oraz
sceneDidEnterBackground:
. Dzięki interfejsom API na poziomie systemu operacyjnego będziesz otrzymywać powiadomienia za każdym razem, gdy użytkownik opuści aplikację, niezależnie od tego
niezależnie od tego, czy wynika ono z interakcji z reklamą.
Pamiętaj, że wywołanie zwrotne willLeaveApplication
nigdy nie miało być
modułu obsługi kliknięć reklamy, a użycie tego wywołania zwrotnego do raportowania kliknięć nie
aby uzyskać dokładne dane. Na przykład kliknięcie ikony Informacja
ikona uruchamiająca zewnętrzną przeglądarkę wywołała wywołanie zwrotne, ale nie policzyła
kliknij.
Zmiana nazw zajęć
Tabela poniżej zawiera nazwy konkretnych klas, które zostały zmienione lub usunięte wersji 8. W skrócie:
- Nazwy wszystkich zajęć związanych z tematem
GADUnifiedNativeAd
zostały zmienione naGADNativeAd
GADRewardBasedVideoAd
,GADNativeExpressAdView
iGADInstreamAd
udostępnili zostały usunięte.- Wszystkie zajęcia z prefiksem
DFP
zostały zastąpione prefiksemGAM
.
Klasa 7.68.0 | Klasa 8.0.0 |
---|---|
DFPBannerView | GAMBannerView |
DFPBannerViewOptions | GAMBannerViewOptions |
DFPInterstitial | GAMInterstitialAd |
DFPRequest | GAMRequest |
GADRequestError | NSError |
GADUnifiedNativeAdView | GADNativeAdView |
Ujednolicona reklama natywna (GAD) | 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 |
Metody usunięte/zastąpione
W tabeli poniżej znajdziesz listę konkretnych zmian wprowadzonych w wersji 8. W skrócie:
- Wcześniej wycofane metody i właściwości zostały usunięte.
-willLeaveApplication:
metody przekazywania dostępu zostały usunięte ze wszystkich formatów.- Nazwa klasy sieci reklamowej została przeniesiona do właściwości
GADResponseInfo
. - Identyfikator urządzenia testowego został przeniesiony do sekcji
GADRequestConfiguration
usłudze.
Klasa 7.68.0 | 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 dotyczy wszystkich żądań reklam, a parametr stara właściwość testUrządzenia została ustawiona na żądanie. |
płeć | Usunięta | ||
urodziny | Usunięta | ||
+sdkVersion | GADMobileAds.sharedInstance |
||
-setBirthday |
Usunięta | ||
-setLocationWithDescription: | -setLocationWith |
||
-tagForChildDirectedTreatment: | [GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment] | ||
GADErrorCode | kGADError* | Błąd GAD* | Prefiks k jest usuwany ze wszystkich stałych kodu błędu.
|
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 | Użyj metody canPresentFrom |
|
Usunięta | |||
-init | -initWithAdUnitID: | ||
-setAdUnitID: | -initWithAdUnitID: | ||
adNetworkClassName | responseInfo |
||
-interstitialWill |
Usunięta | ||
Ujednolicona reklama natywna (GAD) | videoController | mediaContent.videoController | |
adNetworkClassName | responseInfo |