Реклама с вознаграждением позволяет пользователям взаимодействовать с ней в обмен на награды внутри приложения. В этом руководстве показано, как интегрировать рекламу с вознаграждением в приложения Android и iOS с помощью Google Mobile Ads C++ SDK.
Прочитайте несколько историй успеха клиентов: пример 1 , пример 2 .
Предпосылки
- Завершить Приступить к работе .
- (Только для Android) Умение работать со ссылками
jobject
JNI (см. советы по Android JNI ).
Всегда проверяйте с помощью тестовых объявлений
При создании и тестировании приложений обязательно используйте тестовые объявления, а не реальные, производственные. В противном случае ваш аккаунт может быть заблокирован.
Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для объявлений с вознаграждением, который различается в зависимости от платформы устройства:
- 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
. Родительское представление — это ссылка на JNIjobject
наActivity
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
см. в разделе Использование Futures для мониторинга статуса завершения вызовов методов .
Загрузить объявление
Загрузка рекламы осуществляется с помощью метода LoadAd()
объекта RewardedAd
. Для загрузки требуется инициализация объекта 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 секунд Google Mobile Ads C++ SDK завершает
firebase::Future
, возвращенныйInitialize()
даже если сеть-посредник еще не завершила инициализацию. - Что делать, если некоторые сети-посредники не готовы, когда я получаю обратный вызов инициализации?
Рекомендуется загружать рекламу после завершения инициализации SDK. Даже если сеть-медиатор не готова, Google Mobile Ads C++ SDK всё равно запросит у неё рекламу. Таким образом, если сеть-медиатор завершит инициализацию после истечения времени ожидания, она сможет обрабатывать будущие запросы на рекламу в этом сеансе.
Вы можете продолжить опрашивать состояние инициализации всех адаптеров на протяжении всего сеанса приложения, вызвав
GetInitializationStatus()
.- Как узнать, почему конкретная посредническая сеть не готова?
AdapterStatus.description()
описывает, почему адаптер не готов обслуживать запросы рекламы. Пример регистрации состояния адаптера-медиатора см. в исходном коде нашего примера приложения для быстрого старта на GitHub.
Дополнительные ресурсы
Пример в GitHub
- Просмотрите исходный код нашего примера приложения быстрого старта на GitHub.