Объявления с вознаграждением


Вознагражденные объявления позволяют пользователям взаимодействовать с ними в обмен на награды в приложении. Это руководство показывает, как интегрировать вознагражденные объявления в приложения Android и iOS с помощью Google Mobile Ads C++ SDK.

Прочитайте несколько историй успеха клиентов: пример 1 , пример 2 .

Предпосылки

Всегда проводите тестирование с помощью тестовых объявлений

При создании и тестировании приложений убедитесь, что вы используете тестовые объявления, а не живые, производственные объявления. Невыполнение этого требования может привести к блокировке вашего аккаунта.

Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для объявлений с вознаграждением, который зависит от платформы устройства:

  • Android: ca-app-pub-3940256099942544/5224354917
  • iOS: ca-app-pub-3940256099942544/1712485313

Они были специально настроены для возврата тестовых объявлений для каждого запроса, и вы можете свободно использовать их в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой собственный идентификатор рекламного блока перед публикацией приложения.

Дополнительную информацию о том, как работают тестовые объявления Mobile Ads SDK, см. в разделе Тестовые объявления .

Выполнение

Основные шаги по интеграции объявлений с вознаграждением:

  1. Загрузить объявление.
  2. Зарегистрируйтесь для получения обратных звонков.
  3. Покажите рекламу и обработайте событие вознаграждения.

Настройте RewardedAd

Реклама с вознаграждением отображается в объектах RewardedAd , поэтому первым шагом к интеграции рекламы с вознаграждением в ваше приложение является создание и инициализация экземпляра RewardedAd .

  1. Добавьте следующий заголовок в код C++ вашего приложения:

     #include "firebase/gma/rewarded_ad.h"

  2. Объявите и создайте объект RewardedAd :

     firebase::gma::RewardedAd* rewarded_ad;
     rewarded_ad = new firebase::gma::RewardedAd();

  3. Инициализируйте экземпляр RewardedAd , используя родительское представление, приведенное к типу AdParent . Родительское представление — это ссылка на JNI jobject для Android Activity или указатель на iOS UIView .

    // 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);
    
  4. В качестве альтернативы сохранению будущего в качестве переменной вы можете периодически проверять статус операции инициализации, вызывая 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 . Метод load требует, чтобы вы инициализировали объект 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