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


Реклама с вознаграждением позволяет пользователям взаимодействовать с ней в обмен на награды внутри приложения. В этом руководстве показано, как интегрировать рекламу с вознаграждением в приложения 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 на 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);
    
  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 . Для загрузки требуется инициализация объекта 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