SDK нового поколения.
Рекламные объявления с вознаграждением — это формат, позволяющий предлагать вознаграждение за рекламу, которая автоматически появляется во время естественных переходов между приложениями. В отличие от рекламы с вознаграждением, пользователям не нужно давать согласие на просмотр таких объявлений.
В этом руководстве объясняется, как интегрировать рекламные объявления с вознаграждением в приложение для Android.
Прежде чем начать
Прежде чем продолжить, выполните следующие действия:
- Настройте GMA Next-Gen SDK .
- Используйте тестовый идентификатор рекламного блока с вознаграждением в межстраничной
/21775744923/example/rewarded-interstitial.- При разработке и тестировании приложения используйте тестовые объявления, а не рабочие, запущенные рекламные кампании. Несоблюдение этого правила может привести к блокировке вашего аккаунта.
- Перед публикацией приложения замените этот ID на идентификатор вашего рекламного блока.
- Подробную информацию о тестовой рекламе в GMA Next-Gen SDK см. в разделе «Включить тестовую рекламу» .
Разберитесь в предварительном размещении рекламы.
В GMA Next-Gen SDK предварительная загрузка рекламы автоматизирует загрузку и кэширование рекламы.
Предварительная загрузка рекламы предоставляет следующие преимущества:
- Управление ссылками : сохраняет ссылки до момента показа рекламы.
- Автоматическая перезагрузка : загружает новое объявление, когда предыдущее извлекается из кэша.
- Управляемые повторные попытки : загружает новое объявление, если предыдущее не загрузилось.
- Обработка истечения срока действия : обновляет объявления перед истечением срока их действия.
- Оптимизация кэша : оптимизирует порядок кэширования для показа рекламы с наивысшим приоритетом.
Начать предварительную загрузку рекламы
Чтобы начать предварительную загрузку рекламы, вызовите метод start один раз при запуске приложения. После вызова метода start 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());