טעינה מראש של מודעות היא תכונה לטעינת מודעות שמנוהלת על ידי Google ב-Google Mobile Ads SDK. התכונה הזו מנהלת את הטעינה של המודעות ואת השמירה שלהן במטמון בשמכם. טעינה מראש של מודעות מחייבת שינוי באופן שבו אתם מנהלים את טעינת המודעות. כדי לבצע אופטימיזציה של הביצועים באמצעות טעינה מראש של מודעות, צריך להשבית את השמירה במטמון בהתאמה אישית ולהעביר את האחריות הזו אל Google Mobile Ads SDK.
לטעינה מראש של מודעות יש יתרונות לעומת טעינה ידנית של מודעות:
- ניהול הפניות: מחזיק מודעות שנטענו כדי שלא תצטרכו לשמור הפניות עד שתהיו מוכנים להציג אותן.
- טעינה אוטומטית מחדש: טוענת מודעה חדשה באופן אוטומטי כשמוציאים מודעה מהמטמון.
- ניסיונות חוזרים מנוהלים: ניסיונות חוזרים של בקשות שנכשלו מתבצעים אוטומטית באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
- טיפול בתפוגה: רענון אוטומטי של המודעות לפני שהתוקף שלהן פג (בדרך כלל אחרי שעה).
- אופטימיזציה של מטמון: אם משתמשים בגודל מטמון גדול מאחד, Google Mobile Ads SDK המערכת מבצעת אופטימיזציה של סדר המטמון כדי להציג את המודעה הטובה ביותר.
במדריך הזה מוסבר איך להגדיר טעינה מראש של מודעות, לבדוק אם יש מודעות שזמינות לטעינה מראש ולהציג את המודעה שנטענה מראש.
דרישות מוקדמות
לפני שממשיכים במדריך, צריך לבצע את הפעולות הבאות:
- מתקינים את Google Mobile Ads SDK גרסה 12.6.0 ואילך. משאבי פיתוח לגרסאות קודמות זמינים בכתובות 11.12.0 עד 12.2.0, אבל מומלץ להשתמש בגרסה 12.6.0 ואילך ולפעול לפי המדריך הזה.
- הגדרה של Google Mobile Ads SDK
מורידים את הכותרות של התצוגה המקדימה של הטעינה מראש וכוללים אותן בפרויקט.
אופציונלי: מורידים ומריצים את האפליקציה לדוגמה לטעינה מראש של מודעות.
התחלת טעינה מראש של מודעות
כדי להתחיל בטעינה מראש של מודעות, צריך להתקשר אל preload(). צריך להפעיל את השיטה הזו רק פעם אחת בתחילת האפליקציה. אחרי שמפעילים את preload(), המערכת Google Mobile Ads SDK טוענת מראש מודעות באופן אוטומטי ומנסה שוב בקשות שנכשלו להגדרות שנטענו מראש.
בדוגמה הבאה מוצג איך מתחילים לטעון מראש מודעות:
Swift
// Start the preloading initialization process.
let request = Request()
let interstitialConfig = PreloadConfigurationV2(
adUnitID: Constants.interstitialAdUnitID, request: request)
InterstitialAdPreloader.shared.preload(
for: Constants.interstitialAdUnitID, configuration: interstitialConfig, delegate: self)
Objective-C
// Start the preloading initialization process.
GADRequest *request = [GADRequest request];
GADPreloadConfigurationV2 *interstitialConfig = [[GADPreloadConfigurationV2 alloc] initWithAdUnitID:interstitialAdUnitID request:request];
[GADInterstitialAdPreloader.sharedInstance preloadForPreloadID:interstitialAdUnitID
configuration:interstitialConfig
delegate:self];
אחזור והצגה של המודעה שנטענה מראש
כשמשתמשים בטעינה מראש של מודעות, Google Mobile Ads SDK שומר מודעות במטמון.
כשרוצים להציג מודעה, קוראים ל-adWithPreloadID().
Google Mobile Ads SDK מאחזרת את המודעה הזמינה ומטעינה מראש באופן אוטומטי את המודעה הבאה ברקע.
מומלץ להימנע מהפעלת ה-method הזו עד שמוכנים להציג מודעה. שמירת מודעות במטמון מאפשרת ל-Google Mobile Ads SDK לרענן באופן אוטומטי מודעות שתוקפן פג ולבצע אופטימיזציה של המטמון.
בדוגמה הבאה אפשר לראות איך מאחזרים ומציגים מודעה שנטענה מראש:
Swift
private func showInterstitialAd() {
// Verify that the preloaded ad is available before polling.
guard isInterstitialAvailable() else {
printAndShowAlert("Preload interstitial ad is exhausted.")
return
}
// Polling returns the next available ad and load another ad in the background.
let ad = InterstitialAdPreloader.shared.ad(with: Constants.interstitialAdUnitID)
// Interact with the ad object as needed.
print("Interstitial ad response info: \(String(describing: ad?.responseInfo))")
ad?.paidEventHandler = { (value: AdValue) in
print("Interstitial ad paid event: \(value.value), \(value.currencyCode)")
}
ad?.fullScreenContentDelegate = self
ad?.present(from: self)
}
Objective-C
- (void)showInterstitialAd {
// Verify that the preloaded ad is available before polling.
if (![self isInterstitialAvailable]) {
[self logAndShowAlert:@"Preloaded interstitial ad is not available."];
return;
}
// Getting the preloaded ad loads another ad in the background.
GADInterstitialAd *ad = [GADInterstitialAdPreloader.sharedInstance adWithPreloadID:interstitialAdUnitID];
// Interact with the ad object as needed.
NSLog(@"Interstitial ad response info: %@", ad.responseInfo);
ad.paidEventHandler = ^(GADAdValue *_Nonnull value) {
NSLog(@"Interstitial ad paid event: %@ %@ ", value.value, value.currencyCode);
};
ad.fullScreenContentDelegate = self;
[ad presentFromRootViewController:self];
}
בדיקת הזמינות של מודעות לטעינה מראש
כדי לבדוק אם יש מודעות זמינות, בוחרים באחת מהאפשרויות הבאות:
אחזור של נתוני הזמינות של מודעות שנטענו מראש
בדוגמה הבאה אפשר לראות איך בודקים את זמינות המודעות:
Swift
private func isInterstitialAvailable() -> Bool {
// Verify that an ad is available before polling.
return InterstitialAdPreloader.shared.isAdAvailable(with: Constants.interstitialAdUnitID)
}
Objective-C
- (BOOL)isInterstitialAvailable {
// Verify that an ad is available before polling.
return [GADInterstitialAdPreloader.sharedInstance isAdAvailableWithPreloadID:(interstitialAdUnitID)];
}
האזנה לזמינות של מודעות שנטענו מראש
כדאי להירשם לאירועי טרום-טעינה כדי לקבל הודעה כשטרום-הטעינה של המודעות מצליח, כשטרום-הטעינה נכשל או כשמטמון המודעות מתרוקן.
אירועי טרום-טעינה מיועדים למטרות ניתוח נתונים. בתוך קריאות חוזרות (callback) של אירוע טעינה מראש:
- אל תתקשר אל
preload(). - אל תפעילו את הפונקציה
adWithPreloadID()אלא אם המודעה תוצג באופן מיידי.
בדוגמה הבאה מתבצעת הרשמה לאירועים שקשורים למודעות:
Swift
func adAvailable(forPreloadID preloadID: String, responseInfo: ResponseInfo) {
// This callback indicates that an ad is available for the specified configuration.
// No action is required here, but updating the UI can be useful in some cases.
print("Ad preloaded successfully for ad preload ID: \(preloadID)")
// ...
}
func adsExhausted(forPreloadID preloadID: String) {
// This callback indicates that all the ads for the specified configuration have been
// consumed and no ads are available to show. No action is required here, but updating
// the UI can be useful in some cases.
// [Important] Don't call AdPreloader.shared.preload or AdPreloader.shared.ad
// from adsExhausted.
print("Ad exhausted for ad preload ID: \(preloadID)")
// ...
}
func adFailedToPreload(forPreloadID preloadID: String, error: Error) {
print(
"Ad failed to load with ad preload ID: \(preloadID), Error: \(error.localizedDescription)"
)
}
Objective-C
- (void)adAvailableForPreloadID:(nonnull NSString *)preloadID responseInfo:(nonnull GADResponseInfo *)responseInfo {
// This callback indicates that an ad is available for the specified configuration.
// No action is required here, but updating the UI can be useful in some cases.
NSLog(@"Ad preloaded successfully for ad unit ID: %@", preloadID);
// ...
}
- (void)adsExhaustedForPreloadID:(nonnull NSString *)preloadID {
// This callback indicates that all the ads for the specified configuration have been
// consumed and no ads are available to show. No action is required here, but updating
// the UI can be useful in some cases.
// [Important] Don't call [GAD<Format>AdPreloader preloadForPreloadID:] or
// [GAD<Format>AdPreloader adWithPreloadID:] from adsExhaustedForPreloadID.
NSLog(@"Ad exhausted for ad preload ID: %@", preloadID);
// ...
}
- (void)adFailedToPreloadForPreloadID:(nonnull NSString *)preloadID error:(nonnull NSError *)error {
NSLog(@"Ad failed to load with ad preload ID: %@, Error: %@", preloadID, error.localizedDescription);
}
הפסקת הטעינה מראש של מודעות
אם אין צורך להציג שוב מודעות עבור מזהה טעינה מראש בסשן, אפשר להפסיק את הטעינה מראש של המודעות. כדי להפסיק את הטעינה מראש של מודעות עם מזהה טעינה מראש ספציפי, צריך להתקשר אל stopPreloadingAndRemoveAdsForPreloadID() עם מזהה טעינה מראש.
הגדרת גודל המאגר
הגודל של שטח האחסון הזמני קובע את מספר המודעות שנטענות מראש ונשמרות בזיכרון. כברירת מחדל, Google מבצעת אופטימיזציה של שטח אחסון זמני כדי ליצור איזון בין צריכת הזיכרון לבין זמן האחזור של הצגת המודעות. אם האפליקציה מציגה מודעות לפני שהמודעה הבאה נטענת, אפשר להגדיר גודל שטח אחסון זמני בהתאמה אישית כדי להגדיל את מספר המודעות שנשמרות בזיכרון. מומלץ להגדיר שטח אחסון זמני של ארבעה לכל היותר.
Swift
let preloadConfig = PreloadConfigurationV2(adUnitID: "ca-app-pub-3940256099942544/1712485313")
preloadConfig.bufferSize = 3
Objective-C
GADPreloadConfigurationV2 *preloadConfig =
[[GADPreloadConfigurationV2 alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"];
preloadConfig.bufferSize = 3;