Korzystanie z konfigurowalnej inicjalizacji adaptera (alfa)

Domyślnie GMA Next-Gen SDK inicjuje wszystkie adaptery zapośredniczenia powiązane z aplikacją podczas inicjowania. Inicjowanie wszystkich adapterów może potrwać ponad 30 sekund, co może spowodować znaczne opóźnienie przed wczytaniem pierwszej reklamy.

Aby rozwiązać ten problem, AdMob udostępnia konfigurowalną inicjalizację adaptera. Ta funkcja pozwala kontrolować, które adaptery są inicjowane przy pierwszym wyświetleniu reklamy, i zmniejsza opóźnienie tego wyświetlenia.

Ten przewodnik zawiera informacje o tych aspektach inicjowania konfigurowalnego adaptera:

Wymagania wstępne

  • Aby włączyć tę funkcję, dodaj do klasy adnotację @ExperimentalApi:

    Kotlin

    @OptIn(ExperimentalApi::class)
    

    Java

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

Tworzenie konfiguracji adaptera

Konfiguracja inicjowania adaptera instruuje GMA Next-Gen SDK, aby inicjował tylko wymagane adaptery. Zapobiega to blokowaniu pierwszego żądania reklamy przez niepotrzebne adaptery, co pozwala oszczędzać zasoby obliczeniowe i znacznie zmniejsza opóźnienie pierwszego wyświetlenia reklamy.

Aby zoptymalizować wydajność aplikacji, podczas tworzenia konfiguracji inicjowania adaptera weź pod uwagę te strategie:

Nadawanie priorytetu konkretnemu formatowi reklamy lub jednostce reklamowej

Zwiększ skuteczność aplikacji, które wyświetlają reklamę natychmiast po uruchomieniu, np. reklamę wyświetlaną przy otwarciu aplikacji, przez zadeklarowanie konkretnego formatu reklamy lub jednostki reklamowej w konfiguracji inicjowania adaptera.

W przykładzie poniżej tworzymy konfigurację inicjowania adaptera, która inicjuje tylko wymagane adaptery zapośredniczenia dla konkretnej jednostki reklamowej wyświetlanej przy otwarciu aplikacji z 5-sekundowym limitem czasu:

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

Poniższy przykład tworzy konfigurację inicjowania adaptera, która inicjuje tylko wymagane adaptery zapośredniczenia dla wszystkich reklam wyświetlanych przy otwarciu aplikacji i ustawia 5-sekundowy limit czasu:

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

Inicjowanie określonych adapterów zapośredniczenia

Jeśli wiesz dokładnie, którzy partnerzy zapośredniczenia zwykle wypełniają pierwsze wyświetlenie reklamy, możesz zainicjować tylko ten konkretny adapter, podając jego nazwę klasy w konfiguracji inicjowania adaptera. Połącz to z wyraźnym pomijaniem niezainicjowanych adapterów i ustawieniem limitu czasu na GMA Next-Gen SDK, aby nie czekać na pozostałe niezainicjowane adaptery podczas aukcji.

Poniższy przykład tworzy konfigurację inicjowania adaptera, która inicjuje konkretny adapter zapośredniczenia i ustawia 5-sekundowy limit czasu:

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

Nazwy klas adapterów możesz pobierać automatycznie. W tym przykładzie nazwy klas adapterów są pobierane automatycznie:

Kotlin

ExampleMediationAdapter::class.java.name

Java

ExampleMediationAdapter.class.getName()

Wykluczanie określonych adapterów zapośredniczenia

Jeśli zauważysz, że niektóre adaptery zapośredniczenia mają stale wysokie opóźnienie, możesz je wykluczyć i zainicjować później.

W tym przykładzie tworzymy konfigurację inicjowania adaptera, która wyklucza określone adaptery z inicjowania i ustawia 5-sekundowy limit czasu:

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

Pomiń niezainicjowane adaptery

Jeśli planujesz zainicjować lub wykluczyć określone adaptery zapośredniczenia, możesz skonfigurować żądanie reklamy tak, aby pomijało niezainicjowane adaptery, które nadal znajdują się w kaskadzie.

Jeśli nie utworzysz konfiguracji adaptera, nadal możesz skonfigurować żądanie reklamy tak, aby pomijało niezainicjowane adaptery. GMA Next-Gen SDK wysyła żądanie reklamy bez czekania na przekroczenie limitu czasu oczekiwania lub niepowodzenie inicjowania adapterów.

W tym przykładzie pakiet SDK jest inicjowany z konfiguracją inicjowania adaptera i tworzone jest żądanie reklamy wyświetlanej przy otwarciu aplikacji, które pomija niezainicjowane adaptery:

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

Zainicjuj pozostałe adaptery

Po wczytaniu reklam, które muszą zostać wyświetlone w określonym czasie, zainicjuj pozostałe adaptery, aby zapewnić pełne zapośredniczenie partnerów przez resztę sesji aplikacji.

Poniższy przykład inicjuje pozostałe adaptery, podając pustą konfigurację:

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