Реклама с вознаграждением (SwiftUI)
Реклама с вознаграждением — популярный полноэкранный формат объявления, за просмотр которого пользователь получает поощрение.
Показ данной рекламы активируется пользователем, например для получения бонуса или дополнительной жизни в игре.
Высокая мотивация пользователя делает данный формат рекламы наиболее популярным и прибыльным в бесплатных приложениях.
Внешний вид
Это руководство покажет, как интегрировать рекламу с вознаграждением в iOS-приложение на SwiftUI. В дополнение к примерам кода и инструкции оно содержит рекомендации по использованию данного формата рекламы, а также ссылки на дополнительные ресурсы.
Пререквизит
- Выполните шаги по интеграции sdk, описанные в Быстром старте.
- Заранее проинициализируйте рекламный SDK.
- Убедитесь, что используете самую актуальную версию Yandex Mobile Ads SDK, а в случае использовании медиации — наиболее свежую версию единой сборки.
Имплементация
Основные шаги по интеграции рекламы с вознаграждением в SwiftUI:
- Повесить модификатор
.rewardedAd(isPresented:request:onEvent:). - Управлять загрузкой через
Binding<AdRequest?>и показом черезBinding<Bool>. - Обрабатывать события
RewardedAdEventв замыканииonEvent. - Выдать пользователю награду за просмотр рекламы при событии
.didReward.
Особенности подключения рекламы с вознаграждением
-
Попытка загрузить новое объявление при получении ошибки в событии
.didFailToLoadнастоятельно не рекомендуется. Если вам необходимо повторить загрузку из обработчика ошибки, ограничьте повторные попытки загрузки рекламы, чтобы избежать постоянных неудачных запросов за рекламой в случае ограничений подключения к сети. -
Держите модификатор на view, который живёт на протяжении сценария показа.
Загрузка рекламы
Для загрузки рекламы с вознаграждением задайте ненулевой AdRequest в binding, переданный в .rewardedAd.
Для уведомления об успешной или неудачной загрузке и остальных этапах используйте onEvent с RewardedAdEvent.
import SwiftUI
import YandexMobileAds
struct RewardedView: View {
@State private var adRequest: AdRequest?
@State private var isPresented = false
var body: some View {
VStack {
Button("Загрузить и показать") {
adRequest = AdRequest(adUnitID: "R-M-XXXXX-YY")
}
}
.rewardedAd(isPresented: $isPresented, request: $adRequest) { event in
switch event {
case .didLoad:
isPresented = true
case .didDismiss, .didFailToShow, .didFailToLoad:
adRequest = nil
default:
break
}
}
}
}
Для загрузки рекламного объявления потребуется идентификатор рекламного места, полученный вами в интерфейсе Рекламной сети Яндекса (adUnitId).
Расширить параметры запроса за рекламой можно через AdRequest, передав в запросе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы. Подробнее читайте в разделе Таргетирование рекламы.
Показ объявления
Rewarded-реклама — стимулирующий формат рекламы, который позволяет пользователю получить вознаграждение за просмотр рекламы. В качестве вознаграждения может быть дополнительная жизнь или переход на следующий уровень в игре. Формат вознаграждения определяется приложением.
После успешной загрузки приходит событие .didLoad — установите isPresented = true, чтобы отобразить рекламу (или заранее выставьте флаг показа; если загрузка ещё не завершена, показ будет отложен).
struct RewardedView: View {
@State private var adRequest: AdRequest?
@State private var isPresented = false
var body: some View {
ContentView()
.rewardedAd(isPresented: $isPresented, request: $adRequest) { event in
switch event {
case .didLoad:
isPresented = true
case .didDismiss, .didFailToShow, .didFailToLoad:
adRequest = nil
default:
break
}
}
}
}
Выдача награды
Если показ объявления успешно засчитан, в onEvent приходит .didReward(Reward). Используйте его, чтобы выдать награду пользователю приложения. Награду следует выдавать в обработчике .didReward, а не полагаться только на .didDismiss.
struct RewardedView: View {
@State private var adRequest: AdRequest?
@State private var isPresented = false
var body: some View {
ContentView()
.rewardedAd(isPresented: $isPresented, request: $adRequest) { event in
switch event {
case .didReward(let reward):
sendReward(reward)
case .didDismiss, .didFailToShow, .didFailToLoad:
adRequest = nil
default:
break
}
}
}
private func sendReward(_ reward: Reward) {
// Выдать награду
}
}
Тестирование интеграции рекламы с вознаграждением
Использование демоблоков для тестирования рекламы
Для проверки корректной интеграции рекламы, а также для тестирования вашего приложения, рекомендуется использовать тестовую рекламу.
Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой, мы создали специальный демонстрационный идентификатор рекламного места. Используйте его для проверки корректной интеграции рекламы.
Демонстрационный adUnitId: demo-rewarded-yandex.
Важно
Убедитесь, что перед выкладыванием приложения в store, вы заменили демонстрационный идентификатор рекламного места на настоящий, полученный в интерфейсе Рекламной сети Яндекса.
Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе Демоблоки для тестирования.
Проверка корректной интеграции рекламы
Проверить корректность интеграции рекламы можно через нативный инструмент Console.
Чтобы получить возможность просматривать расширенные логи, необходимо вызвать метод enableLogging класса YMAMobileAds.
YMAMobileAds.enableLogging()
Для просмотра логов SDK в инструменте Console установите Subsystem = com.mobile.ads.ads.sdk. Так же вы можете фильтровать логи по категории и по уровню ошибки.
В случае обнаружения проблем при интеграции рекламы вы увидите подробный отчет о проблемах и рекомендации по их устранению.
Дополнительные ресурсы
-
Ссылка на github.