Per risolvere questo problema, AdMob fornisce l'inizializzazione configurabile dell'adattatore. Questa funzionalità ti consente di controllare quali adattatori vengono inizializzati per la prima impressione dell'annuncio e riduce la latenza per questa impressione.
Questa guida tratta i seguenti aspetti dell'inizializzazione dell'adattatore configurabile:
- Creare una configurazione dell'adattatore
- Salta gli adattatori non inizializzati
- Inizializzare gli adattatori rimanenti
Prerequisiti
- Importa GMA Next-Gen SDK v0.25.0-beta01 o versioni successive.
- Configura GMA Next-Gen SDK.
Attiva questa funzionalità aggiungendo l'annotazione
@ExperimentalApial tuo corso:Kotlin
@OptIn(ExperimentalApi::class)Java
import androidx.annotation.OptIn; // ... @OptIn(markerClass = ExperimentalApi.class)
Crea una configurazione dell'adattatore
Una configurazione di inizializzazione dell'adattatore indica a GMA Next-Gen SDK di inizializzare solo gli adattatori richiesti. In questo modo si impedisce agli adattatori non necessari di bloccare la prima richiesta di annuncio, risparmiando risorse di calcolo e riducendo significativamente la latenza per la prima impressione dell'annuncio.
Per ottimizzare il rendimento della tua app, valuta le seguenti strategie durante la creazione di una configurazione di inizializzazione dell'adattatore:
Dare la priorità a un formato dell'annuncio o a un'unità pubblicitaria specifici
Migliora il rendimento delle app che mostrano un annuncio immediatamente all'avvio, ad esempio un annuncio apertura app, dichiarando il formato annuncio o l'unità pubblicitaria specifici nella configurazione di inizializzazione dell'adattatore.
L'esempio seguente crea una configurazione di inizializzazione dell'adattatore che inizializza solo gli adattatori di mediazione richiesti per una specifica unità pubblicitaria apertura app con un timeout di cinque secondi:
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();
L'esempio seguente crea una configurazione di inizializzazione dell'adattatore che inizializza solo gli adattatori di mediazione richiesti per tutte le unità pubblicitarie apertura app e imposta un timeout di cinque secondi:
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();
Inizializza adattatori di mediazione specifici
Se sai esattamente quali partner di mediazione in genere riempiono la prima impressione dell'annuncio, puoi inizializzare solo l'adattatore specifico fornendo il nome della classe dell'adattatore nella configurazione di inizializzazione dell'adattatore. Combina questa impostazione con l'omissione esplicita degli adattatori non inizializzati e l'impostazione di un timeout per GMA Next-Gen SDK per non attendere gli adattatori non inizializzati rimanenti durante l'asta.
L'esempio seguente crea una configurazione di inizializzazione dell'adattatore che inizializza un adattatore di mediazione specifico e imposta un timeout di cinque secondi:
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();
Puoi recuperare i nomi delle classi adattatore in modo programmatico. L'esempio seguente recupera i nomi delle classi adattatore in modo programmatico:
Kotlin
ExampleMediationAdapter::class.java.name
Java
ExampleMediationAdapter.class.getName()
Escludi adattatori di mediazione specifici
Se noti che determinati adattatori di mediazione hanno una latenza costantemente elevata, puoi escluderli e inizializzarli in un secondo momento.
L'esempio seguente crea una configurazione di inizializzazione dell'adattatore che esclude l'inizializzazione di adattatori specifici e imposta un timeout di cinque secondi:
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();
Salta gli adattatori non inizializzati
Se prevedi di inizializzare o escludere adattatori di mediazione specifici, puoi configurare la richiesta di annuncio in modo da ignorare gli adattatori non inizializzati ancora presenti nella cascata.
Se non crei una configurazione dell'adattatore, puoi comunque configurare la richiesta di annuncio in modo da ignorare gli adattatori non inizializzati. GMA Next-Gen SDK invia una richiesta di annuncio senza attendere il timeout o l'inizializzazione degli adattatori.
L'esempio seguente inizializza l'SDK con una configurazione di inizializzazione dell'adattatore e crea una richiesta di annuncio apertura app che ignora gli adattatori non inizializzati:
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();
}
});
});
Inizializza gli adattatori rimanenti
Dopo aver caricato le opportunità pubblicitarie sensibili al fattore tempo, inizializza gli adattatori rimanenti per garantire la copertura completa della mediazione dei partner per il resto della sessione dell'app.
L'esempio seguente inizializza il resto degli adattatori fornendo una configurazione vuota:
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());