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

בחירת פלטפורמה: Android (בטא) נבחר חדש Android iOS Unity

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

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

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

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

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

לפני שממשיכים במדריך, צריך לבצע את הפעולות הבאות:

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

כדי להתחיל בטעינה מראש של מודעות, צריך להתקשר למספר startPreload(). צריך להפעיל את השיטה הזו רק פעם אחת בתחילת האפליקציה. אחרי שמפעילים את startPreload(), ‏ GMA Next-Gen SDK טוען מראש מודעות באופן אוטומטי ומנסה שוב בקשות שנכשלו להגדרות שנטענו מראש.

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

Kotlin

private fun startPreloading(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  InterstitialAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void startPreloading(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}

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

כשמשתמשים בטעינה מראש של מודעות, GMA Next-Gen SDK שומר מודעות במטמון. כשרוצים להציג מודעה, קוראים ל-pollAd(). GMA Next-Gen SDK מאחזרת את המודעה הזמינה ומטעינה מראש באופן אוטומטי את המודעה הבאה ברקע.

מומלץ להימנע מהפעלת ה-method הזו עד שמוכנים להציג מודעה. שמירת מודעות במטמון מאפשרת ל-GMA Next-Gen SDK לרענן באופן אוטומטי מודעות שתוקפן פג ולבצע אופטימיזציה של המטמון.

בדוגמה הבאה מוצגת מודעה שנטענה מראש:

Kotlin

private fun pollAndShowAd(activity: Activity, adUnitId: String) {
  // Polling returns the next available ad and loads another ad in the background.
  val ad = InterstitialAdPreloader.pollAd(adUnitId)

  // Interact with the ad object as needed.
  ad?.apply {
    Log.d(TAG, "Interstitial ad response info: ${this.getResponseInfo()}")
    this.adEventCallback =
      object : InterstitialAdEventCallback {
        override fun onAdImpression() {
          Log.d(TAG, "Interstitial ad recorded an impression.")
        }

        override fun onAdPaid(value: AdValue) {
          Log.d(TAG, "Interstitial ad onPaidEvent: ${value.valueMicros} ${value.currencyCode}")
        }
      }

    // Show the ad.
    ad.show(activity)
  }
}

Java

private void pollAndShowAd(Activity activity, String adUnitId) {
  // Polling returns the next available ad and loads another ad in the background.
  final InterstitialAd ad = InterstitialAdPreloader.pollAd(adUnitId);

  // Interact with the ad object as needed.
  if (ad != null) {
    Log.d(TAG, "Interstitial ad response info: " + ad.getResponseInfo());
    ad.setAdEventCallback(
        new InterstitialAdEventCallback() {
          @Override
          public void onAdImpression() {
            Log.d(TAG, "Interstitial ad recorded an impression.");
          }

          @Override
          public void onAdPaid(AdValue value) {
            Log.d(
                TAG,
                "Interstitial ad onPaidEvent: "
                    + value.getValueMicros()
                    + " "
                    + value.getCurrencyCode());
          }
        });

    // Show the ad.
    ad.show(activity);
  }
}

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

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

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

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

Kotlin

private fun isAdAvailable(adUnitId: String): Boolean {
  return InterstitialAdPreloader.isAdAvailable(adUnitId)
}

Java

private boolean isAdAvailable(String adUnitId) {
  return InterstitialAdPreloader.isAdAvailable(adUnitId);
}

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

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

אירועי טעינה מראש מיועדים למטרות ניתוח נתונים. בתוך קריאות חוזרות (callback) של אירוע טרום-טעינה:

  • אל תתקשר אל startPreload().
  • מומלץ להימנע מהפעלת הפונקציה pollAd() אלא אם המודעה תוצג באופן מיידי.

בדוגמה הבאה מתבצעת הרשמה לאירועים שקשורים למודעות:

Kotlin

private fun startPreloadingWithCallback(adUnitId: String) {
  val preloadCallback =
    // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
    object : PreloadCallback {
      override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
        Log.i(
          TAG,
          ("Interstitial preload ad $preloadId failed to load with error: ${adError.message}"),
        )
        // [Optional] Get the error response info for additional details.
        // val responseInfo = adError.responseInfo
      }

      override fun onAdsExhausted(preloadId: String) {
        Log.i(TAG, "Interstitial preload ad $preloadId is not available")
        // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
      }

      override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) {
        Log.i(TAG, "Interstitial preload ad $preloadId is available")
      }
    }
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)
}

Java

private void startPreloadingWithCallback(String adUnitId) {
  PreloadCallback preloadCallback =
      // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
      new PreloadCallback() {
        @Override
        public void onAdFailedToPreload(String preloadId, LoadAdError adError) {
          Log.e(
              TAG,
              String.format(
                  "Interstitial preload ad %s failed to load with error: %s",
                  preloadId, adError.getMessage()));
          // [Optional] Get the error response info for additional details.
          // ResponseInfo responseInfo = adError.getResponseInfo();
        }

        @Override
        public void onAdsExhausted(String preloadId) {
          Log.i(TAG, "Interstitial preload ad " + preloadId + " is not available");
          // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
        }

        @Override
        public void onAdPreloaded(String preloadId, ResponseInfo responseInfo) {
          Log.i(TAG, "Interstitial preload ad " + preloadId + " is available");
        }
      };

  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
}

הפסקת הטעינה מראש של מודעות

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

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

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

Kotlin

private fun setBufferSize(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 3)
  InterstitialAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void setBufferSize(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 3);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}