برای حل این مشکل، AdMob «راهاندازی آداپتور پیکربندیپذیر» را ارائه میدهد. این ویژگی به شما امکان میدهد کنترل کنید کدام آداپتورها برای اولین ظهور آگهی شما مقداردهی اولیه شوند و تأخیر برای آن ظهور را کاهش میدهد.
این راهنما جنبههای زیر را در «راهاندازی آداپتور پیکربندیپذیر» پوشش میدهد:
پیشنیازها
- Import GMA Next-Gen SDK نسخه ۰.۲۵.۰-beta01 یا بالاتر.
- GMA Next-Gen SDK را راهاندازی کنید.
با افزودن گزارمان
@ExperimentalApiبه کلاس خود، با این ویژگی موافقت کنید:Kotlin
@OptIn(ExperimentalApi::class)جاوا
import androidx.annotation.OptIn; // ... @OptIn(markerClass = ExperimentalApi.class)
ایجاد پیکربندی آداپتور
پیکربندی اولیه آداپتور به GMA Next-Gen SDK دستور میدهد که فقط آداپتورهای موردنیاز را مقداردهی اولیه کند. این کار از مسدود شدن درخواست آگهی اول شما توسط تبدیلکنندههای غیرضروری جلوگیری میکند، منابع محاسباتی را حفظ میکند، و تأخیر را برای ظهور آگهی اول بهطور قابلتوجهی کاهش میدهد.
برای بهینهسازی عملکرد برنامهتان، هنگام ایجاد پیکربندی اولیه آداپتور، استراتژیهای زیر را درنظر بگیرید:
قالب آگهی یا واحد آگهی خاصی را اولویتبندی کنید
با اعلام قالب آگهی یا واحد آگهی خاص در پیکربندی اولیه آداپتور، عملکرد برنامههایی را که بلافاصله پساز راهاندازی آگهی نشان میدهند (مثل آگهی باز برنامه) بهبود دهید.
مثال زیر پیکربندی اولیه آداپتوری ایجاد میکند که فقط آداپتورهای میانجیگری موردنیاز را برای واحد آگهی باز برنامه خاصی با زمان اتمام پنج ثانیه اولیه میکند:
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setAllowedAdUnitIds(setOf(AD_UNIT_ID))
.setInitializationTimeoutMs(5000)
.build()
جاوا
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setAllowedAdUnitIds(Set.of(AD_UNIT_ID))
.setInitializationTimeoutMs(5000)
.build();
مثال زیر پیکربندی اولیه آداپتوری ایجاد میکند که فقط آداپتورهای واسطهگری موردنیاز را برای همه «آگهیهای باز برنامه» مقداردهی اولیه میکند و مهلت زمانی پنج ثانیهای تنظیم میکند:
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setAllowedAdFormats(setOf(AdFormat.APP_OPEN_AD))
.setInitializationTimeoutMs(5000)
.build()
جاوا
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setAllowedAdFormats(Set.of(AdFormat.APP_OPEN_AD))
.setInitializationTimeoutMs(5000)
.build();
راهاندازی کردن میانجیهای میانجیگری خاص
اگر دقیقاً میدانید کدام شرکای واسطهگری معمولاً جای آگهی اول شما را پر میکنند، میتوانید فقط آن مبدل خاص را با ارائه نام کلاس مبدل در پیکربندی اولیه مبدل مقداردهی اولیه کنید. این را با رد کردن صریح آداپتورهای مقداردهینشده و تنظیم زمان اتمام برای GMA Next-Gen SDK ترکیب کنید تا درطول حراج منتظر آداپتورهای مقداردهینشده باقیمانده نمانید.
مثال زیر پیکربندی اولیه آداپتور را ایجاد میکند که آداپتور میانجیگری خاصی را مقداردهی اولیه میکند و مهلت زمانی پنج ثانیهای را تنظیم میکند:
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setAllowedAdapterClasses(setOf(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build()
جاوا
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setAllowedAdapterClasses(Set.of(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build();
میتوانید نامهای کلاس آداپتور را بهصورت برنامهنویسی واکشی کنید. مثال زیر نامهای کلاس آداپتور را بهصورت برنامهنویسی واکشی میکند:
Kotlin
ExampleMediationAdapter::class.java.name
جاوا
ExampleMediationAdapter.class.getName()
مستثنی کردن آداپتورهای واسطهگری خاص
اگر متوجه شدید که برخیاز آداپتورهای واسطهگری بهطور مداوم تأخیر بالایی دارند، میتوانید این آداپتورها را مستثنا کنید و آنها را در زمان دیگری مقداردهی اولیه کنید.
مثال زیر پیکربندی اولیه آداپتور را ایجاد میکند که آداپتورهای خاصی را از مقداردهی اولیه مستثنا میکند و زمان اتمام پنج ثانیهای را تنظیم میکند:
Kotlin
val adapterConfig =
AdapterInitializationConfig.Builder()
.setExcludedAdapterClasses(setOf(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build()
جاوا
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setExcludedAdapterClasses(Set.of(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build();
رد کردن آداپتورهای مقداردهینشده
اگر قصد دارید میانجیگری را مقداردهی اولیه کنید یا آداپتورهای میانجیگری خاصی را مستثنا کنید، میتوانید درخواست آگهیتان را طوری پیکربندی کنید که از آداپتورهای مقداردهی اولیه نشده که هنوز در آبشارتان وجود دارند رد شود.
اگر پیکربندی آداپتور ایجاد نکنید، همچنان میتوانید درخواست آگهیتان را پیکربندی کنید تا از آداپتورهای مقداردهینشده رد شود. GMA Next-Gen SDK درخواست آگهی را بدون انتظار برای اتمام زمان آداپتورها یا عدم موفقیت در مقداردهی اولیه صادر میکند.
مثال زیر کیت توسعه نرمافزار را با پیکربندی راهاندازی سازگارکننده مقداردهی اولیه میکند و درخواست آگهی باز برنامه ایجاد میکند که از سازگارکنندههای مقداردهینشده رد میشود:
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()
}
},
)
}
}
جاوا
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();
}
});
});
راهاندازی آداپتورهای باقیمانده
پساز بار شدن فرصتهای آگهی حساس به زمان، آداپتورهای باقیمانده را مقداردهی اولیه کنید تا پوشش میانجیگری شریک کامل برای بقیه جلسه برنامه تضمین شود.
مثال زیر بقیه آداپتورها را با ارائه پیکربندی خالی مقداردهی اولیه میکند:
Kotlin
// Provide initializeAdapters with an empty configuration to initialize
// any adapters not initialized with configurable initialization.
MobileAds.initializeAdapters(AdapterInitializationConfig.Builder().build())
جاوا
// Provide initializeAdapters with an empty configuration to initialize
// any adapters not initialized with configurable initialization.
MobileAds.initializeAdapters(new AdapterInitializationConfig.Builder().build());