この問題を解決するために、AdMob は「構成可能なアダプタの初期化」機能を提供しています。この機能を使用して、最初の広告のインプレッションでどのアダプタを初期化するかを管理し、そのインプレッションの遅延を短縮することができます。
このガイドでは、「構成可能なアダプタの初期化」機能の以下の点について説明します。
前提条件
- Google Mobile Ads SDK 13.4.0 以降をインポートしていること。
- Google Mobile Ads SDK を設定していること。
この機能を有効にするには、Objective-C では
#import <GoogleMobileAds/GoogleMobileAds_Beta.h>、Swift ではimport GoogleMobileAds_Privateを追加します。Swift
import GoogleMobileAds import GoogleMobileAds_PrivateObjective-C
#import <GoogleMobileAds/GoogleMobileAds.h> #import <GoogleMobileAds/GoogleMobileAds_Beta.h>
アダプタ構成を作成する
アダプタ初期化構成によって、必要なアダプタのみを初期化するよう Google Mobile Ads SDK に指示します。これにより、不要なアダプタが最初の広告リクエストをブロックするのを防ぎ、コンピューティング リソースを節約して、最初の広告のインプレッションの遅延を大幅に短縮することができます。
アプリのパフォーマンスを最適化するには、アダプタ初期化構成を作成する際に以下の戦略を検討してください。
特定の広告フォーマットまたは広告ユニットを優先させる
アダプタ初期化構成で特定の広告フォーマットまたは広告ユニットを宣言することで、アプリ起動時広告など、起動直後に広告を表示するアプリのパフォーマンスを改善できます。
次の例で作成するアダプタ初期化構成では、タイムアウトを 5 秒に設定し、特定のアプリ起動時広告ユニットに対して必要なメディエーション アダプタのみを初期化します。
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdUnitIDs = [adUnitID]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.includedAdUnitIDs = [NSSet setWithArray:@[ kTestAdUnitID ]];
adapterConfig.initializationTimeout = 5.0;
次の例で作成するアダプタ初期化構成では、タイムアウトを 5 秒に設定し、すべてのアプリ起動時広告に対して必要なメディエーション アダプタのみを初期化します。
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdFormats = [AdFormat.appOpen.rawValue as NSNumber]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.includedAdFormats = [NSSet setWithArray:@[ @(GADAdFormatAppOpen) ]];
adapterConfig.initializationTimeout = 5.0;
特定のメディエーション アダプタを初期化する
最初の広告のインプレッションに通常対応するメディエーション パートナーを正確に把握している場合は、アダプタ初期化構成でアダプタのクラス名を指定することで、その特定のアダプタのみを初期化できます。この方法を、明示的に初期化対象外のアダプタをスキップして Google Mobile Ads SDK のタイムアウトを設定する方法と組み合わせて、オークション中に残りの初期化対象外のアダプタを待機することを防ぎます。
次の例で作成するアダプタ初期化構成では、特定のメディエーション アダプタを初期化し、タイムアウトを 5 秒に設定します。
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdapterClasses = [adapterClassName]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.includedAdapterClasses = [NSSet setWithArray:@[ kTestAdapterClassName ]];
adapterConfig.initializationTimeout = 5.0;
特定のメディエーション アダプタを除外する
特定のメディエーション アダプタの遅延が常に高い場合は、そのアダプタを除外して後で初期化することができます。
次の例で作成するアダプタ初期化構成では、特定のアダプタを初期化から除外し、タイムアウトを 5 秒に設定します。
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.excludedAdapterClasses = [adapterClassName]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.excludedAdapterClasses = [NSSet setWithArray:@[ kTestAdapterClassName ]];
adapterConfig.initializationTimeout = 5.0;
初期化対象外のアダプタをスキップする
特定のメディエーション アダプタを初期化または除外する場合は、ウォーターフォール内にまだある初期化対象外のアダプタをスキップするための広告リクエストを構成できます。
アダプタ構成を作成しなくても、初期化対象外のアダプタをスキップするための広告リクエストを構成できます。Google Mobile Ads SDK は、アダプタがタイムアウトしたり初期化できなかったりするまで待たずに広告リクエストを発行します。
次の例では、アダプタ初期化構成で SDK を初期化し、初期化対象外のアダプタをスキップするアプリ起動時広告リクエストを作成します。
Swift
await MobileAds.shared.start(with: adapterInitializationConfig)
// Make your ad request after adapter initialization completes.
let request = Request()
// Set this to guarantee that the ad request
// doesn't wait for any other uninitialized adapters.
request.skipUninitializedAdapters = true
do {
let _ = try await AppOpenAd.load(with: adUnitID, request: request)
} catch {
print("Failed to load app open ad with error: \(error.localizedDescription)")
// TODO: Handle error
}
// Handle non time-sensitive tasks after the ad has loaded regardless of whether ad load
// succeeded.
performPostLaunchSetup()
Objective-C
[[GADMobileAds sharedInstance]
startWithMediationInitializationConfiguration:adapterInitializationConfig
completionHandler:^(GADInitializationStatus *_Nonnull status) {
// Make your ad request after adapter initialization
// completes.
GADRequest *request = [GADRequest request];
// Set this to guarantee that the ad request
// doesn't wait for any other uninitialized adapters
request.shouldSkipUninitializedAdapters = YES;
[GADAppOpenAd
loadWithAdUnitID:adUnitID
request:request
completionHandler:^(GADAppOpenAd *_Nullable ad,
NSError *_Nullable error) {
if (error) {
NSLog(@"Failed to load app open ad with error: %@",
error.localizedDescription);
}
// Handle non time-sensitive tasks after the
// ad has loaded regardless of whether ad load succeeded.
[self performPostLaunchSetup];
}];
}];
残りのアダプタを初期化する
時間的制約のある広告最適化案が読み込まれたら、残りのアダプタを初期化して、アプリ セッションの残りの部分でパートナー メディエーションが完全にカバーされるようにします。
次の例では、空の構成を指定して、残りのアダプタを初期化します。
Swift
// Provide start with nil to initialize any adapters
// not initialized with configurable initialization.
MobileAds.shared.start(with: nil) { status in
// Remaining adapters are now initialized.
}
Objective-C
// Call start with nil to initialize any adapters not initialized via configurable initialization.
[[GADMobileAds sharedInstance]
startWithMediationInitializationConfiguration:nil
completionHandler:^(GADInitializationStatus *_Nonnull status) {
// Remaining adapters are now initialized.
}];