このページでは、移行にまつわる最新のバージョンと以前のバージョンに関する情報を説明します。
10 から v11 に移行する
最小デプロイ ターゲット
最小デプロイ ターゲットが iOS 12 に引き上げられました。
Xcode の最小バージョン
サポートされる Xcode の最小バージョンが 15.1 に引き上げられました。
iOS 12 での広告配信停止
Google Mobile Ads SDK バージョン 11.0.0 が iOS 13 を搭載するデバイスにのみ広告を配信 以上です。
GoogleAppMeasurement の依存関係を削除しました
バージョン 11.0.0 では、
GoogleAppMeasurement
は
削除されます。AdMob でユーザーに関する指標を切り替えるこの依存関係は、
廃止されました。宛先
AdMob で引き続きユーザーに関する指標を収集し
AdMob アプリを Firebase にリンクする
統合
Firebase 向け Google アナリティクス SDK を
説明します。
全画面広告の表示に関する変更
以下の変更は、各種広告フォーマットに影響します。
- アプリ起動
- インタースティシャル
- 特典
- リワード インタースティシャル
-canPresentFromRootViewController:error:
のビュー コントローラ パラメータと
-presentFromRootViewController:
は null 値許容です。nil が渡されると、広告は
ビュー コントローラ階層の最上位のビュー コントローラから表示されます。
削除されたメソッド
次のメソッドが削除されます。
v11.0.0 のタイプ | メソッド | メモ |
---|---|---|
GADAppOpenAd | load(withAdUnitID adUnitID: String, request: GADRequest?, orientation: UIInterfaceOrientation) |
代わりに load(withAdUnitID adUnitID: String, request: GADRequest?) を使用してください。 |
GADMediationBannerAdEventDelegate | willBackgroundApplication() |
代替機能はありません。 |
GADMediationInterstitialAdEventDelegate | willBackgroundApplication() |
代替機能はありません。 |
GADMediationNativeAdEventDelegate | willBackgroundApplication() |
代替機能はありません。 |
GADMediationRewardedAdEventDelegate | didRewardUser(with reward: GADAdReward) |
代わりに didRewardUser() を使用してください。 |
GADMediatedUnifiedNativeAdNotificationSource | mediatedNativeAdWillLeaveApplication(_ mediatedNativeAd: GADMediatedUnifiedNativeAd) |
代替機能はありません。 |
GADRequestConfiguration | setSameAppKeyEnabled(_ enabled: Bool) |
setPublisherFirstPartyIDEnabled(_ enabled: Bool) を代わりに使用してください。
|
tagForUnderAge(ofConsent underAgeOfConsent: Bool) |
代わりに tagForUnderAgeOfConsent プロパティを使用してください。 |
|
tag(forChildDirectedTreatment childDirectedTreatment: Bool) |
代わりに tagForChildDirectedTreatment プロパティを使用してください。 |
削除されたプロパティ
次のプロパティが削除されます。
v11.0.0 クラス | プロパティ | メモ |
---|---|---|
GADMediationAdConfiguration | hasUserLocation | 代替機能はありません。 |
userLatitude | ||
userLongitude | ||
userLocationAccuracyInMeters | ||
childDirectedTreatment | 代わりに GADMobileAds.sharedInstance.requestConfiguration.tagForChildDirectedTreatment を使用してください。 |
|
GADResponseInfo | adNetworkClassName | 代わりに loadedAdNetworkResponseInfo の adNetworkClassName を使用してください。 |
GADAdFormatUnknown を削除しました
GADAdFormatUnknown
を置き換えずに削除しました。
Logging SDK バージョンの変更
バージョン 11.0.0 では sdkVersion
が削除されました。Google Mobile Ads SDK のバージョンをロギングするには
versionNumber
を使用
してください。
バージョン 10.0.0
GADMobileAds.sharedInstance().sdkVersion
バージョン 11.0.0
GADGetStringFromVersionNumber(GADMobileAds.sharedInstance().versionNumber)
GADAdLoader エラー処理に関する変更
バージョン 11.0.0 以降では、GADAdLoader
は
delegate
リクエストされた広告タイプに準拠していません委任プロトコルを使用します。以前は、
失敗します
テスト動作の変更
表で、次の場合に更新された条件を確認してください。
プロパティは true
を返します。
クラス | プロパティ |
---|---|
GADMediationAdConfiguration | isTestRequest |
GADCustomEventRequest | isTesting |
v10.0.0 | v11.0.0 |
|
|
v9 から v10 に移行する
iOS 11 での広告配信が停止されます
Google Mobile Ads SDK バージョン 10.0.0 では、iOS 12 以降を搭載したデバイスにのみ広告が配信されます。
Google Mobile Ads SDK バージョン 10.0.0 へのアップグレードによって、iOS 11 と iOS 10 のデバイスでアプリが動作しなくなることはありませんが、広告は配信されなくなります。
アド マネージャー アプリ ID の要件
すべてのアド マネージャー アプリの Info.plist
で、アド マネージャー アプリ ID(ca-app-pub-################~##########
形式)が必要となります。詳しくは、Info.plist を更新するをご覧ください。
GoogleAppMeasurement.xcframework の要件
Google AppMeasurement.xcframework は、すべてのアド マネージャー アプリで必須になりました。Cocoapods または Swift Package Manager を使用して Google Mobile Ads SDK をインストールする場合は、追加のご対応は必要ありません。フレームワークを手動でインストールする場合は、手動ダウンロードに関する記事で詳細をご覧ください。
ビットコードによるビルドのサポートが終了しました
Google Mobile Ads SDK を統合するには、モバイルアプリでビットコードを無効にする必要があります。
削除された型
種類 | メモ |
---|---|
GADGender | 代替はありません。 |
GADMRewardBasedVideoAdNetworkAdapterProtocol | ネットワークの選択に関する記事に記載されているすべてのリワード メディエーション アダプタでは、これらのプロトコルの使用が 1 年以上停止しています。 メディエーションとカスタム イベントには、 GADMediationAdapter を使用してください。 |
GADMRewardBasedVideoAdNetworkConnectorProtocol |
削除されたプロパティ
次のプロパティは削除され、代替はありません。
v10.0.0 クラス | プロパティ |
---|---|
GADMediationAdRequest | userBirthday |
userGender | |
userHasLocation | |
userLatitude | |
userLongitude | |
userLocationAccuracyInMeters | |
userLocationDescription | |
GADCustomEventRequest | userHasLocation |
userLatitude | |
userLongitude | |
userLocationAccuracyInMeters | |
userLocationDescription |
v8 から v9 に移行する
iOS 10 での広告配信が停止されます
Google Mobile Ads SDK バージョン 9.0.0 がサポートする iOS バージョンは、iOS 11 以降です。
Google Mobile Ads SDK バージョン 9.0.0 にアップグレードしても、iOS 10 デバイスでアプリが動作しなくなることはありませんが、広告は配信されなくなります。
ステータスバー コントロールの適用強化
バージョン 9.0.0 以降では、全画面フォーマットの広告を表示する場合、その広告でステータスバーの表示を制御できるようにする必要があります。それができていない場合は、ログにエラー メッセージが表示されます。
アプリ内のビュー コントローラのレイアウトによっては、このレイアウトを実現するために変更する必要はありません。広告の rootViewController
に childViewControllerForStatusBarHidden
プロパティを設定する必要があるかどうかをご検討ください。
ad DidPresentFullScreenContent: の名前を adWillPresentFullScreenContent に変更します。
動作の変更はありません。デリゲート メソッドは、広告が表示される直前に呼び出されるため、新しいメソッド名がその機能をより適切に反映したものになります。
GADRequest の Location Settings API を削除
Google は位置情報を広告のターゲティングに使用しないため、- (void)setLocationWithLatitude:longitude:accuracy:
は GADRequest
から削除されました。必要に応じて、第三者 API を使用して第三者広告ネットワークに情報を提供します。
カスタム イベント インターフェースのサポート終了
カスタム イベントを使用すると、 Ad Manager メディエーションを使用するパブリッシャーは、サポートされている広告ネットワーク以外の広告ネットワーク向けに、ウォーターフォール メディエーションを追加できます。
カスタム イベント プロトコルはすべて非推奨になりました。代わりに、既存の GADMediationAdapter
プロトコルと GADMediationAdEventDelegate
プロトコルを使用して、同じ機能を実現できます。この変更により明確さが増し、以前は利用できなかったリワード広告とインタースクローラー広告用のカスタム イベントを作成できるようになりました。
API
以下の表は、バージョン 9.0.0 以降の使用が推奨される、カスタム イベント API に対応するメディエーション アダプタ API の一覧です。
v8 | v9 | |
---|---|---|
GADCustomEventBanner GADCustomEvent インタースティシャル GADCustomEventNativeAd |
GADMediationAdapter | GADMediationBannerAd GADMediation インタースティシャル Ad GADMediationInterscrollerAd GADMediationRewardedAd GADMediationNativeAd |
delegate
|
デリゲートは、GADMediationAdapter クラスの各読み込み関数の読み込み完了ハンドラによって返されます。
|
|
-init |
-init |
|
-requestBannerAd:parameter: |
-loadBannerForAdConfiguration: |
|
-requestInterstitialAdWith |
-loadInterstitialFor |
|
-requestNativeAdWithParameter:
|
-loadNativeAdFor |
|
なし | -loadInterscrollerAdFor |
|
なし | -loadRewardedAdFor |
|
-presentFromRootViewController:
|
-presentFromViewController: |
|
-handlesUserClicks |
-handlesUserClicks |
|
-handlesUserImpressions |
-handlesUserImpressions |
メソッドを委任する
以下の表は、バージョン 9.0.0 以降で使用される、カスタム イベント デリゲート メソッドに対応するメディエーション広告イベント デリゲート メソッドの一覧です。
v8 | v9 | |
---|---|---|
GADCustomEventBannerDelegate GADCustomEvent インタースティシャル Delegate GADCustomEventNativeAdDelegate |
GADMediationAdEventDelegate | GADMediationAd |
-customEventBanner:didReceiveAd: -customEventInterstitialDidReceiveAd:
|
広告の読み込みステータスは、GADMediationAdapter クラスの各読み込み関数の読み込み完了ハンドラに含まれます。
|
|
-customEventBanner:didFailAd: -customEventInterstitial:didFailAd:
|
||
-customEventBannerWasClicked: -customEventInterstitialWasClicked:
|
-reportClick |
|
-customEventBannerWill -customEventInterstitialWill
|
-willPresentFullScreenView |
|
-customEventBannerWill -customEventInterstitialWill
|
-willDismissFullScreenView |
|
-customEventBannerDid -customEventInterstitialDid
|
-didDismissFullScreenView |
|
-customEventBannerWill -customEventInterstitialWill
|
-willBackgroundApplication |
|
viewControllerFor |
-[GADMediationBannerAd view] |
削除または置換されたその他のメソッドと定数
メソッド、定数、プロパティの変更 | |
---|---|
kGAD- プレフィックス付き定数
|
削除しました。接頭辞 GAD- の付いた定数を使用します。
|
GADAdNetworkResponseInfo
|
credentials が削除されました。代わりに adUnitMapping を使用してください。 |
GAMRequest
|
GAMRequest の kGAMSimulatorID が非推奨になりました。代わりに GADRequestConfiguration の GADSimulatorID を使用してください。
|
GADCustomNativeAd
|
GADCustomNativeAd の mediaView が非推奨になりました。代わりに mediaContent を使用してください。 |
GoogleMobileAds の In-App Purchase API |
GoogleMobileAds の inAppPurchase API が削除されました。 |
v7 から v8 に移行する
Google 移动广告 SDK 8.0.0 版引入了一些重大更改, 对 API 进行了一些重命名和移除。
全屏广告格式 API 更新
从版本 8.0.0 开始,插页式广告和激励广告共用 屏幕广告样式,以便更加一致。这些新的全屏广告 API 有两个 与版本 7 全屏广告 API 的主要区别:
静态类方法
load
。之前加载/展示全屏广告的方法如下:
- 创建一个广告对象实例并保留对其的引用。
- 分配一个处理加载和显示回调的代理。
- 加载广告。
- 使用
isReady
检查广告是否已加载。 - 展示广告。
在版本 8 中,方法略有不同。加载回调不再 是委托的一部分。而是会作为
load
完成处理程序:- 对广告类调用静态加载方法,并提供加载完成 处理程序。
- 在加载完成回调函数中,保留对 返回。
- 分配一个处理显示回调的代理。
- 展示广告。
新方法具有以下优势:
- 您将不会再引用未加载的广告。
- 广告加载时,您无需保留广告对象。
一致的广告事件。
事件类型 现有 API v8 API 加载事件 GADInterstitialDelegate
或GADRewardedAdDelegate
GAMInterstitialAdLoadCompletionHandler
或GADRewardedAdLoadCompletionHandler
展示事件 GADFullScreenContentDelegate
以前,要监听任何广告事件,您需要注册一个 实现了
GADInterstitialDelegate
协议传递给插页式广告的委托属性,或者注册一个 实现了GADRewardedAdDelegate
协议传递给激励广告的委托属性,具体取决于 资源。此代理包含与加载和 广告的呈现生命周期。在版本 8 中,加载事件和展示事件是分开的。现在,您可以 注册
GADFullScreenContentDelegate
而无需设置单个 代理。广告加载事件(特定于每个 格式,移至加载方法中传递的单个加载完成处理程序。
插页式广告
加载广告
以下代码段展示了如何加载插页式广告并监听 事件。
v7
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; }]; }
展示广告
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"); } }
展示广告事件
以下代码段展示了如何在广告 呈现(成功或失败)以及何时关闭。
v7
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."); }
激励广告
加载广告
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(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; }
展示广告和处理奖励
激励广告要求您在用户获得奖励时处理该事件。包含
GADRewardedAd
API 的版本 7 时,您需要实现
rewardedAd:userDidEarnReward:
(作为 GADRewardedAdDelegate
协议的一部分)。
对于版本 8,您可以实现 GADUserDidEarnRewardHandler
,以便
。
v7
Swift
func showRewardedAd() { ... if rewardedAd.isReady { rewardedAd.present(fromRootViewController: self delegate:self) } else { print("Ad wasn't ready") } } /// Tells the delegate that the user earned a reward. func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarnReward: GADAdReward) { // TODO: Reward the user. }
Objective-C
- (void)showRewardedAd: { ... if (self.rewardedAd.isReady) { [self.rewardedAd presentFromRootViewController:self delegate:self]; } else { NSLog(@"Ad wasn't ready"); } } /// Tells the delegate that the user earned a reward. - (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward { // TODO: Reward the user. }
v8
Swift
func showRewardedAd() { ... if let ad = rewardedAd { ad.present(fromRootViewController: self, userDidEarnRewardHandler: { let reward = ad.adReward // TODO: Reward the user. } ) } else { print("Ad wasn't ready") } }
Objective-C
- (void)showRewardedAd: { ... if (self.rewardedAd) { [self.rewardedAd presentFromRootViewController:self userDidEarnRewardHandler:^ { GADAdReward *reward = self.rewardedAd.adReward; // TODO: Reward the user. }]; } else { NSLog(@"Ad wasn't ready"); } }
展示广告事件
借助 GADRewardedAd
API,您可以将 GADRewardedAdDelegate
传递给该方法。
。借助 GADRewardedAd
API,您可以设置
GADFullscreenContentDelegate
作为广告属性,然后再展示
。
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 = 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."); }
移除旧版 GADRewardedBasedVideoAd API
较新的
GADRewardedAd
API 于 2019 年 3 月首次推出,已成为
API 使用超过 18 个月。与旧版相比,新版 SDK 具备更多增强功能
GADRewardedBasedVideoAd
API,其中包括加载多个
每次观看激励广告
SDK 版本 8.0.0 中移除了旧版 GADRewardedBasedVideoAd
API。
弃用智能横幅广告,取而代之的是自适应横幅广告
智能横幅广告已被弃用 弃用自适应横幅广告 广告。自适应横幅广告可提供卓越的效果和更大的灵活性, 设置广告宽度。如果您希望继续使用全宽横幅广告 仍使用自适应横幅广告,如以下代码段所示:
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
移除退出应用回调
适用于所有广告格式的 willLeaveApplication
回调函数
取而代之的是
applicationDidEnterBackground:
和
sceneDidEnterBackground:
方法。如果使用操作系统级 API,无论用户何时离开您的应用,无论他们是什么原因,您都会收到通知
是否属于广告互动
请注意, willLeaveApplication
回调的设计初衷
广告点击处理程序,而依靠此回调来报告点击次数
都会得出准确的指标例如,点击“广告选项”
图标表示已启动外部浏览器调用了回调,但是未计入
点击。
重命名类
下表列出了在 2 中已更改或移除的具体类名称 版本 8。总结:
- 与
GADUnifiedNativeAd
相关的所有类均已重命名为GADNativeAd
。 GADRewardBasedVideoAd
、GADNativeExpressAdView
和GADInstreamAd
已移除。- 所有带
DFP
前缀的类均已替换为GAM
前缀。
v7.68.0 中的类 | 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 | 已移除 |
GADInterstitial | GADInterstitialAd |
GADNativeExpressAdView | 已移除 |
GADRewardBasedVideoAd | 已移除 |
GADInstreamAd | 已移除 |
GADInstreamAdView | 已移除 |
移除/替换的方法
下表列出了版本 8 中的具体更改。总结:
- 移除了之前已废弃的方法和属性。
- 移除了所有格式的
-willLeaveApplication:
委托方法。 - 广告联盟类名称已移至
GADResponseInfo
属性。 - 测试设备标识符已移至
GADRequestConfiguration
属性。
v7.68.0 中的类 | v7.68.0 中的 API | v8.0.0 中的 API | 备注 |
---|---|---|---|
GADMobileAds | +configureWithApplicationID: | -startWithCompletionHandler: | 现在,应用 ID 已在 Info.plist 中设置。 |
+disableAutomatedInApp |
-disableAutomatedInApp |
||
+disableSDKCrashReporting | -disableSDKCrashReporting | ||
GADRequest | testDevices | GADRequestConfiguration |
testDeviceIdentifiers 属性适用于所有广告请求,而 旧版 testDevices 属性是按请求设置的。 |
性别 | 已移除 | ||
生日 | 已移除 | ||
+sdkVersion | GADMobileAds.sharedInstance |
||
-setBirthday |
已移除 | ||
-setLocationWithDescription: | -setLocationWith |
||
-tagForChildDirectedTreatment: | [GADMobileAds.sharedInstance.requestConfiguration tagForChildDirectedTreatment] | ||
GADErrorCode | kGADError* | GADError* | 已从所有错误代码常量中移除 k 前缀。
|
GADBannerView | hasAutoRefreshed | autoloadEnabled | |
inAppPurchaseDelegate | 已移除 | ||
mediatedAdView | 已移除 | ||
adNetworkClassName | responseInfo |
||
DFPBannerView | -setValidAdSizesWithSizes: | -setValidAdSizes: | |
DFPBannerViewOptions | -adSizeDelegate | 已移除 | |
GADBannerViewDelegate | -adViewDidReceiveAd: | -bannerViewDidReceiveAd: | |
-adView:didFailToReceive |
-bannerView:didFailToReceive |
||
-adViewWillPresentScreen: | -bannerViewWillPresentScreen: | ||
-adViewWillDismissScreen: | -bannerViewWillDismissScreen: | ||
-adViewDidDismissScreen: | -bannerViewDidDismissScreen: | ||
-adViewWillLeaveApplication: | 已移除 | ||
GADNativeCustomTemplateAd | templateID | GADCustomNativeAd.formatID | |
-performClickOnAssetWithKey: |
-performClickOnAssetWithKey: | ||
GADNativeAdImageAd |
preferredImageOrientation | GADNativeAdMediaAdOptions |
|
GADInterstitial | inAppPurchaseDelegate | 已移除 | |
isReady | 已移除 | 请改用 canPresentFrom |
|
hasBeenUsed | 已移除 | ||
-init | -initWithAdUnitID: | ||
-setAdUnitID: | -initWithAdUnitID: | ||
adNetworkClassName | responseInfo |
||
-interstitialWill |
已移除 | ||
GADUnifiedNativeAd | videoController | mediaContent.videoController | |
adNetworkClassName | responseInfo |