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:
- Tworzenie konfiguracji adaptera
- Pomijanie niezainicjowanych adapterów
- Inicjowanie pozostałych adapterów
Wymagania wstępne
- Zaimportuj GMA Next-Gen SDK w wersji 0.25.0-beta01 lub nowszej.
- Skonfiguruj GMA Next-Gen SDK.
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());