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