Konfigurierbare Adapterinitialisierung verwenden (Alpha)

Plattform auswählen: Android iOS Android (Legacy)

Standardmäßig initialisiert GMA Next-Gen SDK alle Vermittlungsadapter, die mit Ihrer Anwendung verknüpft sind. Das Initialisieren jedes Adapters kann mehr als 30 Sekunden dauern. Das führt zu einer erheblichen Latenz, bevor die erste Anzeige geladen werden kann.

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:

Vorbereitung

  • Aktivieren Sie diese Funktion, indem Sie Ihrer Klasse die Annotation @ExperimentalApi hinzufü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());