この問題を解決するために、AdMob は「構成可能なアダプタの初期化」機能を提供しています。この機能を使用して、最初の広告のインプレッションでどのアダプタを初期化するかを管理し、そのインプレッションの遅延を短縮することができます。
このガイドでは、「構成可能なアダプタの初期化」機能の以下の点について説明します。
前提条件
- GMA Next-Gen SDK v0.25.0-beta01 以降をインポートしていること。
- GMA Next-Gen SDK を設定します。
この機能を有効にするには、クラスに
@ExperimentalApiアノテーションを追加します。Kotlin
@OptIn(ExperimentalApi::class)Java
import androidx.annotation.OptIn; // ... @OptIn(markerClass = ExperimentalApi.class)
アダプタ構成を作成する
アダプタ初期化構成によって、必要なアダプタのみを初期化するよう GMA Next-Gen SDK に指示します。これにより、不要なアダプタが最初の広告リクエストをブロックするのを防ぎ、コンピューティング リソースを節約して、最初の広告のインプレッションの遅延を大幅に短縮することができます。
アプリのパフォーマンスを最適化するには、アダプタ初期化構成を作成する際に以下の戦略を検討してください。
特定の広告フォーマットまたは広告ユニットを優先させる
アダプタ初期化構成で特定の広告フォーマットまたは広告ユニットを宣言することで、アプリ起動時広告など、起動直後に広告を表示するアプリのパフォーマンスを改善できます。
次の例で作成するアダプタ初期化構成では、タイムアウトを 5 秒に設定し、特定のアプリ起動時広告ユニットに対して必要なメディエーション アダプタのみを初期化します。
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setAllowedAdUnitIds(setOf(AD_UNIT_ID))
.setInitializationTimeoutMs(5000)
.build()
Java
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setAllowedAdUnitIds(Set.of(AD_UNIT_ID))
.setInitializationTimeoutMs(5000)
.build();
次の例で作成するアダプタ初期化構成では、タイムアウトを 5 秒に設定し、すべてのアプリ起動時広告に対して必要なメディエーション アダプタのみを初期化します。
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setAllowedAdFormats(setOf(AdFormat.APP_OPEN_AD))
.setInitializationTimeoutMs(5000)
.build()
Java
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setAllowedAdFormats(Set.of(AdFormat.APP_OPEN_AD))
.setInitializationTimeoutMs(5000)
.build();
特定のメディエーション アダプタを初期化する
最初の広告のインプレッションに通常対応するメディエーション パートナーを正確に把握している場合は、アダプタ初期化構成でアダプタのクラス名を指定することで、その特定のアダプタのみを初期化できます。この方法を、明示的に初期化対象外のアダプタをスキップして GMA Next-Gen SDK のタイムアウトを設定する方法と組み合わせて、オークション中に残りの初期化対象外のアダプタを待機することを防ぎます。
次の例で作成するアダプタ初期化構成では、特定のメディエーション アダプタを初期化し、タイムアウトを 5 秒に設定します。
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setAllowedAdapterClasses(setOf(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build()
Java
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setAllowedAdapterClasses(Set.of(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build();
アダプターのクラス名はプログラムで取得できます。次の例では、アダプタのクラス名をプログラムで取得します。
Kotlin
ExampleMediationAdapter::class.java.name
Java
ExampleMediationAdapter.class.getName()
特定のメディエーション アダプタを除外する
特定のメディエーション アダプタの遅延が常に高い場合は、そのアダプタを除外して後で初期化することができます。
次の例で作成するアダプタ初期化構成では、特定のアダプタを初期化から除外し、タイムアウトを 5 秒に設定します。
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setExcludedAdapterClasses(setOf(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build()
Java
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setExcludedAdapterClasses(Set.of(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build();
初期化対象外のアダプタをスキップする
特定のメディエーション アダプタを初期化または除外する場合は、ウォーターフォール内にまだある初期化対象外のアダプタをスキップするための広告リクエストを構成できます。
アダプタ構成を作成しなくても、初期化対象外のアダプタをスキップするための広告リクエストを構成できます。GMA Next-Gen SDK は、アダプタがタイムアウトしたり初期化できなかったりするまで待たずに広告リクエストを発行します。
次の例では、アダプタ初期化構成で SDK を初期化し、初期化対象外のアダプタをスキップするアプリ起動時広告リクエストを作成します。
Kotlin
val initConfig =
InitializationConfig.Builder(appId)
.setAdapterInitializationConfig(adapterInitializationConfig)
.build()
// Initialize the GMA Next-Gen SDK with a config containing your adapter initialization
// settings.
val backgroundScope = CoroutineScope(Dispatchers.IO)
backgroundScope.launch {
MobileAds.initialize(context = context, initConfig) {
// Make your ad request after adapter initialization completes.
AppOpenAd.load(
AdRequest.Builder(adUnitId = adUnitId)
// Set this to guarantee that the ad request
// doesn't wait for any other uninitialized adapters.
.skipUninitializedAdapters()
.build(),
adLoadCallback =
object : AdLoadCallback<AppOpenAd> {
override fun onAdLoaded(ad: AppOpenAd) {
// TODO: Your ad logic here
// ....
// Execute non-time-sensitive tasks after ad load completes.
performPostLaunchSetup()
}
override fun onAdFailedToLoad(adError: LoadAdError) {
// TODO: Handle load error.
// ....
// Ensure non-time-sensitive post-launch tasks execute even if ad load fails.
performPostLaunchSetup()
}
},
)
}
}
Java
InitializationConfig initConfig =
new InitializationConfig.Builder(appId)
.setAdapterInitializationConfig(adapterInitializationConfig)
.build();
// Initialize the GMA Next-Gen SDK with a config containing your adapter initialization
// settings.
MobileAds.initialize(
context,
initConfig,
initializationStatus -> {
// Make your ad request after adapter initialization completes.
AppOpenAd.load(
new AdRequest.Builder(adUnitId)
// Set this to guarantee that the ad request
// doesn't wait for any other uninitialized adapters.
.skipUninitializedAdapters()
.build(),
new AdLoadCallback<AppOpenAd>() {
@Override
public void onAdLoaded(@NonNull AppOpenAd ad) {
// TODO: Your ad logic here
// ....
// Execute non-time-sensitive tasks after ad load completes.
performPostLaunchSetup();
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError error) {
// TODO: Handle load error.
// ....
// Ensure non-time-sensitive post-launch tasks execute even if ad load fails.
performPostLaunchSetup();
}
});
});
残りのアダプタを初期化する
時間的制約のある広告最適化案が読み込まれたら、残りのアダプタを初期化して、アプリ セッションの残りの部分でパートナー メディエーションが完全にカバーされるようにします。
次の例では、空の構成を指定して、残りのアダプタを初期化します。
Kotlin
// Provide initializeAdapters with an empty configuration to initialize
// any adapters not initialized with configurable initialization.
MobileAds.initializeAdapters(AdapterInitializationConfig.Builder().build())
Java
// Provide initializeAdapters with an empty configuration to initialize
// any adapters not initialized with configurable initialization.
MobileAds.initializeAdapters(new AdapterInitializationConfig.Builder().build());