এই সমস্যার সমাধান করতে, AdMob কনফিগার করা যায় এমন অ্যাডাপ্টার ইনিশিয়ালাইজেশন প্রদান করে। এই ফিচারের মাধ্যমে, আপনার প্রথম বিজ্ঞাপন ইম্প্রেশনের জন্য কোন অ্যাডাপ্টার ইনিশিয়ালাইজ করা হবে তা আপনি কন্ট্রোল করতে পারবেন এবং এর ফলে সেই ইম্প্রেশনের লেটেন্সি কমে যাবে।
এই নির্দেশিকায় কনফিগার করা যায় এমন অ্যাডাপ্টারের ইনিশিয়ালাইজেশনের নিম্নলিখিত দিকগুলি অন্তর্ভুক্ত:
- অ্যাডাপ্টার কনফিগারেশন তৈরি করা
- ইনশিয়ালাইজ করা হয়নি এমন অ্যাডাপ্টার এড়িয়ে যান
- বাকি অ্যাডাপ্টার ইনিশিয়ালাইজ করা
পূর্বশর্ত
- GMA Next-Gen SDK v0.25.0-beta01 বা তার পরের যেকোনও ভার্সন ইমপোর্ট করুন।
- GMA Next-Gen SDK সেট-আপ করুন।
আপনার ক্লাসে
@ExperimentalApiঅ্যানোটেশন যোগ করে এই ফিচারে অপ্ট-ইন করুন:Kotlin
@OptIn(ExperimentalApi::class)Java
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()
Java
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()
Java
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()
Java
AdapterInitializationConfig adapterConfig =
new AdapterInitializationConfig.Builder()
.setAllowedAdapterClasses(Set.of(ADAPTER_JAVA_CLASS_NAME))
.setInitializationTimeoutMs(5000)
.build();
আপনি প্রোগ্র্যামাটিক উপায়ে অ্যাডাপ্টার ক্লাস নেম ফেচ করতে পারবেন। নিচের উদাহরণটি প্রোগ্রামাটিক উপায়ে অ্যাডাপ্টার ক্লাসের নাম পুল করে:
Kotlin
ExampleMediationAdapter::class.java.name
Java
ExampleMediationAdapter.class.getName()
নির্দিষ্ট মধ্যস্থতা অ্যাডাপ্টার বাদ দেওয়া
আপনি যদি লক্ষ্য করেন যে নির্দিষ্ট কিছু মেডিয়েশন অ্যাডাপ্টারে ধারাবাহিকভাবে বেশি লেটেন্সি আছে, তাহলে আপনি এইসব অ্যাডাপ্টার বাদ দিতে এবং পরে সেগুলি চালু করতে পারবেন।
নিম্নলিখিত উদাহরণটি একটি অ্যাডাপ্টার ইনিশিয়ালাইজেশন কনফিগারেশন তৈরি করে যা ইনিশিয়ালাইজ করা থেকে নির্দিষ্ট অ্যাডাপ্টার বাদ দেয় এবং পাঁচ সেকেন্ডের টাইমআউট সেট করে:
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();
ইনস্টল না করা অ্যাডাপ্টার এড়িয়ে যাওয়া
আপনি যদি নির্দিষ্ট মধ্যস্থতা অ্যাডাপ্টার শুরু করতে বা বাদ দিতে চান, তাহলে আপনি আপনার ওয়াটারফলে এখনও উপস্থিত থাকা অ্যাডাপ্টারগুলি এড়িয়ে যাওয়ার জন্য আপনার বিজ্ঞাপনের অনুরোধ কনফিগার করতে পারেন।
আপনি অ্যাডাপ্টার কনফিগারেশন তৈরি না করলেও, আপনি এখনও অপ্রারম্ভিক অ্যাডাপ্টার এড়িয়ে যাওয়ার জন্য বিজ্ঞাপন দেখানোর অনুরোধ কনফিগার করতে পারবেন। অ্যাডাপ্টারের টাইম-আউট হওয়া বা ইনস্টল হতে না পারার জন্য অপেক্ষা না করেই GMA Next-Gen SDK একটি বিজ্ঞাপন অনুরোধ ইস্যু করে।
নিচের উদাহরণটি অ্যাডাপ্টার ইনিশিয়ালাইজেশন কনফিগারেশনের মাধ্যমে 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()
}
},
)
}
}
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();
}
});
});
বাকি অ্যাডাপ্টার ইনিশিয়ালাইজ করা
সময়-সংবেদনশীল বিজ্ঞাপন দেখানোর সুযোগ লোড হয়ে যাওয়ার পরে, বাকি অ্যাপ সেশনের জন্য পার্টনার মেডিটেশন কভারেজ সম্পূর্ণ করতে আপনার বাকি অ্যাডাপ্টার ইনিশিয়ালাইজ করুন।
নিচের উদাহরণটি খালি কনফিগারেশন প্রদান করে বাকি অ্যাডাপ্টারগুলিকে ইনিশিয়ালাইজ করে:
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());