Korzystanie z konfigurowalnej inicjalizacji adaptera (alfa)

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

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

Ten przewodnik obejmuje następujące aspekty inicjowania konfigurowalnego adaptera:

Wymagania wstępne

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

    Kotlin

    @OptIn(ExperimentalApi::class)
    

    Java

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

Tworzenie konfiguracji adaptera

Konfiguracja inicjowania adaptera nakazuje GMA Next-Gen SDK inicjowanie tylko wymaganych adapterów. Zapobiega to blokowaniu pierwszego żądania reklamy przez niepotrzebne adaptery, co pozwala oszczędzać zasoby obliczeniowe i znacznie skracać czas oczekiwania na pierwsze wyświetlenie reklamy.

Aby zoptymalizować skuteczność 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ę od razu po uruchomieniu, np. reklamę wyświetlaną przy otwarciu aplikacji, deklarując konkretny format reklamy lub jednostkę reklamową w konfiguracji inicjowania adaptera.

Poniższy przykład tworzy 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 konkretnych adapterów zapośredniczenia

Jeśli wiesz, którzy partnerzy mediacji zwykle wypełniają pierwsze wyświetlenie reklamy, możesz zainicjować tylko ten konkretny adapter, podając nazwę klasy adaptera w konfiguracji inicjowania adaptera. Połącz to z 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 adaptera możesz pobierać programowo. W tym przykładzie nazwy klas adaptera są pobierane programowo:

Kotlin

ExampleMediationAdapter::class.java.name

Java

ExampleMediationAdapter.class.getName()

Wykluczanie określonych adapterów do mediacji

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

W tym przykładzie tworzymy konfigurację inicjowania adaptera, która wyklucza z inicjowania określone adaptery 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ć konkretne 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, możesz skonfigurować żądanie reklamy tak, aby pomijać niezainicjowane adaptery. GMA Next-Gen SDK wysyła żądanie reklamy bez czekania na przekroczenie czasu oczekiwania przez adaptery lub niepowodzenie inicjowania.

W tym przykładzie pakiet SDK jest inicjowany za pomocą konfiguracji inicjowania adaptera, a żądanie reklamy wyświetlanej przy otwarciu aplikacji 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();
            }
          });
    });

Inicjowanie pozostałych adapterów

Po wczytaniu możliwości wyświetlania reklam wrażliwych na czas zainicjuj pozostałe adaptery, aby zapewnić pełne zapośredniczenie partnerów w pozostałej części sesji aplikacji.

W tym przykładzie pozostałe adaptery są inicjowane przez podanie pustej konfiguracji:

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