Чтобы решить эту проблему, в AdMob предусмотрена настраиваемая инициализация адаптера. Эта функция позволяет контролировать, какие адаптеры инициализируются для первого показа объявления, и сокращает задержку для этого показа.
В этом руководстве рассматриваются следующие аспекты настраиваемой инициализации адаптера:
- Как создать конфигурацию адаптера
- Пропуск неинициализированных адаптеров
- Инициализация остальных адаптеров
Требования
- Импортируйте GMA Next-Gen SDK версии 0.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, что нужно инициализировать только необходимые адаптеры. Это позволяет избежать блокировки первого запроса объявления ненужными адаптерами, сэкономить вычислительные ресурсы и значительно сократить задержку при первом показе объявления.
Чтобы оптимизировать эффективность приложения, при создании конфигурации инициализации адаптера учитывайте следующие стратегии:
Приоритет определенного формата объявления или рекламного блока
Чтобы повысить эффективность приложений, в которых реклама показывается сразу после запуска (например, объявлений при запуске приложения), укажите формат объявления или рекламный блок в конфигурации инициализации адаптера.
В примере ниже создается конфигурация инициализации адаптера, которая инициализирует только необходимые адаптеры медиации для определенного рекламного блока для объявлений при запуске приложения с пятисекундным тайм-аутом:
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());