Wczytywanie reklamy w tle (beta)

Wstępne wczytywanie reklam to funkcja zarządzana przez Google, która jest dostępna w pakiecie GMA Next-Gen SDK i która zarządza wczytywaniem i buforowaniem reklam w Twoim imieniu. Wstępne wczytywanie reklam wymaga zmiany sposobu zarządzania wczytywaniem reklam. Aby zoptymalizować wydajność za pomocą wstępnego wczytywania reklam, wyłącz niestandardowe buforowanie i przekaż tę odpowiedzialność pakietowi GMA Next-Gen SDK.

Wstępne wczytywanie reklam ma te zalety w porównaniu z ręcznym wczytywaniem reklam:

  • Zarządzanie odwołaniami: przechowuje wczytane reklamy, dzięki czemu nie musisz utrzymywać odwołań, dopóki nie będziesz gotowy do ich wyświetlenia.
  • Automatyczne ponowne wczytywanie: automatycznie wczytuje nową reklamę, gdy wyciągasz ją z pamięci podręcznej.
  • Zarządzane ponawianie: automatycznie ponawia nieudane żądania przy użyciu algorytmu Exponential back-off.
  • Obsługa wygasania: automatycznie odświeża reklamy, zanim wygasną (zwykle po godzinie).
  • Optymalizacja pamięci podręcznej: jeśli używasz pamięci podręcznej o rozmiarze większym niż 1, GMA Next-Gen SDK optymalizuje kolejność w pamięci podręcznej, aby wyświetlać najlepszą reklamę.

Z tego przewodnika dowiesz się, jak skonfigurować wstępne wczytywanie reklam, sprawdzić ich dostępność i wyświetlić wstępnie wczytaną reklamę.

Wymagania wstępne

Zanim przejdziesz do samouczka, musisz wykonać te czynności:

Rozpoczęcie wstępnego wczytywania reklam

Aby rozpocząć wstępne wczytywanie reklam, wywołaj funkcję startPreload(). Wywołaj tę metodę tylko raz na identyfikator wstępnego wczytywania. Zalecamy wywołanie tej metody na początku sesji aplikacji. Po wywołaniu funkcji startPreload(), GMA Next-Gen SDK automatycznie wstępnie wczytuje reklamy i ponawia nieudane żądania dla tych identyfikatorów wstępnego wczytywania.

Poniższy przykład rozpoczyna wstępne wczytywanie reklam:

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);
}

Pobieranie i wyświetlanie wstępnie wczytanej reklamy

Gdy używasz wstępnego wczytywania reklam, GMA Next-Gen SDK przechowuje reklamy w pamięci podręcznej. Gdy chcesz wyświetlić reklamę, wywołaj funkcję pollAd(). GMA Next-Gen SDK pobiera dostępną reklamę i automatycznie wstępnie wczytuje następną reklamę w tle.

Poniższy przykład pobiera i wyświetla wstępnie wczytaną reklamę:

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);
  }
}

Pobieranie metadanych wstępnie wczytanej reklamy

Aby pobrać metadane wstępnie wczytanej reklamy, możesz wyszukać obiekt informacji o odpowiedzi reklamy. Ten proces umożliwia sprawdzenie metadanych reklamy bez usuwania jej z pamięci podręcznej.

Poniższy przykład wyszukuje metadane wstępnie wczytanej reklamy w obiekcie informacji o odpowiedzi:

Kotlin

private fun peekAdResponseInfo(preloadId: String) {
  InterstitialAdPreloader.peekAdResponseInfo(preloadId)?.let {
    Log.d(TAG, "Peeked ad response ID: ${it.responseId}")
  }
}

Java

private void peekAdResponseInfo(String preloadId) {
  ResponseInfo responseInfo = InterstitialAdPreloader.peekAdResponseInfo(preloadId);
  if (responseInfo != null) {
    Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());
  }
}

Sprawdzanie dostępności wstępnie wczytanej reklamy

Aby sprawdzić dostępność reklamy, wykonaj jedną z tych czynności:

Sprawdzanie dostępności wstępnie wczytanej reklamy

Poniższy przykład sprawdza dostępność reklamy:

Kotlin

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

Java

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

Nasłuchiwanie dostępności wstępnie wczytanej reklamy

Zarejestruj się, aby otrzymywać powiadomienia o wstępnym wczytywaniu reklam, gdy reklamy zostaną wstępnie wczytane, nie uda się ich wstępnie wczytać lub gdy pamięć podręczna reklam zostanie wyczerpana.

Zdarzenia wstępnego wczytywania są przeznaczone do celów analitycznych. W przypadku wywołań zwrotnych zdarzeń wstępnego wczytywania:

  • Nie wywołuj funkcji startPreload().
  • Unikaj wywoływania funkcji pollAd(), chyba że reklama będzie wyświetlana natychmiast.

Poniższy przykład rejestruje zdarzenia reklamowe:

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);
}

Zatrzymywanie wstępnego wczytywania reklam

Jeśli nie musisz już wyświetlać reklam z identyfikatorem wstępnego wczytywania w sesji, możesz zatrzymać wstępne wczytywanie reklam. Aby zatrzymać wstępne wczytywanie reklam dla określonego identyfikatora wstępnego wczytywania, wywołaj funkcję destroy() z identyfikatorem wstępnego wczytywania. Aby zatrzymać wstępne wczytywanie dla wszystkich wstępnie wczytujących, wywołaj funkcję destroyAll().

Ustawianie rozmiaru bufora

Rozmiar bufora określa liczbę wstępnie wczytanych reklam przechowywanych w pamięci. Domyślnie Google optymalizuje rozmiar bufora, aby zrównoważyć zużycie pamięci i opóźnienie wyświetlania reklam. Jeśli Twoja aplikacja wyświetla reklamy, zanim zostanie wczytana następna reklama, możesz ustawić niestandardowy rozmiar bufora, aby zwiększyć liczbę reklam przechowywanych w pamięci. Zalecamy rozmiar bufora wynoszący 2 lub 3.

Limity pamięci podręcznej wstępnego wczytywania

GMA Next-Gen SDK wymusza limit całkowitej liczby wstępnie wczytanych reklam w aplikacji we wszystkich jednostkach reklamowych i identyfikatorach wstępnego wczytywania:

  • Domyślny limit: GMA Next-Gen SDK przechowuje w pamięci maksymalnie 6 wstępnie wczytanych reklam. Ten limit jest wspólny dla wszystkich formatów i identyfikatorów wstępnego wczytywania.
  • Zalecamy, aby rozmiar bufora wynosił 2 lub 3 na identyfikator wstępnego wczytywania.

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);
}