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

Выберите платформу: Android iOS Android (устаревшая версия)

По умолчанию 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());