Auf dieser Seite finden Sie Informationen zu Migrationen für die aktuelle und die vorherige Version des Google Mobile Ads SDK für iOS. Version 11.0.0 wird voraussichtlich im Januar 2024 veröffentlicht.
Von der SDK-Version 10 zur Version 11 migrieren
Minimales Bereitstellungsziel
Das Mindestbereitstellungsziel wurde auf iOS 12 erhöht.
Mindestversion von Xcode
Die unterstützte Mindestversion von Xcode wurde auf 15.1 erhöht.
Unter iOS 12 werden keine Anzeigen mehr ausgeliefert
Mit Version 11.0.0 des Google Mobile Ads SDK werden Anzeigen nur auf Geräten mit iOS 13 ausgeliefert. und höher.
GoogleAppMeasurement-Abhängigkeit entfernt
In Version 11.0.0 ist die Abhängigkeit von
GoogleAppMeasurement
wurde
entfernt. Diese Abhängigkeit, die die Ein/Aus-Schaltfläche für Nutzermesswerte in AdMob ermöglicht hat, wird
eingestellt. Bis
Nutzermesswerte in AdMob weiter zu erfassen,
verknüpfen Sie Ihre AdMob-App mit Firebase und
Integrieren des
Google Analytics for Firebase SDK in
für Ihre App.
Änderungen an der Vollbildanzeigendarstellung
Die folgenden Änderungen wirken sich auf die verschiedenen Anzeigenformate aus:
- App-Start-Anzeige
- Interstitial
- Verfügbar
- Interstitial mit Prämie
Der View-Controller-Parameter in -canPresentFromRootViewController:error:
und
Für -presentFromRootViewController:
sind Nullwerte zulässig. Wird „nil“ übergeben, wird die Anzeige
werden vom obersten Ansichts-Controller in der Ansichts-Controller-Hierarchie dargestellt.
Entfernte Methoden
Die folgenden Methoden wurden entfernt.
v11.0.0-Typ | Methode | Hinweise |
---|---|---|
GADAppOpenAd | load(withAdUnitID adUnitID: String, request: GADRequest?, orientation: UIInterfaceOrientation) |
Verwenden Sie stattdessen load(withAdUnitID adUnitID: String, request: GADRequest?) . |
GADMediationBannerAdEventDelegate | willBackgroundApplication() |
Kein Ersatz. |
GADMediationInterstitialAdEventDelegate | willBackgroundApplication() |
Kein Ersatz. |
GADMediationNativeAdEventDelegate | willBackgroundApplication() |
Kein Ersatz. |
GADMediationRewardedAdEventDelegate | didRewardUser(with reward: GADAdReward) |
Verwenden Sie stattdessen didRewardUser() . |
GADMediatedUnifiedNativeAdNotificationSource | mediatedNativeAdWillLeaveApplication(_ mediatedNativeAd: GADMediatedUnifiedNativeAd) |
Kein Ersatz. |
GADRequestConfiguration | setSameAppKeyEnabled(_ enabled: Bool) |
Verwenden Sie stattdessen setPublisherFirstPartyIDEnabled(_ enabled: Bool) . |
tagForUnderAge(ofConsent underAgeOfConsent: Bool) |
Verwende stattdessen die Property tagForUnderAgeOfConsent . |
|
tag(forChildDirectedTreatment childDirectedTreatment: Bool) |
Verwende stattdessen die Property tagForChildDirectedTreatment . |
Properties entfernt
Die folgenden Eigenschaften wurden entfernt.
v11.0.0-Klasse | Attribut | Hinweise |
---|---|---|
GADMediationAdConfiguration | hasUserLocation | Kein Ersatz. |
userLatitude | ||
userLongitude | ||
userLocationAccuracyInMeters | ||
childDirectedTreatment | Verwenden Sie stattdessen GADMobileAds.sharedInstance.requestConfiguration.tagForChildDirectedTreatment . |
|
GADResponseInfo | adNetworkClassName | Verwende stattdessen adNetworkClassName von loadedAdNetworkResponseInfo . |
GADAdFormatUnknown entfernt
GADAdFormatUnknown
wurde ohne Ersatz entfernt.
Änderungen an der Logging-SDK-Version
In Version 11.0.0 wird sdkVersion
entfernt. Um die Version des Google Mobile Ads SDK zu protokollieren,
versionNumber
verwenden
.
Version 10.0.0
GADMobileAds.sharedInstance().sdkVersion
Version 11.0.0
GADGetStringFromVersionNumber(GADMobileAds.sharedInstance().versionNumber)
Änderungen an der Fehlerbehandlung von GADAdLoader
Ab Version 11.0.0 sendet GADAdLoader
keine Anzeigenanfrage, wenn
delegate
den angeforderten Anzeigentypen nicht entspricht Delegat-Protokoll. Zuvor wurden
nachdem die Anzeigenanfrage gestellt wurde.
Änderungen am Testverhalten
In der Tabelle sind die aktualisierten Bedingungen für Folgendes aufgeführt:
Properties geben true
zurück.
Klasse | Attribut |
---|---|
GADMediationAdConfiguration | isTestRequest |
GADCustomEventRequest | isTesting |
v10.0.0 | v11.0.0 |
|
|
Von Version 9 zu Version 10 migrieren
广告停止在 iOS 11 设备上投放
Google 移动广告 SDK 版本 10.0.0 仅在搭载 iOS 12 及更高版本的设备上投放广告。
升级到 Google 移动广告 SDK 版本 10.0.0 不会影响您的应用在 iOS 11 和 iOS 10 设备上的行为,但广告不会在这些设备上投放。
不再支持使用位码构建
现在,您必须在移动应用中停用位码,才能集成 Google 移动广告 SDK。
已移除的类型
类型 | 备注 |
---|---|
GADGender | 无替代项。 |
GADMRewardBasedVideoAdNetworkAdapterProtocol | 选择广告联盟一文中列出的所有激励广告中介适配器已停止使用这些协议超过一年了。将 GADMediationAdapter 用于中介和自定义事件。 |
GADMRewardBasedVideoAdNetworkConnectorProtocol |
已移除的属性
以下属性已移除且无替代项。
v10.0.0 中的类 | 媒体资源 |
---|---|
GADMediationAdRequest | userBirthday |
userGender | |
userHasLocation | |
userLatitude | |
userLongitude | |
userLocationAccuracyInMeters | |
userLocationDescription | |
GADCustomEventRequest | userHasLocation |
userLatitude | |
userLongitude | |
userLocationAccuracyInMeters | |
userLocationDescription |
Von Version 8 zu Version 9 migrieren
Unter iOS 10 werden keine Anzeigen mehr ausgeliefert
iOS 11 ist die mindestens erforderliche iOS-Version, die vom Google Mobile Ads SDK 9.0.0 unterstützt wird.
Wenn Sie ein Upgrade auf Version 9.0.0 des Google Mobile Ads SDK ausführen, funktioniert Ihre App auf iOS 10-Geräten zwar weiterhin, auf diesen Geräten werden jedoch keine Anzeigen ausgeliefert.
Strengere Erzwingung von Steuerelementen in der Statusleiste
Ab Version 9.0.0 sollte bei der Präsentation von Vollbildanzeigen in Ihrer App sichergestellt sein, dass durch die Anzeigen die Darstellung der Statusleiste gesteuert werden kann. Andernfalls wird in den Protokollen eine Fehlermeldung angezeigt.
Abhängig vom jeweiligen Layout der Ansichts-Controller in Ihrer App müssen Sie möglicherweise keine Änderungen vornehmen, um dies zu gewährleisten. Sie sollten die Property childViewControllerForStatusBarHidden
in der rootViewController
der Anzeige festlegen.
Benennen Sie "ad DidPresentFullScreenContent:" in "adWillPresentFullScreenContent" um:
Es gibt keine Verhaltensänderung. Die Delegatmethode wird aufgerufen, bevor die Anzeige präsentiert werden soll. Der neue Methodenname spiegelt daher die Funktionalität besser wider.
API zur Standorteinstellung von GADRequest entfernen
- (void)setLocationWithLatitude:longitude:accuracy:
wurde aus GADRequest
gelöscht, da Google Standortdaten nicht für die Anzeigenausrichtung verwendet. Nutzen Sie bei Bedarf APIs von Drittanbietern, um die Informationen für Drittanbieter-Werbenetzwerke bereitzustellen.
Einstellung von Benutzeroberflächen für benutzerdefinierte Ereignisse
Mithilfe von benutzerdefinierten Ereignissen können Publisher, die die AdMob Vermittlung verwenden, die abfolgebasierte Vermittlung für ein Werbenetzwerk hinzufügen, das nicht zu den unterstützten Werbenetzwerken gehört.
Alle benutzerdefinierten Ereignisprotokolle wurden eingestellt. Verwenden Sie stattdessen die vorhandenen Protokolle GADMediationAdapter
und GADMediationAdEventDelegate
, um dieselben Funktionen zu erreichen. Durch diese Änderung wird die Verständlichkeit verbessert und Sie können benutzerdefinierte Ereignisse für Anzeigen mit Prämie und Interscroller-Anzeigen erstellen, die zuvor nicht verfügbar waren.
APIs
In der folgenden Tabelle sind die entsprechenden APIs für den Vermittlungsadapter für benutzerdefinierte Ereignis-APIs aufgeführt, die ab Version 9.0.0 verwendet werden sollten.
v8 | v9 | |
---|---|---|
GADCustomEventBanner GADCustomEventInterstitial GADCustomEventNativeAd |
GADMediationAdapter | GADMediationBannerAd GADMediationInterstitialAd GADMediationInterscrollerAd GADMediationPrämieAd GADMediationNativeAd |
delegate
|
Delegate wird vom Handler für den Ladeabschluss aller Ladefunktionen der Klasse GADMediationAdapter zurückgegeben.
|
|
-init |
-init |
|
-requestBannerAd:parameter: |
-loadBannerForAdConfiguration: |
|
-requestInterstitialAdWith |
-loadInterstitialFor |
|
-requestNativeAdWithParameter:
|
-loadNativeAdFor |
|
– | -loadInterscrollerAdFor |
|
– | -loadRewardedAdFor |
|
-presentFromRootViewController:
|
-presentFromViewController: |
|
-handlesUserClicks |
-handlesUserClicks |
|
-handlesUserImpressions |
-handlesUserImpressions |
Methoden delegieren
In der folgenden Tabelle sind die Delegationsmethoden von Vermittlungsanzeigenereignissen für benutzerdefinierte Ereignisse aufgeführt, die ab Version 9.0.0 verwendet werden sollten.
v8 | v9 | |
---|---|---|
GADCustomEventBannerDelegate GADCustomEventInterstitialDelegate GADCustomEventNativeAdDelegate |
GADMediationAdEventDelegate | GADMediationAd |
-customEventBanner:didReceiveAd: -customEventInterstitialDidReceiveAd:
|
Der Ladestatus von Anzeigen ist im Handler für den Ladevorgang der einzelnen Ladefunktionen in der Klasse GADMediationAdapter enthalten.
|
|
-customEventBanner:didFailAd: -customEventInterstitial:didFailAd:
|
||
-customEventBannerWasClicked: -customEventInterstitialWasClicked:
|
-reportClick |
|
-customEventBannerWill -customEventInterstitialWill
|
-willPresentFullScreenView |
|
-customEventBannerWill -customEventInterstitialWill
|
-willDismissFullScreenView |
|
-customEventBannerDid -customEventInterstitialDid
|
-didDismissFullScreenView |
|
-customEventBannerWill -customEventInterstitialWill
|
-willBackgroundApplication |
|
viewControllerFor |
-[GADMediationBannerAd view] |
Andere entfernte/ersetzte Methoden und Konstanten
Änderungen an Methode, Konstante oder Eigenschaft | |
---|---|
kGAD- -Präfix-Konstanten
|
Entfernt. Verwenden Sie GAD- -Konstanten.
|
GADAdNetworkResponseInfo
|
credentials wurden entfernt. Verwenden Sie stattdessen adUnitMapping .
|
GAMRequest
|
kGAMSimulatorID in GAMRequest wurde eingestellt.
Verwenden Sie stattdessen GADSimulatorID in GADRequestConfiguration .
|
GADCustomNativeAd
|
mediaView in GADCustomNativeAd wurde eingestellt.
Verwenden Sie stattdessen mediaContent .
|
APIs für In-App Purchases in GoogleMobileAds |
inAppPurchase APIs in GoogleMobileAds wurden entfernt.
|
Von Version 7 zu Version 8 migrieren
Version 8.0.0 des Google Mobile Ads SDK bringt einige wichtige Änderungen mit APIs umbenannt und entfernt werden.
Aktualisierungen der API für das Vollbildformat
Ab Version 8.0.0 haben Interstitial-Anzeigen und Anzeigen mit Prämie eine allgemeine, vollständige für mehr Konsistenz. Diese neuen APIs für Vollbildanzeigen haben zwei Hauptunterschiede zu den APIs für Vollbildanzeigen der Version 7:
Methode
load
der statischen Klasse.Die bisherige Vorgehensweise zum Laden/Einblenden einer Vollbildanzeige lautet wie folgt:
- Erstellen Sie eine Anzeigenobjektinstanz und speichern Sie einen Verweis darauf.
- Weisen Sie einen Bevollmächtigten zu, der Last- und Anzeigerückrufe verarbeitet.
- Laden Sie eine Anzeige.
- Prüfen Sie mit
isReady
, ob die Anzeige geladen wird. - Anzeige einblenden
In Version 8 ändert sich der Ansatz geringfügig. Lade-Callbacks werden nicht mehr Teil eines Bevollmächtigten ist. Stattdessen werden sie an die Methode
load
Abschluss-Handler:- Rufen Sie eine statische Lademethode für die Anzeigenklasse auf und stellen Sie einen Abschluss des Ladevorgangs bereit. -Handler.
- Behalten Sie im Rückruf für den Abschluss des Ladevorgangs einen Verweis auf die geladene Anzeige bei, die zurückgegeben.
- Weisen Sie einen Bevollmächtigten zu, der Callbacks für die Show verarbeitet.
- Anzeige einblenden
Der neue Ansatz bietet folgende Vorteile:
- Sie haben niemals einen Verweis auf eine Anzeige, die nicht geladen ist.
- Sie müssen sich nicht an einem Anzeigenobjekt festhalten, während es geladen wird.
Einheitliche Anzeigenereignisse:
Ereignistyp Vorhandene API Version 8 API Ladeereignisse GADInterstitialDelegate
oderGADRewardedAdDelegate
GADInterstitialAdLoadCompletionHandler
oderGADRewardedAdLoadCompletionHandler
Präsentationsveranstaltungen GADFullScreenContentDelegate
Um auf Anzeigenereignisse zu warten, mussten Sie bisher eine Klasse registrieren, die implementiert die
GADInterstitialDelegate
an die Delegat-Property eines Interstitials übergeben oder eine Klasse registrieren, implementiert dieGADRewardedAdDelegate
Protokoll an die delegierte Property einer Anzeige mit Prämie, je nachdem, die Sie verwenden. Derselbe Bevollmächtigte verfügte über Methoden, die sich sowohl auf das Laden als Lebenszyklus der Präsentation einer Anzeige.In Version 8 sind Lade- und Präsentationsereignisse getrennt. Sie können jetzt registrieren
GADFullScreenContentDelegate
vor der Anzeigenschaltung erfolgen, anstatt einen einzelnen vor dem Laden der Anzeige delegieren. Ladeereignisse von Anzeigen, die für das jeweilige Format, wechseln Sie zu einem einzelnen Ladeabschluss-Handler, der an die Lademethode übergeben wird.
Interstitial
Anzeige laden
Die Code-Snippets unten zeigen, wie Sie eine Interstitial-Anzeige laden und auf Ereignisse ausgelöst, wenn die Anzeige erfolgreich oder nicht geladen werden kann.
v7
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADInterstitialDelegate { var interstitial: GADInterstitial! override func viewDidLoad() { super.viewDidLoad() interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/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; }]; }
Displayanzeige
v7
Swift
func showInterstitial() { ... if interstitial.isReady { interstitial.present(fromRootViewController: self) } else { print("Ad wasn't ready") } }
Objective-C
- (void)showInterstitial: { ... if (self.interstitial.isReady) { [self.interstitial presentFromRootViewController:self]; } else { NSLog(@"Ad wasn't ready"); } }
v8
Swift
func showInterstitial() { ... if let ad = interstitial { ad.present(fromRootViewController: self) } else { print("Ad wasn't ready") } }
Objective-C
- (void)showInterstitial: { ... if (self.interstitial) { [self.interstitial presentFromRootViewController:self]; } else { NSLog(@"Ad wasn't ready"); } }
Ereignisse für Präsentationen
Die Code-Snippets unten zeigen, wie Rückrufe gehandhabt werden, wenn die Anzeige präsentiert (erfolgreich oder erfolglos) und wenn sie geschlossen wird.
v7
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."); }
Verfügbar
Anzeige laden
v7
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADRewardedAdDelegate { /// The rewarded ad. var rewardedAd: GADRewardedAd? override func viewDidLoad() { super.viewDidLoad() rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313") rewardedAd.delegate = self rewardedAd?.load(GADRequest()) { error in if let error = error { print("Rewarded ad failed to load with error: \(error.localizedDescription)") } else { print("Rewarded ad loaded.") } } } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController ()@property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"]; self.rewardedAd.delegate = self; GADRequest *request = [GADRequest request]; [self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); } else { NSLog(@"Rewarded ad loaded."); } }]; }
v8
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADFullScreenContentDelegate { /// The rewarded ad. var rewardedAd: GADRewardedAd? override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() GADRewardedAd.load(withAdUnitID: "ca-app-pub-8123415297019784/9501821136", request: request, completionHandler: { (ad, error) in if let error = error { print("Rewarded ad failed to load with error: \(error.localizedDescription)") return } self.rewardedAd = ad self.rewardedAd?.fullScreenContentDelegate = self } ) } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController ()@property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); self.rewardedAd.fullScreenContentDelegate = self; }
Displayanzeige und Prämie erstellen
Bei Anzeigen mit Prämie müssen Sie das Ereignis bearbeiten, wenn ein Nutzer eine Prämie erhält. Mit
Version 7 der GADRewardedAd
API, die Sie implementieren,
rewardedAd:userDidEarnReward:
als Teil des GADRewardedAdDelegate
-Protokolls.
Bei Version 8 implementieren Sie GADUserDidEarnRewardHandler
, um
um die Anzeige zu präsentieren.
v7
Swift
func showRewardedAd() { ... if rewardedAd.isReady { rewardedAd.present(fromRootViewController: self delegate:self) } else { print("Ad wasn't ready") } } /// Tells the delegate that the user earned a reward. func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarnReward: GADAdReward) { // TODO: Reward the user. }
Objective-C
- (void)showRewardedAd: { ... if (self.rewardedAd.isReady) { [self.rewardedAd presentFromRootViewController:self delegate:self]; } else { NSLog(@"Ad wasn't ready"); } } /// Tells the delegate that the user earned a reward. - (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward { // TODO: Reward the user. }
v8
Swift
func showRewardedAd() { ... if let ad = rewardedAd { ad.present(fromRootViewController: self, userDidEarnRewardHandler: { let reward = ad.adReward // TODO: Reward the user. } ) } else { print("Ad wasn't ready") } }
Objective-C
- (void)showRewardedAd: { ... if (self.rewardedAd) { [self.rewardedAd presentFromRootViewController:self userDidEarnRewardHandler:^ { GADAdReward *reward = self.rewardedAd.adReward; // TODO: Reward the user. }]; } else { NSLog(@"Ad wasn't ready"); } }
Ereignisse für Präsentationen
Mit der GADRewardedAd
API übergeben Sie eine GADRewardedAdDelegate
an die Methode
der die Anzeige präsentiert. Mit der GADRewardedAd
API legen Sie Folgendes fest:
„GADFullscreenContentDelegate
“ als Property in der Anzeige zu verwenden, bevor die
Anzeige.
v7
Swift
func showRewardedAd() { ... if rewardedAd.isReady { rewardedAd.present(fromRootViewController: self delegate:self) } else { print("Ad wasn't ready") } } /// Tells the delegate that the rewarded ad was presented. func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) { print("Rewarded ad presented.") } /// Tells the delegate that the rewarded ad was dismissed. func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) { print("Rewarded ad dismissed.") } /// Tells the delegate that the rewarded ad failed to present. func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) { print("Rewarded ad failed to present with error: \(error.localizedDescription).") }
Objective-C
- (void)showRewardedAd: { ... if (self.rewardedAd.isReady) { [self.rewardedAd presentFromRootViewController:self delegate:self]; } else { NSLog(@"Ad wasn't ready"); } } /// Tells the delegate that the rewarded ad was presented. - (void)rewardedAdDidPresent:(GADRewardedAd *)rewardedAd { NSLog(@"Rewarded ad presented."); } /// Tells the delegate that the rewarded ad failed to present. - (void)rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error { NSLog(@"Rewarded ad failed to present with error: %@", [error localizedDescription]); } /// Tells the delegate that the rewarded ad was dismissed. - (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd { NSLog(@"Rewarded ad dismissed."); }
v8
Swift
override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() GADRewardedAd.load(withAdUnitID: "ca-app-pub-8123415297019784/9501821136", request: request, completionHandler: { (ad, error) in if let error = error { print(error.localizedDescription) return } self.rewardedAd = ad self.rewardedAd?.fullScreenContentDelegate = self } ) } /// Tells the delegate that the rewarded ad was presented. func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Rewarded ad presented.") } /// Tells the delegate that the rewarded ad was dismissed. func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Rewarded ad dismissed.") } /// Tells the delegate that the rewarded ad failed to present. func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) { print("Rewarded ad failed to present with error: \(error.localizedDescription).") }
Objective-C
- (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); self.rewardedAd.fullScreenContentDelegate = self; } /// Tells the delegate that the rewarded ad was presented. - (void)adDidPresentFullScreenContent:(id)ad { NSLog(@"Rewarded ad presented."); } /// Tells the delegate that the rewarded ad failed to present. - (void)ad:(id )ad didFailToPresentFullScreenContentWithError:(NSError *)error { NSLog(@"Rewarded ad failed to present with error: %@", [error localizedDescription]); } /// Tells the delegate that the rewarded ad was dismissed. - (void)adDidDismissFullScreenContent:(id )ad { NSLog(@"Rewarded ad dismissed."); }
Entfernung der alten GADRewardBasedVideoAd API
Das neuere
GADRewardedAd
Die API wurde im März 2019 eingeführt und ist die bevorzugte Version mit Prämie
API seit über 18 Monaten. Es wurde im Vergleich zur Legacy-Version besser verbessert.
GADRewardedBasedVideoAd
API, einschließlich der Möglichkeit, mehrere
jeweils eine Anzeige mit Prämie.
Die alte GADRewardedBasedVideoAd
API wurde in der SDK-Version 8.0.0 entfernt.
Einstellung von Smart-Bannern durch adaptive Banner
Smart-Banneranzeigen wurden eingestellt zugunsten eines adaptiven Banners Anzeigen. Adaptive Banner bieten eine bessere Leistung und mehr Flexibilität bei die Anzeigenbreite festlegen. Wenn Sie weiterhin Banner mit voller Breite verwenden möchten, kann dennoch mit adaptiven Bannern erfolgen, wie im folgenden Code-Snippet gezeigt:
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
Entfernung des App-Callbacks verlassen
Der willLeaveApplication
-Callback für alle Anzeigenformate wurde
zugunsten der
applicationDidEnterBackground:
und
sceneDidEnterBackground:
. Durch die Verwendung von APIs auf Betriebssystemebene wirst du jedes Mal benachrichtigt, wenn Nutzer deine App verlassen, unabhängig von
ob auf eine Anzeigeninteraktion zurückzuführen ist oder nicht.
Beachte, dass der willLeaveApplication
-Callback nie dazu gedacht war,
einen Anzeigenklick-Handler. Durch die Verwendung dieses Callbacks zum Melden von Klicks konnten keine
eine genaue Metrik erzeugen. Ein Klick auf das Symbol „Datenschutzinfo“
Symbol, das einen externen Browser startet, um den Callback aufzurufen, aber keinen
klicken.
Klassen umbenennen
In der folgenden Tabelle sind bestimmte Klassennamen aufgeführt, die in Version 8. Zusammenfassung:
- Alle zu
GADUnifiedNativeAd
verwandten Kurse wurden umbenannt inGADNativeAd
. GADRewardBasedVideoAd
,GADNativeExpressAdView
undGADInstreamAd
haben entfernt wurden.- Alle Klassen mit dem Präfix
DFP
wurden durch das PräfixGAM
ersetzt.
v7.68.0-Klasse | v8.0.0-Klasse |
---|---|
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 | Entfernt |
GADInterstitial | GADInterstitialAd |
GADNativeExpressAdView | Entfernt |
GADRewardBasedVideoAd | Entfernt |
GADInstreamAd | Entfernt |
GADInstreamAdView | Entfernt |
Entfernte/ersetzte Methoden
In der folgenden Tabelle sind die spezifischen Änderungen in Version 8 aufgeführt. Zusammenfassung:
- Zuvor eingestellte Methoden und Attribute wurden entfernt.
-willLeaveApplication:
Delegierte-Methoden wurden für alle Formate entfernt.- Der Name der Werbenetzwerkklasse wurde in das Attribut
GADResponseInfo
verschoben. - Die Testgeräte-ID wurde in den
GADRequestConfiguration
verschoben Property.
v7.68.0-Klasse | Version 7.68.0 API | API-Version 8.0.0 | Hinweise |
---|---|---|---|
GADMobileAds | +configureWithApplicationID: | -startWithCompletionHandler: | Die App-ID wird jetzt in der Info.plist-Datei festgelegt. |
+disableAutomatedInApp |
-disableAutomatedInApp |
||
+disableSDKCrashReporting | -disableSDKCrashReporting | ||
GADRequest | testDevices | GADRequestConfiguration |
Die Eigenschaft testDeviceIdentifiers wird auf alle Anzeigenanfragen angewendet, während die Eigenschaft alte testdevices-Property wurde pro Anfrage festgelegt. |
gender | Entfernt | ||
Geburtstag | Entfernt | ||
+sdkVersion | GADMobileAds.sharedInstance |
||
-setBirthday |
Entfernt | ||
-setLocationWithDescription: | -setLocationWith |
||
-tagForChildDirectedTreatment: | [GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment] | ||
GADErrorCode | kGADError* | GADError* | Das Präfix k wird aus allen Fehlercodekonstanten gelöscht.
|
GADBannerView | hasAutoRefreshed | autoloadEnabled | |
inAppPurchaseDelegate | Entfernt | ||
mediatedAdView | Entfernt | ||
adNetworkClassName | responseInfo |
||
DFPBannerView | -setValidAdSizesWithSizes: | -setValidAdSizes: | |
DFPBannerViewOptions | -adSizeDelegate | Entfernt | |
GADBannerViewDelegate | -adViewDidReceiveAd: | -bannerViewDidReceiveAd: | |
-adView:didFailToReceive |
-bannerView:didFailToReceive |
||
-adViewWillPresentScreen: | -bannerViewWillPresentScreen: | ||
-adViewWillDismissScreen: | -bannerViewWillDismissScreen: | ||
-adViewDidDismissScreen: | -bannerViewDidDismissScreen: | ||
-adViewWillLeaveApplication: | Entfernt | ||
GADNativeCustomTemplateAd | templateID | GADCustomNativeAd.formatID | |
-performClickOnAssetWithKey: |
-performClickOnAssetWithKey: | ||
GADNativeAdImageAd |
preferredImageOrientation | GADNativeAdMediaAdOptions |
|
GADInterstitial | inAppPurchaseDelegate | Entfernt | |
isReady | Entfernt | Verwenden Sie stattdessen canPresentFrom |
|
hasBeenUsed | Entfernt | ||
-init | -initWithAdUnitID: | ||
-setAdUnitID: | -initWithAdUnitID: | ||
adNetworkClassName | responseInfo |
||
-interstitialWill |
Entfernt | ||
GADUnifiedNativeAd | videoController | mediaContent.videoController | |
adNetworkClassName | responseInfo |