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

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