Реклама с вознаграждением позволяет пользователям взаимодействовать с ней в обмен на внутриигровые награды. В этом руководстве показано, как интегрировать рекламу с вознаграждением в приложения для Android и iOS с помощью Google Mobile Ads C++ SDK.
Ознакомьтесь с историями успеха наших клиентов: пример 1 , пример 2 .
Предварительные требования
- Завершить. Начать .
- (Только для Android) Знание работы со ссылками
jobjectJNI (см. советы по работе с JNI в Android ).
Всегда проводите тестирование с помощью тестовых объявлений.
При разработке и тестировании приложений обязательно используйте тестовые объявления, а не реальные, рабочие объявления. Несоблюдение этого правила может привести к блокировке вашего аккаунта.
Самый простой способ загрузить тестовые объявления — использовать наш специальный идентификатор тестового рекламного блока для объявлений с вознаграждением, который различается в зависимости от платформы устройства:
- Android:
ca-app-pub-3940256099942544/5224354917 - iOS:
ca-app-pub-3940256099942544/1712485313
Они специально настроены на возврат тестовых объявлений для каждого запроса, и вы можете свободно использовать их в своих приложениях во время кодирования, тестирования и отладки. Просто убедитесь, что вы заменили его на свой собственный идентификатор рекламного блока перед публикацией приложения.
Для получения дополнительной информации о том, как работают тестовые объявления в Mobile Ads SDK, см. раздел «Тестовые объявления» .
Выполнение
Основные шаги по интеграции рекламы с вознаграждением:
- Загрузить рекламу.
- Зарегистрируйтесь для участия в обратном звонке.
- Показать рекламу и обработать событие с вознаграждением.
Настройте RewardedAd
Рекламные объявления с вознаграждением отображаются в объектах RewardedAd , поэтому первым шагом к интеграции таких объявлений в ваше приложение является создание и инициализация экземпляра RewardedAd .
Добавьте следующий заголовочный файл в код вашего приложения на C++:
#include "firebase/gma/rewarded_ad.h"
Объявите и создайте экземпляр объекта
RewardedAd:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
Инициализируйте экземпляр
RewardedAd, используя родительский элемент представления, преобразованный в типAdParent. Родительский элемент представления представляет собой ссылку наjobjectJNIActivityв Android или указатель наUIViewв iOS.// my_ad_parent is a jobject reference to an Android Activity or // a pointer to an iOS UIView. firebase::gma::AdParent ad_parent = static_cast<firebase::gma::AdParent>(my_ad_parent); firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);В качестве альтернативы сохранению будущего значения в качестве переменной, вы можете периодически проверять статус операции инициализации, вызывая
InitializeLastResult()для объектаRewardedAd. Это может быть полезно для отслеживания процесса инициализации в глобальном игровом цикле.// Monitor the status of the future in your game loop: firebase::Future<void> result = rewarded_ad->InitializeLastResult(); if (result.status() == firebase::kFutureStatusComplete) { // Initialization completed. if(future.error() == firebase::gma::kAdErrorCodeNone) { // Initialization successful. } else { // An error has occurred. } } else { // Initialization on-going. }
Для получения дополнительной информации о работе с firebase::Future см. раздел «Использование Future для отслеживания статуса завершения вызовов методов» .
Загрузить рекламу
Загрузка рекламы осуществляется с помощью метода LoadAd() объекта RewardedAd . Для работы метода LoadAd необходимо инициализировать объект RewardedAd , а также иметь идентификатор рекламного блока и объект AdRequest . Возвращается firebase::Future , который можно использовать для отслеживания состояния и результата операции загрузки.
Следующий код показывает, как загрузить объявление после успешной инициализации RewardedAd :
firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);
Зарегистрируйтесь для участия в обратном звонке.
Для получения уведомлений о показе рекламы с вознаграждением и событиях жизненного цикла необходимо расширить класс FullScreenContentListener . Ваш пользовательский подкласс FullScreenContentListener можно зарегистрировать с помощью метода RewardedAd::SetFullScreenContentListener() , и он будет получать обратные вызовы при успешном или неудачном показе рекламы, а также при её закрытии.
Следующий код показывает, как расширить класс и присвоить его объявлению:
class ExampleFullScreenContentListener : public firebase::gma::FullScreenContentListener { public: ExampleFullScreenContentListener() {} void OnAdClicked() override { // This method is invoked when the user clicks the ad. } void OnAdDismissedFullScreenContent() override { // This method is invoked when the ad dismisses full screen content. } void OnAdFailedToShowFullScreenContent(const AdError& error) override { // This method is invoked when the ad failed to show full screen content. // Details about the error are contained within the AdError parameter. } void OnAdImpression() override { // This method is invoked when an impression is recorded for an ad. } void OnAdShowedFullScreenContent() override { // This method is invoked when the ad showed its full screen content. } }; ExampleFullScreenContentListener* example_full_screen_content_listener = new ExampleFullScreenContentListener(); rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);
Объект RewardedAd является одноразовым. Это означает, что после показа рекламы с вознаграждением её нельзя показать снова. Рекомендуется загружать следующую рекламу с вознаграждением в методе OnAdDismissedFullScreenContent() вашего FullScreenContentListener , чтобы следующая реклама с вознаграждением начала загружаться сразу после закрытия предыдущей.
Покажите рекламу и организуйте событие с вознаграждением.
Перед показом рекламы с вознаграждением пользователям необходимо предоставить им явный выбор: просматривать рекламный контент в обмен на вознаграждение. Показ рекламы с вознаграждением всегда должен быть добровольным.
При показе рекламы необходимо предоставить объект UserEarnedReward для обработки вознаграждения пользователя.
Следующий код показывает, как отобразить RewardedAd :
// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
public firebase::gma::UserEarnedRewardListener {
public:
ExampleUserEarnedRewardListener() { }
void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
// Reward the user!
}
};
ExampleUserEarnedRewardListener* user_earned_reward_listener =
new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);
Часто задаваемые вопросы
- Предусмотрен ли тайм-аут для вызова инициализации?
- Через 10 секунд SDK Google Mobile Ads C++ завершает
firebase::Future, возвращаемого функциейInitialize()даже если инициализация сети посредничества еще не завершена. - Что произойдет, если некоторые сети-посредники окажутся не готовы к моменту получения обратного вызова инициализации?
Рекомендуется загружать рекламу после завершения инициализации SDK. Даже если посредническая сеть еще не готова, Google Mobile Ads C++ SDK все равно запросит у нее рекламу. Таким образом, если посредническая сеть завершит инициализацию после истечения таймаута, она сможет обрабатывать будущие запросы на рекламу в рамках этой сессии.
Вы можете продолжать опрашивать статус инициализации всех адаптеров на протяжении всей сессии вашего приложения, вызывая
GetInitializationStatus().- Как мне узнать, почему конкретная сеть медиации не готова?
AdapterStatus.description()описывает причину, по которой адаптер не готов обрабатывать рекламные запросы. Пример логирования статуса адаптера медиации можно найти в исходном коде нашего примера быстрого запуска приложения на GitHub.
Дополнительные ресурсы
Пример на GitHub
- Исходный код нашего примера приложения для быстрого запуска можно посмотреть на GitHub.