טעינה מראש של מודעות (בטא)

בחירת פלטפורמה: iOS Unity Flutter Android (Legacy)

טעינת מודעה מראש היא תכונה לטעינת מודעות שמנוהלת על ידי Google ב-Google Mobile Ads SDK. התכונה הזו מנהלת את הטעינה של המודעות ואת השמירה שלהן במטמון בשמכם. טעינת מודעה מראש מחייבת שינוי באופן שבו אתם מנהלים את טעינת המודעות. כדי לשפר את הביצועים באמצעות טעינה מראש של מודעות, צריך להשבית את השמירה במטמון בהתאמה אישית ולהעביר את האחריות הזו אל Google Mobile Ads SDK.

לטעינת מודעות מראש יש יתרונות לעומת טעינה ידנית של מודעות:

  • ניהול הפניות: מחזיק מודעות שנטענו כדי שלא תצטרכו לשמור הפניות עד שתהיו מוכנים להציג אותן.
  • טעינה מחדש אוטומטית: טעינה אוטומטית של מודעה חדשה כשמוציאים מודעה מהמטמון.
  • ניסיונות חוזרים מנוהלים: ניסיונות חוזרים אוטומטיים של בקשות שנכשלו באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
  • טיפול בתפוגה: רענון אוטומטי של המודעות לפני שהתוקף שלהן פג (בדרך כלל אחרי שעה).
  • אופטימיזציה של מטמון: אם משתמשים בגודל מטמון גדול מאחד, Google Mobile Ads SDK המערכת מבצעת אופטימיזציה של סדר המטמון כדי להציג את המודעה הטובה ביותר.

במדריך הזה מוסבר איך להגדיר טעינה מראש של מודעות, איך לבדוק אם יש מודעות לטעינה מראש ואיך להציג את המודעה שנטענה מראש.

דרישות מוקדמות

לפני שממשיכים במדריך הזה, צריך להגדיר את Google Mobile Ads SDK.

התחלת טעינה מראש של מודעות

כשהאפליקציה מתחילה, קוראים ל-preload פעם אחת. אחרי שמפעילים את השיטה preload, המודעות נטענות מראש באופן אוטומטי על ידי Google Mobile Ads SDK, ומתבצע ניסיון חוזר לבקשות שלא הצליחו להיטען מראש.

בדוגמה הבאה מוצג איך מתחילים לטעון מראש מודעות:

Swift

// Start the preloading initialization process.
let request = Request()
let interstitialConfig = PreloadConfigurationV2(
  adUnitID: adUnitID, request: request)
InterstitialAdPreloader.shared.preload(
  for: adUnitID, configuration: interstitialConfig, delegate: self)

Objective-C

// Start the preloading initialization process.
GADRequest *request = [GADRequest request];
GADPreloadConfigurationV2 *interstitialConfig =
    [[GADPreloadConfigurationV2 alloc] initWithAdUnitID:adUnitID
                                                request:request];

[GADInterstitialAdPreloader.sharedInstance preloadForPreloadID:adUnitID
                                                 configuration:interstitialConfig
                                                      delegate:self];

אחזור והצגה של המודעה שנטענה מראש

כשמשתמשים בטעינת מודעה מראש, Google Mobile Ads SDK שומר מודעות במטמון. כשרוצים להציג מודעה, מפעילים את method‏ adWithPreloadID. ‫Google Mobile Ads SDK מאחזר מודעה זמינה וטוען מראש באופן אוטומטי את המודעה הבאה ברקע.

מומלץ להימנע מהפעלת השיטה adWithPreloadID עד שמוכנים להציג מודעה. שמירת מודעות במטמון מאפשרת Google Mobile Ads SDK לרענן באופן אוטומטי מודעות שתוקף השימוש בהן פג ולבצע אופטימיזציה של המטמון.

בדוגמה הבאה אפשר לראות איך מאחזרים ומציגים מודעה שנטענה מראש:

Swift

private func showInterstitialAd(adUnitID: String) {
  // Verify that the preloaded ad is available before polling.
  guard isInterstitialAvailable(adUnitID: adUnitID) else {
    print("Preloaded interstitial ad is not available.")
    return
  }

  // Polling returns the next available ad and loads another ad in the background.
  let ad = InterstitialAdPreloader.shared.ad(with: adUnitID)

  // 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)showInterstitialAdWithAdUnitID:(nonnull NSString *)adUnitID {
  // Verify that the preloaded ad is available before polling.
  if (![self isInterstitialAvailableWithAdUnitID:adUnitID]) {
    NSLog(@"Preloaded interstitial ad is not available.");
    return;
  }

  // Getting the preloaded ad loads another ad in the background.
  GADInterstitialAd *ad =
      [GADInterstitialAdPreloader.sharedInstance adWithPreloadID:adUnitID];

  // 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 getInterstitialAdResponseInfo(preloadID: String) {
  // Get the response info for the preloaded ad.
  if let responseInfo = InterstitialAdPreloader.shared.responseInfo(
    with: preloadID)
  {
    print("Ad response ID: \(responseInfo.responseIdentifier ?? "")")
  }
}

Objective-C

- (void)getInterstitialAdResponseInfoWithPreloadID:(nonnull NSString *)preloadID {
  // Get the response info for the preloaded ad.
  GADResponseInfo *responseInfo =
      [GADInterstitialAdPreloader.sharedInstance
          adResponseInfoWithPreloadID:preloadID];
  if (responseInfo) {
    NSLog(@"Ad response ID: %@", responseInfo.responseIdentifier);
  }
}

בדיקת הזמינות של מודעות לטעינה מראש

כדי לבדוק אם יש מודעות זמינות, בוחרים באחת מהאפשרויות הבאות:

קבלת מידע על הזמינות של מודעות שנטענו מראש

בדוגמה הבאה אפשר לראות איך בודקים אם יש מודעות זמינות:

Swift

private func isInterstitialAvailable(adUnitID: String) -> Bool {
  // Verify that an ad is available before polling.
  return InterstitialAdPreloader.shared.isAdAvailable(with: adUnitID)
}

Objective-C

- (BOOL)isInterstitialAvailableWithAdUnitID:(nonnull NSString *)adUnitID {
  // Verify that an ad is available before polling.
  return [GADInterstitialAdPreloader.sharedInstance isAdAvailableWithPreloadID:adUnitID];
}

האזנה לזמינות של מודעות שנטענו מראש

כדאי להירשם לאירועי טרום-טעינה כדי לקבל התראה כשטרום-הטעינה של המודעות מצליח, כשהוא נכשל או כשמטמון המודעות מתרוקן.

אירועי טעינה מראש מיועדים למטרות ניתוח נתונים. בתוך קריאות חוזרות (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.
  // Don't call InterstitialAdPreloader.shared.preload or
  // InterstitialAdPreloader.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.
  // 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 עם מזהה טעינה מראש. כדי להפסיק את הטעינה מראש של כל הטוענים מראש, צריך להתקשר אל stopPreloadingAndRemoveAllAds.

הגדרת גודל המאגר

הגודל של שטח האחסון הזמני קובע את מספר המודעות שנטענות מראש ונשמרות בזיכרון. כברירת מחדל, Google מבצעת אופטימיזציה של שטח אחסון זמני כדי לאזן בין צריכת הזיכרון לבין זמן האחזור של הצגת המודעות. אם האפליקציה מציגה מודעות לפני שהמודעה הבאה נטענת, אפשר להגדיר גודל שטח אחסון זמני בהתאמה אישית כדי להגדיל את מספר המודעות שנשמרות בזיכרון.

Swift

let preloadConfig = PreloadConfigurationV2(adUnitID: adUnitID)
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
preloadConfig.bufferSize = 2

Objective-C

GADPreloadConfigurationV2 *preloadConfig =
    [[GADPreloadConfigurationV2 alloc] initWithAdUnitID:adUnitID];
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
preloadConfig.bufferSize = 2;

מגבלות של טעינה מראש למטמון

‫Google Mobile Ads SDK אוכף מגבלה ברמת האפליקציה על המספר הכולל של מודעות שנטענו מראש בכל יחידות המודעות ובכל מזהי הטעינה מראש:

  • מגבלת ברירת המחדל: Google Mobile Ads SDK מכיל לכל היותר 6 מודעות טעונות מראש בזיכרון. המגבלה הזו משותפת לכל הפורמטים ולכל מזהי הטעינה מראש.
  • מומלץ להגדיר שטח אחסון זמני של שניים לכל מזהה טעינה מראש.