使用可設定的轉接器初始化功能 (Alpha 版)

根據預設,GMA Next-Gen SDK 會在初始化期間,初始化與應用程式相關聯的所有中介服務轉接程式。初始化每個轉接程式可能需要超過 30 秒,導致載入第一個廣告前出現明顯延遲。

為解決這個問題,AdMob 提供可設定的轉接程式初始化功能。這項功能可讓您控管要為首次廣告曝光初始化哪些轉接程式,並減少該曝光的延遲時間。

本指南將說明可設定的轉接程式初始化功能的下列主題:

必要條件

  • 如要啟用這項功能,請在類別中加入 @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());