इस समस्या को हल करने के लिए, 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 अडैप्टर के टाइम आउट होने या शुरू न होने का इंतज़ार किए बिना विज्ञापन का अनुरोध करता है.
यहां दिए गए उदाहरण में, अडैप्टर को शुरू करने के कॉन्फ़िगरेशन के साथ एसडीके को शुरू किया गया है. साथ ही, ऐप्लिकेशन खोलने पर दिखने वाले विज्ञापन का ऐसा अनुरोध बनाया गया है जो शुरू नहीं किए गए अडैप्टर को स्किप करता है:
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());