כדי לפתור את הבעיה, AdMob מספק את התכונה Configurable Adapter Initialization (הגדרה של הפעלה של מתאם). התכונה הזו מאפשרת לכם לקבוע אילו מתאמים יאותחלו לחשיפה הראשונה של המודעה, ומקטינה את זמן האחזור של החשיפה הזו.
במדריך הזה מוסברים ההיבטים הבאים של אתחול מתאם שניתן להגדרה:
דרישות מוקדמות
- ייבוא של 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()
החרגה של מתאמי גישור ספציפיים
אם אתם מבחינים שזמן האחזור של מתאמים מסוימים בתהליך בחירת הרשת (Mediation) גבוה באופן עקבי, אתם יכולים להחריג את המתאמים האלה ולאתחל אותם במועד מאוחר יותר.
בדוגמה הבאה נוצרת הגדרת אתחול של מתאם שמוציאה מתאמים ספציפיים מהאתחול, ומגדירה זמן קצוב לתפוגה של חמש שניות:
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();
דילוג על מתאמים שלא אותחלו
אם אתם מתכננים להפעיל או להחריג מתאמים ספציפיים של מנגנון בחירת הרשת, אתם יכולים להגדיר את בקשה להצגת מודעה כך שהמערכת תדלג על מתאמים שלא הופעלו ועדיין נמצאים ב-Waterfall.
אם לא תיצרו הגדרת מתאם, עדיין תוכלו להגדיר את בקשה להצגת מודעה כך שתדלג על מתאמים שלא אותחלו. 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());