Объявления с вознаграждением позволяют пользователям взаимодействовать с рекламой в обмен на вознаграждения в приложении. В этом руководстве рассказывается, как интегрировать объявления с вознаграждением в приложения для Android и iOS с помощью Google Mobile Ads C++ SDK.
Ознакомьтесь с историями успеха клиентов: кейс 1, кейс 2.
Требования
- Нажмите Начать.
- (Только для Android) Опыт работы со ссылками JNI
jobject(см. советы по использованию 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. Родительское представление – это ссылка JNIjobjectна AndroidActivityили указатель на iOSUIView.// 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);Вместо того чтобы сохранять объект Future как переменную, вы можете периодически проверять статус операции инициализации, вызывая метод
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.