Использование настраиваемой инициализации адаптера (альфа-версия)

По умолчанию GMA Next-Gen SDK инициализирует все адаптеры медиации, связанные с вашим приложением. Инициализация каждого адаптера может занять более 30 секунд, что приведет к значительной задержке перед загрузкой первого объявления.

Чтобы решить эту проблему, в AdMob предусмотрена настраиваемая инициализация адаптера. Эта функция позволяет контролировать, какие адаптеры инициализируются для первого показа объявления, и сокращает задержку для этого показа.

В этом руководстве рассматриваются следующие аспекты настраиваемой инициализации адаптера:

Требования

  • Чтобы включить эту функцию, добавьте в класс аннотацию @ExperimentalApi:

    Kotlin

    @OptIn(ExperimentalApi::class)
    

    Java

    import androidx.annotation.OptIn;
    // ...
    @OptIn(markerClass = ExperimentalApi.class)
    

Как создать конфигурацию адаптера

Конфигурация инициализации адаптера указывает GMA Next-Gen SDK, что нужно инициализировать только необходимые адаптеры. Это позволяет избежать блокировки первого запроса объявления ненужными адаптерами, сэкономить вычислительные ресурсы и значительно сократить задержку при первом показе объявления.

Чтобы оптимизировать эффективность приложения, при создании конфигурации инициализации адаптера учитывайте следующие стратегии:

Приоритет определенного формата объявления или рекламного блока

Чтобы повысить эффективность приложений, в которых реклама показывается сразу после запуска (например, объявлений при запуске приложения), укажите формат объявления или рекламный блок в конфигурации инициализации адаптера.

В примере ниже создается конфигурация инициализации адаптера, которая инициализирует только необходимые адаптеры медиации для определенного рекламного блока для объявлений при запуске приложения с пятисекундным тайм-аутом:

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();

В примере ниже создается конфигурация инициализации адаптера, которая инициализирует только необходимые адаптеры медиации для всех объявлений при запуске приложения и устанавливает время ожидания в пять секунд.

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 это позволит не ждать оставшиеся неинициализированные адаптеры во время аукциона.

В следующем примере создается конфигурация инициализации адаптера, которая инициализирует определенный адаптер медиации и устанавливает пятисекундный тайм-аут:

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()

Как исключить определенные адаптеры медиации

Если вы заметили, что у определенных адаптеров медиации задержка постоянно высокая, вы можете исключить их и инициализировать позже.

В следующем примере создается конфигурация инициализации адаптера, которая исключает инициализацию определенных адаптеров и устанавливает пятисекундный тайм-аут:

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());