Um dieses Problem zu beheben, bietet AdMob die konfigurierbare Adapterinitialisierung. Mit dieser Funktion können Sie festlegen, welche Adapter für die erste Anzeigenimpression initialisiert werden, und die Latenz für diese Impression reduzieren.
In diesem Leitfaden werden die folgenden Aspekte der konfigurierbaren Adapterinitialisierung behandelt:
- Adapterkonfiguration erstellen
- Nicht initialisierte Adapter überspringen
- Verbleibende Adapter initialisieren
Vorbereitung
- Importieren Sie GMA Next-Gen SDK v0.25.0-beta01 oder höher.
- GMA Next-Gen SDK einrichten:
Aktivieren Sie diese Funktion, indem Sie Ihrer Klasse die Annotation
@ExperimentalApihinzufügen:Kotlin
@OptIn(ExperimentalApi::class)Java
import androidx.annotation.OptIn; // ... @OptIn(markerClass = ExperimentalApi.class)
Adapterkonfiguration erstellen
Mit einer Adapterinitialisierungskonfiguration wird GMA Next-Gen SDK angewiesen, nur die erforderlichen Adapter zu initialisieren. So wird verhindert, dass unnötige Adapter Ihre erste Anzeigenanfrage blockieren. Das spart Rechenressourcen und reduziert die Latenz für die erste Anzeigenimpression erheblich.
Wenn Sie eine Konfiguration für die Adapterinitialisierung erstellen, sollten Sie die folgenden Strategien berücksichtigen, um die Leistung Ihrer App zu optimieren:
Bestimmte Anzeigenformate oder Anzeigenblöcke priorisieren
Sie können die Leistung von Apps verbessern, in denen sofort nach dem Start eine Anzeige ausgeliefert wird, z. B. eine App-Start-Anzeige. Dazu deklarieren Sie das jeweilige Anzeigenformat oder den Anzeigenblock in der Initialisierungskonfiguration Ihres Adapters.
Im folgenden Beispiel wird eine Konfiguration für die Adapterinitialisierung erstellt, mit der nur die erforderlichen Vermittlungsadapter für einen bestimmten Anzeigenblock für App-Start-Anzeigen mit einem Zeitlimit von fünf Sekunden initialisiert werden:
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();
Im folgenden Beispiel wird eine Adapterinitialisierungskonfiguration erstellt, mit der nur die erforderlichen Vermittlungsadapter für alle App Open-Anzeigen initialisiert werden. Außerdem wird ein Zeitlimit von fünf Sekunden festgelegt:
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();
Bestimmte Vermittlungsadapter initialisieren
Wenn Sie genau wissen, welche Vermittlungspartner normalerweise Ihre erste Anzeigenimpression ausliefern, können Sie nur diesen bestimmten Adapter initialisieren. Geben Sie dazu den Namen der Adapterklasse in der Konfiguration für die Adapterinitialisierung an. Kombinieren Sie dies mit dem expliziten Überspringen der nicht initialisierten Adapter und legen Sie ein Zeitlimit für GMA Next-Gen SDK fest, damit während der Auktion nicht auf die verbleibenden nicht initialisierten Adapter gewartet wird.
Im folgenden Beispiel wird eine Adapterinitialisierungskonfiguration erstellt, mit der ein bestimmter Vermittlungsadapter initialisiert und ein Zeitlimit von fünf Sekunden festgelegt wird:
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();
Sie können die Namen der Adapterklassen programmatisch abrufen. Im folgenden Beispiel werden Adapterklassennamen programmatisch abgerufen:
Kotlin
ExampleMediationAdapter::class.java.name
Java
ExampleMediationAdapter.class.getName()
Bestimmte Vermittlungsadapter ausschließen
Wenn Sie feststellen, dass bestimmte Vermittlungsadapter eine konstant hohe Latenz aufweisen, können Sie diese Adapter ausschließen und zu einem späteren Zeitpunkt initialisieren.
Im folgenden Beispiel wird eine Adapterinitialisierungskonfiguration erstellt, bei der bestimmte Adapter nicht initialisiert werden und ein Zeitlimit von fünf Sekunden festgelegt wird:
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();
Nicht initialisierte Adapter überspringen
Wenn Sie bestimmte Vermittlungsadapter initialisieren oder ausschließen möchten, können Sie Ihre Anzeigenanfrage so konfigurieren, dass nicht initialisierte Adapter, die noch in Ihrem Wasserfall vorhanden sind, übersprungen werden.
Wenn Sie keine Adapterkonfiguration erstellen, können Sie Ihre Anzeigenanfrage trotzdem so konfigurieren, dass nicht initialisierte Adapter übersprungen werden. GMA Next-Gen SDK sendet eine Anzeigenanfrage, ohne auf das Zeitlimit für Adapter zu warten oder darauf, dass die Initialisierung fehlschlägt.
Im folgenden Beispiel wird das SDK mit einer Adapterinitialisierungskonfiguration initialisiert und eine App-Start-Anzeigenanfrage erstellt, bei der nicht initialisierte Adapter übersprungen werden:
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();
}
});
});
Verbleibende Adapter initialisieren
Nachdem Ihre zeitkritischen Anzeigenmöglichkeiten geladen wurden, initialisieren Sie die verbleibenden Adapter, um die vollständige Partnervermittlung für den Rest der App-Sitzung zu gewährleisten.
Im folgenden Beispiel werden die restlichen Adapter durch Bereitstellung einer leeren Konfiguration initialisiert:
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());