Catch up on everthing we announced at this year's Firebase Summit. Learn more

Видео с вознаграждением

Вы можете использовать AdMob для отображения вознаграждено видео в приложениях C ++ с помощью AdMob посредничества .

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

Предпосылки

Перед тем, как начать взаимодействие с получающей API видео C ++, вы должны включать в себя посредничество сетевых адаптеров и SDKs в вашем приложении , которое вы хотите , чтобы служить вознагражден видео с. Вы можете увидеть шаги для добавления вознаграждается видео посредничества приложения в издателях награжденных видео руководства для прошивки и Android .

Кроме того , если это ваш первый раз установка до AdMob и Firebase в приложении C ++, проверить AdMob C ++ НАЧАТЬ руководство шаг за шагом инструкции по интеграции вашего приложения с AdMob и Firebase.

Взаимодействовать с пространством имен rewarded_video

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

Чтобы получить доступ к rewarded_video имен, добавьте следующие включают в C ++ код приложения:

#include "firebase/admob/rewarded_video.h"

Вот основные шаги для взаимодействия с rewarded_video пространства имен:

  1. Вызов Initialize() для инициализации библиотеки и посреднических адаптеров:

    firebase::admob::rewarded_video::Initialize();
    
  2. Теперь, когда библиотека и посреднические адаптеры инициализированы, вы готовы назвать LoadAd() , чтобы загрузить вознаграждаются видео:

    firebase::admob::AdRequest my_ad_request;
    // Set some or all of the member variables in the AdRequest struct.
    firebase::admob::rewarded_video::LoadAd("YOUR_REWARDED_AD_UNIT_ID", my_ad_request);
    

    См Создать запрос объявления в AdMob для примера на таргетинг и настройки запросов объявлений.

  3. После того , как вознаграждаются видео загрузится, вызов Show() для отображения видео пользователя:

    // my_ad_parent is a reference to an iOS UIView or an Android Activity. This is
    // the parent UIView or Activity of the rewarded video.
    firebase::admob::rewarded_video::Show(my_ad_parent);
    
  4. При необходимости повторите шаги 2 и 3.

  5. Вызов Pause() , чтобы приостановить любой фоновой обработки , связанные с вознагражден видео:

    firebase::admob::rewarded_video::Pause();
    

    Вызывайте этот метод всякий раз, когда движок C ++ приостанавливает работу или приложение теряет фокус.

  6. Вызов Resume() , чтобы возобновить воспроизведение с паузы, например, когда пользователь возвращается в свое приложение из Google Play:

    firebase::admob::rewarded_video::Resume();
    
  7. После завершения показа вознаграждена видеорекламы в вашем приложении, вызов Destroy() , чтобы очистить и освободить любые ресурсы , используемые получающей видео имен:

    firebase::admob::rewarded_video::Destroy();
    

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

Используйте Futures для отслеживания статуса завершения вызовов методов

Фьючерсы предоставить вам способ , чтобы определить статус завершения предыдущих rewarded_video вызовов методы пространства имен. Когда вызов сделан на rewarded_video::Initialize() метод, например, новое будущее создается и возвращается. См firebase :: Будущее для более подробной информации. Приложения могут опрашивать статус Future, чтобы определить, когда инициализация завершена. Как только Future будет завершен, вы будете готовы загрузить видео с вознаграждением.

Большинство методов в rewarded_video имен имеют соответствующий метод «последний результат» , что приложения могут использовать для получения самого последнего будущего для данного действия. Initialize() метод, например, есть метод , называемый InitializeLastResult() , который возвращает будущее для самого последнего вызова Initialize() :

if (firebase::admob::rewarded_video::InitializeLastResult().status() ==
    firebase::kFutureStatusComplete &&
    firebase::admob::rewarded_video::InitializeLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  firebase::admob::rewarded_video::LoadAd("YOUR_REWARDED_AD_UNIT_ID",
      my_ad_request);
}

Используйте LoadAdLastResult() метод , чтобы получить будущее , представляющее статус последнего вызова к LoadAd() метод. Если его статус завершен, вы можете отобразить видео с вознаграждением в следующей естественной точке остановки в вашем приложении:

if (firebase::admob::rewarded_video::LoadAdLastResult().status() ==
    firebase::kFutureStatusComplete &&
    firebase::admob::rewarded_video::LoadAdLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  // my_ad_parent is a reference to an iOS UIView or an Android Activity.
  // This is the parent UIView or Activity of the rewarded video.
  firebase::admob::rewarded_video::Show(my_ad_parent);
}

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

AdMob rewarded_video пространство имен предоставляет абстрактный Listener класс , который вы можете расширить и перейти к SetListener() метод , чтобы получать уведомления о наградах и вознаграждается изменения состояния представления видео.

Ниже приведен пример реализации класса , который расширяет Listener абстрактный класс:

// A simple listener that logs changes to rewarded video state.
class LoggingRewardedVideoListener
    : public firebase::admob::rewarded_video::Listener {
 public:
  LoggingRewardedVideoListener() {}
  void OnRewarded(firebase::admob::rewarded_video::RewardItem reward) override {
    LogMessage("Rewarding user with %f %s.", reward.amount,
               reward.reward_type.c_str());
  }
  void OnPresentationStateChanged(
      firebase::admob::rewarded_video::PresentationState state) override {
    LogMessage("Rewarded video PresentationState has changed to %d.", state);
  }
};

// After calling Initialize and waiting for the Initialize future to complete
// successfully, set the listener.
LoggingRewardedVideoListener rewarded_video_listener;
firebase::admob::rewarded_video::SetListener(&rewarded_video_listener);

Награды за опрос

rewarded_video имен также обеспечивает PollableRewardListener , класс , который вы можете создать экземпляр и передать в SetListener() метод. Этот класс предоставляет альтернативный вариант для доступа к выгоде без необходимости расширения абстрактного Listener класса.

Прослушиватель на основе опроса использует очередь для поддержки наград, предоставленных Mobile Ads SDK, которые могут быть получены позже. PollReward(RewardItem* reward) метод PollableRewardListener выскакивает самую старую награду в очередь и копируют свои данные в представленной RewardItem структуру.

Вот пример реализации для избирательных поощрений с использованием rewarded_video::PollableRewardListener класс:

// After calling Initialize and waiting for the Initialize future to complete
// successfully, instantiate a PollableRewardListener object and set the listener.
firebase::admob::rewarded_video::PollableRewardListener* listener =
    new firebase::admob::rewarded_video::PollableRewardListener();

// Pass the PollableRewardListener object to the SetListener method.
firebase::admob::rewarded_video::SetListener(listener);

...
// Display the rewarded videos to users so they can earn rewards.
...

// Declare a RewardItem struct. Pass this RewardItem struct by reference to
// the PollReward method.
firebase::admob::rewarded_video::RewardItem reward;
// Call the PollReward method to see if a reward is available.
while (listener->PollReward(&reward)) {
  // A reward is available. Do something with the reward.
  printf("Reward user with %f %s.", reward.amount, reward.reward_type);
}

Пример простого игрового цикла

Вот петля простой игры , которая использует государственную машину для отслеживания вызовов методов в rewarded_video имена:

namespace rewarded_video = firebase::admob::rewarded_video;

enum State {
  kNextStepInitialize,
  kNextStepLoadAd,
  kNextStepShowAd,
  kNextStepRewardUser,
  kNextStepRestartGame
}

// Instantiate a PollableRewardListener object.
firebase::admob::rewarded_video::PollableRewardListener* listener =
    new firebase::admob::rewarded_video::PollableRewardListener();

State state = kNextStepInitialize;
for ( ; ; ) /* game loop */ {
  switch (state) {
    case kNextStepInitialize:
      rewarded_video::Initialize();
      state = kNextStepLoadAd;
      break;
    case kNextStepLoadAd:
      if (rewarded_video::InitializeLastResult().status() ==
          firebase::kFutureStatusComplete &&
          rewarded_video::InitializeLastResult().error() ==
          firebase::admob::kAdMobErrorNone) {
        // Pass the PollableRewardListener object to the SetListener method.
        firebase::admob::rewarded_video::SetListener(listener);
        rewarded_video::LoadAd("YOUR_REWARDED_AD_UNIT_ID",
                               my_ad_request);
      }
      state = kNextStepShowAd;
      break;
    case kNextStepShowAd:
      if (rewarded_video::LoadAdLastResult().status() ==
          firebase::kFutureStatusComplete &&
          rewarded_video::LoadAdLastResult().error() ==
          firebase::admob::kAdMobErrorNone) {
        rewarded_video::Show(my_ad_parent);
      }

      if (rewarded_video::ShowLastResult().status() ==
          firebase::kFutureStatusComplete &&
          rewarded_video::ShowLastResult().error() ==
          firebase::admob::kAdMobErrorNone &&
          rewarded_video::presentation_state() ==
          rewarded_video::kPresentationStateHidden) {
        // If the rewarded video has been displayed to the user and
        // the user closed the ad, then reward the user.
        state = kNextStepRewardUser;
      }
      break;
    case kNextStepRewardUser:
      firebase::admob::rewarded_video::RewardItem reward;
      // Call the PollReward method to see if a reward is available.
      while (listener->PollReward(&reward)) {
        // A reward is available. Do something with the reward.
        printf("Reward user with %f %s.", reward.amount, reward.reward_type);
      }
      state = kNextStepRestartGame;
      break;
    case kNextStepRestartGame:
      // restart game
      break;
  }

  // render game
}

Что дальше

Смотрите IOS вознагражден видео и Android вознагражден Видео Get Started руководства для получения дополнительной информации о вознагражден видеорекламы.