Предварительная загрузка объявлений автоматизирует загрузку, кеширование и перезагрузку объявлений в GMA Next-Gen SDK. Если вы используете одиночную загрузку, перейдите на предварительную загрузку объявлений, чтобы получить доступ к автоматическому управлению жизненным циклом, управляемым повторным попыткам и оптимизированному выбору объявлений. Подробнее о предварительной загрузке объявлений… Предварительная загрузка объявлений поддерживается для форматов объявлений при запуске приложения, межстраничных объявлений, объявлений с вознаграждением и межстраничных объявлений с вознаграждением.
В этой статье рассказывается, как перейти с однократной загрузки объявлений на предварительную загрузку объявлений. В этом руководстве в качестве примера используются межстраничные объявления, но вы можете применить описанный процесс к любым поддерживаемым форматам объявлений.
Требования
Прежде чем продолжить, выполните следующие действия:
- Настройте GMA Next-Gen SDK.
- У вас уже реализована загрузка одного объявления.
- Включите тестовые объявления, чтобы проверить реализацию с помощью тестовых рекламных блоков.
Как запрашивать объявления с предварительной загрузкой
При обычной загрузке для каждого запроса объявления запрашивается одно объявление. Чтобы использовать предварительную загрузку объявлений, запустите загрузчик, указав идентификатор и конфигурацию предварительной загрузки.
Ниже приведены примеры запросов объявлений с однократной и предварительной загрузкой.
Kotlin
Одна загрузка:
// Request a single ad. val adRequest = AdRequest.Builder(adUnitId).build() InterstitialAd.load(adRequest, adLoadCallback)
Предварительная загрузка объявлений:
// Start the preloader once with a preload configuration. val adRequest = AdRequest.Builder(adUnitId).build() val preloadConfig = PreloadConfiguration(adRequest) InterstitialAdPreloader.start(adUnitId, preloadConfig)
Java
Одна загрузка:
// Request a single ad. AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); InterstitialAd.load(adRequest, adLoadCallback);
Предварительная загрузка объявлений
// Start the preloader once with a preload configuration. AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest); InterstitialAdPreloader.start(adUnitId, preloadConfig);
Переход на обратные вызовы предварительной загрузки
При одиночной загрузке вы прикрепляете обратный вызов загрузки к каждому отдельному запросу объявления. При предварительной загрузке объявлений вы регистрируете прослушиватель обратного вызова, чтобы отслеживать обновления кеша предзагрузчика. Эти обратные вызовы уведомляют приложение о том, что предварительная загрузка объявлений завершена, не удалась или кэш исчерпан.
В примерах ниже показано, как зарегистрировать обратные вызовы предзагрузки для одиночной предзагрузки и предварительной загрузки объявлений.
Kotlin
Одна загрузка:
// Listen for single ad request load results. val adLoadCallback = object : AdLoadCallback<InterstitialAd> { override fun onAdLoaded(ad: InterstitialAd) { // Ad loaded for a single request. } override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, "Ad failed to load: ${adError.message}") } } InterstitialAd.load(adRequest, adLoadCallback)
Предварительная загрузка объявлений:
// Observe cache updates across multiple ads. val preloadCallback = object : PreloadCallback { override fun onAdPreloaded( preloadId: String, responseInfo: ResponseInfo, ) { // Ad preloaded into the cache and is ready to show. } override fun onAdFailedToPreload( preloadId: String, adError: LoadAdError, ) { Log.d(TAG, "Ad failed to preload: ${adError.message}") } override fun onAdsExhausted(preloadId: String) { // All preloaded ads in the cache have been shown. Log.d(TAG, "Ads exhausted for: $preloadId") } } InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)
Java
Одна загрузка:
// Listen for single ad request load results. AdLoadCallback<InterstitialAd> adLoadCallback = new AdLoadCallback<InterstitialAd>() { @Override public void onAdLoaded(@NonNull InterstitialAd ad) { // Ad loaded for a single request. } @Override public void onAdFailedToLoad(@NonNull LoadAdError adError) { Log.d(TAG, "Ad failed to load: " + adError.getMessage()); } }; InterstitialAd.load(adRequest, adLoadCallback);
Предварительная загрузка объявлений:
// Observe cache updates across multiple ads. PreloadCallback preloadCallback = new PreloadCallback() { @Override public void onAdPreloaded( @NonNull String preloadId, @NonNull ResponseInfo responseInfo) { // Ad preloaded into the cache and is ready to show. } @Override public void onAdFailedToPreload( @NonNull String preloadId, @NonNull LoadAdError adError) { Log.d(TAG, "Ad failed to preload: " + adError.getMessage()); } @Override public void onAdsExhausted(@NonNull String preloadId) { // All preloaded ads in the cache have been shown. Log.d(TAG, "Ads exhausted for: " + preloadId); } }; InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
Предзагрузчик вызывает методы обратного вызова, когда GMA Next-Gen SDK загружает или кеширует объявление, а также когда приложение показывает объявление.
Показ объявлений из кеша
При однократной загрузке вы сохраняете загруженное объявление в переменной и показываете его, когда оно становится доступно. При предварительной загрузке объявление извлекается непосредственно из кеша. В обоих случаях прикрепите прослушиватель событий к объявлению до того, как оно будет показано.
В примерах ниже сравнивается показ объявлений с предварительной загрузкой объявлений и без нее.
Kotlin
Одна загрузка:
// Retrieve the ad from a saved variable. val interstitialAd = this.interstitialAd ?: return // Display the ad. interstitialAd.show(activity)
Предварительная загрузка объявлений:
// Retrieve the ad directly from the preloader cache. val interstitialAd = InterstitialAdPreloader.pollAd(adUnitId) ?: return // Display the ad. interstitialAd.show(activity)
Java
Одна загрузка:
// Retrieve the ad from a saved variable. InterstitialAd interstitialAd = this.interstitialAd; if (interstitialAd == null) { return; } // Display the ad. interstitialAd.show(activity);
Предварительная загрузка объявлений:
// Retrieve the ad directly from the preloader cache. InterstitialAd interstitialAd = InterstitialAdPreloader.pollAd(adUnitId); if (interstitialAd == null) { return; } // Display the ad. interstitialAd.show(activity);
Удалите кеширование и перезагрузку вручную
При получении объявления предзагрузчик автоматически загружает замену. В отличие от одиночной загрузки, вам не нужно вручную сохранять ссылки на объявления или писать логику перезагрузки.
Удалите из кода следующие шаблоны:
- Кэширование переменных участников. Удалите переменные участников, в которых хранятся объекты объявлений.
- Обновление вручную. Удаляйте вызовы загрузки после того, как пользователь закроет объявление или оно не будет показано.
- Специальные таймеры повторных попыток. Удалите обработчики повторных попыток, циклы отсрочки и таймеры. GMA Next-Gen SDK автоматически повторяет неудачные запросы на предзагрузку.
Сравнение полных примеров
Ниже приведены примеры реализации межстраничных объявлений до и после перехода на предварительную загрузку объявлений.
Kotlin
Одна загрузка:
// 1. Maintain a member variable to store the ad. private var interstitialAd: InterstitialAd? = null // 2. Load the ad and listen for load completion. private fun loadAd() { val adRequest = AdRequest.Builder(adUnitId).build() InterstitialAd.load( adRequest, object : AdLoadCallback<InterstitialAd> { override fun onAdLoaded(ad: InterstitialAd) { interstitialAd = ad } override fun onAdFailedToLoad(adError: LoadAdError) { interstitialAd = null } }, ) } // 3. Show the saved ad. private fun showAd(activity: Activity) { val interstitialAd = this.interstitialAd ?: return interstitialAd.adEventCallback = object : InterstitialAdEventCallback { override fun onAdDismissedFullScreenContent() { // Reload the ad after dismissal in single-load integrations. loadAd() } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError, ) { Log.d(TAG, "Ad failed to show: ${fullScreenContentError.message}") } } interstitialAd.show(activity) }
Предварительная загрузка объявлений:
// 1. Start preloading with a callback to listen for loaded ads. private fun startPreloading(adUnitId: String) { val preloadCallback = object : PreloadCallback { override fun onAdPreloaded( preloadId: String, responseInfo: ResponseInfo, ) { // Ad preloaded successfully. } override fun onAdFailedToPreload( preloadId: String, adError: LoadAdError, ) { Log.d(TAG, "Ad failed to preload: ${adError.message}") } } val adRequest = AdRequest.Builder(adUnitId).build() val preloadConfig = PreloadConfiguration(adRequest) InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback) } // 2. Show the ad immediately after polling. private fun showAd(activity: Activity, adUnitId: String) { val interstitialAd = InterstitialAdPreloader.pollAd(adUnitId) ?: return interstitialAd.adEventCallback = object : InterstitialAdEventCallback { override fun onAdDismissedFullScreenContent() { // Preloading automatically fetches a replacement ad. } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError, ) { Log.d(TAG, "Ad failed to show: ${fullScreenContentError.message}") } } interstitialAd.show(activity) }
Java
Одна загрузка:
// 1. Maintain a member variable to store the ad. private InterstitialAd interstitialAd; // 2. Load the ad and listen for load completion. private void loadAd() { AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); InterstitialAd.load( adRequest, new AdLoadCallback<InterstitialAd>() { @Override public void onAdLoaded(@NonNull InterstitialAd ad) { interstitialAd = ad; } @Override public void onAdFailedToLoad(@NonNull LoadAdError adError) { interstitialAd = null; } }); } // 3. Show the saved ad. private void showAd(Activity activity) { if (interstitialAd == null) { return; } interstitialAd.setAdEventCallback( new InterstitialAdEventCallback() { @Override public void onAdDismissedFullScreenContent() { // Reload the ad after dismissal in single-load integrations. loadAd(); } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { Log.d( TAG, "Ad failed to show: " + fullScreenContentError.getMessage()); } }); interstitialAd.show(activity); }
Предварительная загрузка объявлений
// 1. Start preloading with a callback to listen for loaded ads. private void startPreloading(String adUnitId) { PreloadCallback preloadCallback = new PreloadCallback() { @Override public void onAdPreloaded( @NonNull String preloadId, @NonNull ResponseInfo responseInfo) { // Ad preloaded successfully. } @Override public void onAdFailedToPreload( @NonNull String preloadId, @NonNull LoadAdError adError) { Log.d(TAG, "Ad failed to preload: " + adError.getMessage()); } }; AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest); InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback); } // 2. Show the ad immediately after polling. private void showAd(Activity activity, String adUnitId) { InterstitialAd interstitialAd = InterstitialAdPreloader.pollAd(adUnitId); if (interstitialAd == null) { return; } interstitialAd.setAdEventCallback( new InterstitialAdEventCallback() { @Override public void onAdDismissedFullScreenContent() { // Preloading automatically fetches a replacement ad. } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { Log.d( TAG, "Ad failed to show: " + fullScreenContentError.getMessage()); } }); interstitialAd.show(activity); }
Дальнейшие действия
Чтобы настроить функции предзагрузки, интегрировать форматы объявлений и протестировать реализацию, изучите следующие ресурсы:
- Как настроить объявления при запуске приложения
- Как настроить баннеры
- Как настроить межстраничные объявления
- Загрузка нативного объявления
- Как настроить объявления с вознаграждением
- Как настроить межстраничные объявления с вознаграждением