Usa la inicialización del adaptador configurable (alfa)

Selecciona la plataforma: Android iOS Android (heredada)

De forma predeterminada, GMA Next-Gen SDK inicializa todos los adaptadores de mediación asociados con tu aplicación durante la inicialización. Este proceso puede demorar más de 30 segundos, lo que genera una latencia significativa antes de que se pueda cargar tu primer anuncio.

Para resolver este problema, AdMob proporciona la Configurable Adapter Initialization. Esta función te permite controlar qué adaptadores se inicializan para tu primera impresión de anuncio y reduce la latencia de esa impresión.

En esta guía, se abarcan los siguientes aspectos de la Configurable Adapter Initialization:

Requisitos previos

  • Para habilitar esta función, agrega la anotación @ExperimentalApi a tu clase:

    Kotlin

    @OptIn(ExperimentalApi::class)
    

    Java

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

Crea una configuración del adaptador

Una configuración de inicialización del adaptador le indica a GMA Next-Gen SDK que inicialice solo los adaptadores necesarios. Esto evita que los adaptadores innecesarios bloqueen tu primera solicitud de anuncio, lo que conserva los recursos de procesamiento y reduce significativamente la latencia de la primera impresión del anuncio.

Para optimizar el rendimiento de tu app, considera las siguientes estrategias cuando crees una configuración de inicialización del adaptador:

Prioriza un formato de anuncio o una unidad de anuncios específicos

Mejora el rendimiento de las apps que muestran un anuncio inmediatamente después del lanzamiento, como un anuncio para inicio de aplicación, declarando el formato del anuncio o la unidad de anuncios específicos en la configuración de inicialización de tu adaptador.

En el siguiente ejemplo, se crea una configuración de inicialización del adaptador que inicializa solo los adaptadores de mediación requeridos para una unidad de anuncios para inicio de aplicación específica con un tiempo de espera de cinco segundos:

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

En el siguiente ejemplo, se crea una configuración de inicialización del adaptador que inicializa solo los adaptadores de mediación necesarios para todos los anuncios para inicio de app y establece un tiempo de espera de cinco segundos:

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

Inicializa adaptadores de mediación específicos

Si sabes exactamente qué socios de mediación suelen completar tu primera impresión de anuncio, puedes inicializar solo ese adaptador específico proporcionando el nombre de la clase del adaptador en la configuración de inicialización del adaptador. Combina esto con la omisión explícita de los adaptadores no inicializados y un tiempo de espera establecido para que GMA Next-Gen SDK no espere a los adaptadores no inicializados restantes durante la subasta.

En el siguiente ejemplo, se crea una configuración de inicialización del adaptador que inicializa un adaptador de mediación específico y establece un tiempo de espera de cinco segundos:

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

Puedes recuperar los nombres de las clases de adaptadores de forma programática. En el siguiente ejemplo, se extraen los nombres de las clases de adaptadores de forma programática:

Kotlin

ExampleMediationAdapter::class.java.name

Java

ExampleMediationAdapter.class.getName()

Excluye adaptadores de mediación específicos

Si observas que ciertos adaptadores de mediación tienen una latencia constantemente alta, puedes excluirlos e inicializarlos más adelante.

En el siguiente ejemplo, se crea una configuración de inicialización del adaptador que excluye la inicialización de adaptadores específicos y establece un tiempo de espera de cinco segundos:

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

Omisión de adaptadores no inicializados

Si planeas inicializar o excluir adaptadores de mediación específicos, puedes configurar tu solicitud de anuncio para que omita los adaptadores no inicializados que aún estén presentes en tu cascada.

Si no creas una configuración del adaptador, aún puedes configurar tu solicitud de anuncio para omitir los adaptadores no inicializados. GMA Next-Gen SDK emite una solicitud de anuncio sin esperar a que se agote el tiempo de espera de los adaptadores o a que no se inicialicen.

En el siguiente ejemplo, se inicializa el SDK con una configuración de inicialización del adaptador y se crea una solicitud de anuncio para inicio de aplicación que omite los adaptadores no inicializados:

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

Inicializa los adaptadores restantes

Después de que se carguen las oportunidades de anuncios urgentes, inicializa los adaptadores restantes para garantizar la cobertura completa de la mediación de socios durante el resto de la sesión de la app.

En el siguiente ejemplo, se inicializan el resto de los adaptadores proporcionando una configuración vacía:

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