SDK нового поколения.
Рекламные объявления с вознаграждением — это формат, позволяющий предлагать вознаграждение за рекламу, которая автоматически появляется во время естественных переходов между приложениями. В отличие от рекламы с вознаграждением, пользователям не нужно давать согласие на просмотр таких объявлений. Для получения дополнительной информации см. руководство по рекламным объявлениям с вознаграждением .
В этом руководстве объясняется, как интегрировать рекламные объявления с вознаграждением в приложение для Android.
Прежде чем начать
Прежде чем продолжить, выполните следующие действия:
- Настройте GMA Next-Gen SDK .
- Используйте идентификатор тестового рекламного блока с вознаграждением в межстраничной рекламе
ca-app-pub-3940256099942544/5354046379.- При разработке и тестировании приложения используйте тестовые объявления, а не рабочие, запущенные рекламные кампании. Несоблюдение этого правила может привести к блокировке вашего аккаунта.
- Перед публикацией приложения замените этот ID на идентификатор вашего рекламного блока.
- Подробную информацию о тестовой рекламе в GMA Next-Gen SDK см. в разделе «Включить тестовую рекламу» .
Разберитесь в предварительном размещении рекламы.
В GMA Next-Gen SDK предварительная загрузка рекламы автоматизирует загрузку и кэширование рекламы.
Предварительная загрузка рекламы предоставляет следующие преимущества:
- Управление ссылками : сохраняет ссылки до момента показа рекламы.
- Автоматическая перезагрузка : загружает новое объявление, когда предыдущее извлекается из кэша.
- Управляемые повторные попытки : загружает новое объявление, если предыдущее не загрузилось.
- Обработка истечения срока действия : обновляет объявления перед истечением срока их действия.
- Оптимизация кэша : оптимизирует порядок кэширования для показа рекламы с наивысшим приоритетом.
Начать предварительную загрузку рекламы
Чтобы начать предварительную загрузку рекламы, вызовите метод startPreload() один раз при запуске приложения. После вызова метода startPreload() GMA Next-Gen SDK автоматически выполнит предварительную загрузку рекламы и повторит неудачные запросы на предварительно загруженные конфигурации.
В следующем примере показано, как начать предварительную загрузку рекламы:
Котлин
Java
Замените AD_UNIT_ID на идентификатор вашего рекламного блока.
В предыдущем примере показано, как использовать идентификатор рекламного блока в качестве идентификатора предварительной загрузки. Идентификатор предварительной загрузки — это строковый идентификатор, который вы создаете для идентификации конфигурации предварительной загрузки рекламы. Если вашему приложению требуется несколько конфигураций таргетинга для одного и того же идентификатора рекламного блока, передайте пользовательский строковый идентификатор.
Получите и покажите предварительно загруженную рекламу.
Чтобы показать рекламу, вызовите метод pollAd() . GMA Next-Gen SDK получает доступную рекламу и автоматически предварительно загружает следующую рекламу в фоновом режиме. Если рекламы нет, GMA Next-Gen SDK не возвращает никакой рекламы.
Когда у вас появится доступный рекламный объект, вызовите метод show для отображения рекламы. Используйте слушатель событий вознаграждения для обработки событий вознаграждения. В следующем примере показано, как получить и показать предварительно загруженную рекламу:
Котлин
Java
Не вызывайте метод pollAd() до тех пор, пока не будете готовы показать рекламу. Чтобы прочитать информацию об ответе на объявление, не показывая его, см. раздел «Чтение информации об ответе» .
Слушайте рекламные события
Перед показом рекламы отслеживайте события, связанные с рекламой. В следующем примере показано, как зарегистрировать обратные вызовы для событий, связанных с рекламой:
Котлин
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. } }); }
Необязательно: Проверить обратные вызовы серверной проверки (SSV).
Если вашему приложению требуются дополнительные данные в коллбэках проверки на стороне сервера , используйте функцию пользовательских данных в межстраничных объявлениях с вознаграждением. Любое строковое значение, заданное для объекта межстраничного объявления с вознаграждением, передается в параметр запроса custom_data коллбэка SSV. Если значение пользовательских данных не задано, значение параметра запроса custom_data не будет присутствовать в коллбэке SSV.
Приведенный ниже пример кода демонстрирует, как задать пользовательские данные для объекта межстраничной рекламы с вознаграждением перед показом рекламы:
Котлин
Java
Замените SAMPLE_CUSTOM_DATA_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.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 автоматически предварительно загружает рекламу и повторяет неудачные запросы для получения предварительно загруженных конфигураций.
(Необязательно): Проверьте доступность рекламы.
Если вам нужно узнать, доступна ли реклама, проверьте её доступность. В следующем примере показано, как проверить доступность предварительно загруженной рекламы:
Котлин
private fun isAdAvailable(adUnitId: String): Boolean { return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId) }
Java
private boolean isAdAvailable(String adUnitId) { return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId); }
Необязательно: укажите размер буфера.
Размер буфера определяет количество предварительно загруженных рекламных объявлений, хранящихся в памяти. По умолчанию Google оптимизирует размер буфера для баланса между потреблением памяти и задержкой показа рекламы. Вы можете установить собственный размер буфера, чтобы увеличить количество рекламных объявлений, хранящихся в памяти. Мы рекомендуем максимальный размер буфера в 4 объявления.
В следующем примере показано, как установить размер буфера в 4 предварительно загруженных рекламных объявления:
Котлин
val adRequest = AdRequest.Builder(adUnitId).build() // Maintain small or default buffer size unless rapid transitions are expected. val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 4) RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig)
Java
// Maintain small or default buffer size unless rapid transitions are expected. AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 4); RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig);
Ограничения предварительной загрузки кэша
GMA Next-Gen SDK устанавливает общеприложениевое ограничение на общее количество предварительно загруженных рекламных объявлений по всем рекламным блокам и идентификаторам предварительной загрузки:
- Ограничение по умолчанию: Google хранит в памяти максимум 6 предварительно загруженных объявлений. Это ограничение действует для всех форматов и идентификаторов предварительной загрузки.
- Мы рекомендуем устанавливать размер буфера равным 2 или 3 на каждый идентификатор предварительной загрузки.
(Необязательно) Остановить предварительную загрузку рекламы
Если вам не нужно снова показывать рекламу с определенным идентификатором предварительной загрузки в рамках текущей сессии, вы можете остановить предварительную загрузку рекламы. Чтобы остановить загрузку рекламы с определенным идентификатором предварительной загрузки, вызовите метод destroy() с указанием идентификатора предварительной загрузки. Вызов метода destroy() удаляет из кэша всю предварительно загруженную рекламу, связанную с этим идентификатором.
Следующий пример показывает, как остановить предварительную загрузку рекламы:
Котлин
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); }
Необязательно: ознакомьтесь с информацией об ответе.
Прочитайте информацию об ответе следующего предварительно загруженного объявления, не удаляя объявление из кэша.
В следующем примере показано, как считывать информацию о следующем предварительно загруженном рекламном ответе:
Котлин
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());