Межстраничные объявления с вознаграждением – это формат, который позволяет предлагать пользователям бонусы за просмотр объявлений, автоматически появляющихся при переходах между экранами приложения. В отличие от обычных объявлений с вознаграждением для показа межстраничных объявлений с вознаграждением не требуется согласие пользователя. Подробнее о межстраничных объявлениях с вознаграждением…
В этом руководстве рассказывается, как интегрировать межстраничные объявления с вознаграждением в приложение для Android.
Подготовка
Прежде чем продолжить, выполните следующие действия:
- Настройте GMA Next-Gen SDK.
- Используйте идентификатор тестового рекламного блока для межстраничных объявлений с вознаграждением:
ca-app-pub-3940256099942544/5354046379.- При создании и тестировании приложения используйте тестовые объявления, а не реальные. Если вы не будете использовать тестовый идентификатор рекламного блока, Google может заблокировать ваш аккаунт.
- Перед публикацией приложения замените этот идентификатор на идентификатор рекламного блока.
- Подробнее GMA Next-Gen SDK о включении тестовых объявлений…
Предварительная загрузка объявлений (бета)
Предварительная загрузка объявлений в GMA Next-Gen SDK автоматизирует загрузку и кеширование объявлений.
Предварительная загрузка объявлений дает следующие преимущества:
- Управление ссылками. Ссылки сохраняются до показа объявлений.
- Автоматическая перезагрузка. Новое объявление загружается, когда одно из них извлекается из кеша.
- Управляемые повторные попытки. Если не удается загрузить объявление, выполняется повторная попытка.
- Обработка истечения срока действия. Объявления обновляются до истечения срока действия.
- Оптимизация кеша. Порядок кеширования оптимизируется так, чтобы показывать объявления с наивысшим приоритетом.
Как начать предварительную загрузку объявлений
Чтобы начать предварительную загрузку объявлений, вызовите метод start один раз при запуске приложения. После вызова метода start
GMA Next-Gen SDKавтоматически выполняется предварительная загрузка объявлений и повторные попытки выполнить неудачные запросы для
предварительно загруженных конфигураций.
В примере ниже показано, как начать предварительную загрузку объявлений:
Kotlin
Java
Замените AD_UNIT_ID идентификатором рекламного блока.
В предыдущем примере показано, как использовать идентификатор рекламного блока в качестве идентификатора предварительной загрузки. Идентификатор предварительной загрузки – это строка, которую вы создаете, чтобы идентифицировать конфигурацию предварительной загрузки объявлений. Если для одного и того же идентификатора рекламного блока в вашем приложении требуется несколько конфигураций таргетинга, передайте специальный строковый идентификатор.
Как получить и показать предзагруженное объявление
Чтобы показать объявление, вызовите метод pollAd.
GMA Next-Gen SDK получает доступное объявление и автоматически предварительно загружает следующее объявление в фоновом режиме. Если объявление недоступно, GMA Next-Gen SDK не возвращает никаких объявлений.
show, чтобы показать объявление.
Используйте прослушиватель вознаграждений для обработки событий вознаграждения. В следующем примере показано, как получить и показать предварительно загруженное объявление:
Kotlin
Java
Пока вы не будете готовы показывать объявление, не вызывайте метод pollAd. Чтобы прочитать информацию об ответе на объявление, не показывая его, ознакомьтесь с разделом Как прочитать информацию об ответе.
Как отслеживать события объявлений
Перед показом объявления прослушайте события объявления. В примере ниже показано, как зарегистрировать обратные вызовы для событий объявлений:
Kotlin
private fun listenToAdEvents() { // Listen for ad events. val ad = rewardedInterstitialAd if (ad == null) { Log.e(TAG, "Rewarded interstitial ad is not ready yet.") return } ad.adEventCallback = object : RewardedInterstitialAdEventCallback { override fun onAdShowedFullScreenContent() { // Rewarded interstitial ad did show. } override fun onAdDismissedFullScreenContent() { // Rewarded interstitial ad did dismiss. rewardedInterstitialAd = null } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError ) { // Rewarded interstitial ad failed to show. Log.e(TAG, "Rewarded interstitial ad failed to show: ${fullScreenContentError.message}") } override fun onAdImpression() { // Rewarded interstitial ad did record an impression. } override fun onAdClicked() { // Rewarded interstitial ad did record a click. } } }
Java
private void listenToAdEvents() { // Listen for ad events. if (rewardedInterstitialAd == null) { Log.e(TAG, "Rewarded interstitial ad is not ready yet."); return; } rewardedInterstitialAd.setAdEventCallback( new RewardedInterstitialAdEventCallback() { @Override public void onAdShowedFullScreenContent() { // Rewarded interstitial ad did show. } @Override public void onAdDismissedFullScreenContent() { // Rewarded interstitial ad did dismiss. rewardedInterstitialAd = null; } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { // Rewarded interstitial ad failed to show. Log.e( TAG, "Rewarded interstitial ad failed to show: " + fullScreenContentError.getMessage()); } @Override public void onAdImpression() { // Rewarded interstitial ad did record an impression. } @Override public void onAdClicked() { // Rewarded interstitial ad did record a click. } }); }
Как проверить обратные вызовы проверки на стороне сервера (необязательно)
Если для проверки на стороне сервера в вашем приложении требуются дополнительные данные, используйте функцию специальных данных в объявлениях. Серверы объявлений Google передают любое строковое значение, заданное для объекта объявления, в параметр запроса custom_data обратного вызова SSV. Если значение специальных данных не задано, значение параметра запроса custom_data отсутствует в обратном вызове SSV.
В следующем примере показано, как задать специальные данные для объекта объявления до его показа:
Kotlin
Java
Замените SAMPLE_CUSTOM_DATA_STRING собственными данными.
Как отслеживать события предварительной загрузки (необязательно)
Когда вы начнете предварительную загрузку объявлений, зарегистрируйтесь для получения уведомлений о том, что объявления успешно загружены, не загружены или кеш объявлений исчерпан.
В примере ниже показано, как зарегистрироваться для получения событий предзагрузки объявлений:
Kotlin
val preloadCallback = // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback. object : PreloadCallback { override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) { Log.d( TAG, "Rewarded interstitial preload ad $preloadId failed to load with error: ${adError.message}", ) } override fun onAdsExhausted(preloadId: String) { Log.i(TAG, "Rewarded 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, "Rewarded interstitial preload ad $preloadId is available") } } val adRequest = AdRequest.Builder(adUnitId).build() val preloadConfig = PreloadConfiguration(adRequest) RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)
Java
PreloadCallback preloadCallback = // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback. new PreloadCallback() { @Override public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) { Log.d( TAG, String.format( "Rewarded 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(@NonNull String preloadId) { Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is not available"); // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted. } @Override public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) { Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is available"); } }; AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest); RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
Если объявление не загружается, GMA Next-Gen SDK автоматически предзагружает объявления и повторяет неудачные запросы для предзагруженных конфигураций.
Как проверить доступность объявления (необязательно)
Если вам нужно узнать, доступно ли объявление, проверьте его доступность. В следующем примере проверяется, доступно ли предварительно загруженное объявление:
Kotlin
private fun isAdAvailable(adUnitId: String): Boolean { return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId) }
Java
private boolean isAdAvailable(String adUnitId) { return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId); }
Как задать размер буфера (необязательно)
Размер буфера определяет количество предварительно загруженных объявлений, хранящихся в памяти. По умолчанию Google оптимизирует размер буфера, чтобы сбалансировать потребление памяти и задержку показа рекламы. Вы можете задать собственный размер буфера, чтобы увеличить количество объявлений, хранящихся в памяти. Мы рекомендуем использовать буфер, в котором будет два предварительно загруженных объявления.
В следующем примере показано, как задать размер буфера:
Kotlin
private fun setBufferSize(adUnitId: String) { val adRequest = AdRequest.Builder(adUnitId).build() // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads. val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 2) RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig) }
Java
private void setBufferSize(String adUnitId) { AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads. PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 2); RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig); }
Лимиты предварительной загрузки кеша
GMA Next-Gen SDK устанавливает ограничение на общее количество предварительно загруженных объявлений в приложении для всех рекламных блоков и идентификаторов предварительной загрузки:
- Ограничение по умолчанию: Google хранит в памяти не более шести предварительно загруженных объявлений. Это ограничение распространяется на все форматы и идентификаторы предварительной загрузки.
- Мы рекомендуем задать для каждого идентификатора предзагрузки размер буфера, равный двум.
Как отключить предварительную загрузку рекламы (необязательно)
Если вам не нужно показывать объявления с определенным идентификатором предварительной загрузки в течение сеанса, вы можете остановить предварительную загрузку. Чтобы прекратить загрузку объявлений для определенного идентификатора предварительной загрузки, вызовите метод destroy с этим идентификатором. При вызове метода destroy из кеша удаляются все предварительно загруженные объявления, связанные с идентификатором предварительной загрузки.
В следующем примере показано, как отключить предварительную загрузку объявлений:
Kotlin
private fun stopPreloading(adUnitId: String) { // Stops the preloading and destroy preloaded ads. RewardedInterstitialAdPreloader.destroy(adUnitId) }
Java
private void stopPreloading(String adUnitId) { // Stops the preloading and destroy preloaded ads. RewardedInterstitialAdPreloader.destroy(adUnitId); }
Как посмотреть информацию об ответе (необязательно)
Прочитать информацию об ответе следующего предварительно загруженного объявления, не удаляя объявление из кеша.
В примере ниже показано, как получить информацию о следующем предварительно загруженном объявлении:
Kotlin
val responseInfo = RewardedInterstitialAdPreloader.peekAdResponseInfo(preloadId) if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info.") return } Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")
Java
ResponseInfo responseInfo = RewardedInterstitialAdPreloader.peekAdResponseInfo(preloadId); if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info."); return; } Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());