Video Reward

Anda dapat menggunakan AdMob untuk menampilkan video reward di aplikasi C++ melalui mediasi AdMob.

Panduan ini menunjukkan cara meminta dan menampilkan video reward, menentukan kapan video reward tersedia, dan memberi reward kepada pengguna.

Prasyarat

Sebelum mulai berinteraksi dengan C++ API video reward, Anda harus menyertakan adaptor jaringan mediasi dan SDK di aplikasi yang ingin Anda gunakan untuk menayangkan video reward. Langkah-langkah untuk menambahkan mediasi video reward ke aplikasi dapat dilihat dalam panduan video reward penayang untuk iOS dan Android.

Selain itu, jika ini adalah pertama kalinya Anda menyiapkan AdMob dan Firebase di aplikasi C++, lihat panduan Memulai AdMob C++ untuk petunjuk langkah demi langkah dalam mengintegrasikan aplikasi dengan AdMob dan Firebase.

Berinteraksi dengan namespace rewarded_video

Namespace rewarded_video berisi metode untuk menampilkan video reward melalui Google Mobile Ads SDK. Tidak seperti iklan banner dan iklan interstisial, yang memiliki objek sendiri, video reward dikendalikan menggunakan metode statis di namespace rewarded_video.

Untuk mengakses namespace rewarded_video, tambahkan yang berikut ke kode C++ aplikasi Anda:

#include "firebase/admob/rewarded_video.h"

Berikut ini langkah-langkah dasar untuk berinteraksi dengan namespace rewarded_video:

  1. Panggil Initialize() untuk menginisialisasi adaptor library dan mediasi:

    firebase::admob::rewarded_video::Initialize();
    
  2. Setelah adaptor library dan mediasi diinisialisasi, Anda siap memanggil LoadAd() untuk memuat video reward:

    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);
    

    Lihat Membuat permintaan iklan AdMob untuk contoh penargetan dan penyesuaian permintaan iklan.

  3. Setelah video reward dimuat, panggil Show() untuk menampikan video tersebut kepada pengguna:

    // 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. Ulangi langkah 2 dan 3 sesuai kebutuhan.

  5. Panggil Pause() untuk menjeda pemrosesan latar belakang yang berkaitan dengan video reward:

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

    Panggil metode ini setiap kali mesin C++ berhenti atau aplikasi kehilangan fokus.

  6. Panggil Resume() untuk melanjutkan dari jeda, misalnya, ketika pengguna kembali ke aplikasi Anda dari Google Play:

    firebase::admob::rewarded_video::Resume();
    
  7. Setelah menampilkan iklan video reward di aplikasi, panggil Destroy() untuk membersihkan dan mengembalikan alokasi resource yang digunakan oleh namespace video reward:

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

Langkah-langkah di atas menunjukkan panggilan metode dasar yang dapat digunakan aplikasi Anda ketika memuat dan menampilkan video reward. Namun, praktik terbaiknya adalah memantau status penyelesaian panggilan metode yang sebelumnya sebelum memanggilnya. Bagian berikutnya akan menjelaskan langkah-langkah menggunakan Future untuk menentukan status penyelesaian panggilan metode namespace rewarded_video sebelumnya.

Menggunakan Future untuk mengawasi status penyelesaian panggilan metode

Future menyediakan cara untuk menentukan status penyelesaian panggilan metode namespace rewarded_video sebelumnya. Misalnya, ketika panggilan dibuat ke metode rewarded_video::Initialize(), Future baru dibuat dan ditampilkan. Lihat firebase::Future untuk detail lebih lanjut. Aplikasi dapat memeriksa status Future untuk menentukan kapan inisialisasi selesai. Setelah Future selesai, Anda siap untuk memuat video reward.

Sebagian besar metode di namespace rewarded_video memiliki metode "hasil terakhir" yang sesuai, yang dapat digunakan aplikasi untuk mengambil Future terbaru untuk tindakan tertentu. Metode Initialize(), misalnya, memiliki metode yang disebut InitializeLastResult(), yang menampilkan Future untuk panggilan terbaru ke 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);
}

Gunakan metode LoadAdLastResult() untuk mendapatkan Future yang mewakili status panggilan terakhir ke metode LoadAd(). Jika statusnya selesai, maka Anda dapat menampilkan video reward di titik pemberhentian alami berikutnya di aplikasi Anda:

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);
}

Menggunakan listener agar diberi tahu mengenai peristiwa siklus hidup iklan

Namespace rewarded_video AdMob menyediakan kelas Listener abstrak yang dapat diperpanjang dan diteruskan ke metode SetListener() agar diberi tahu tentang perubahan status presentasi reward dan video reward.

Berikut ini contoh implementasi kelas yang memperpanjang kelas abstrak 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);

Memeriksa reward

Namespace rewarded_video juga menyediakan PollableRewardListener, kelas yang dapat dibuat instance dan diteruskan ke metode SetListener(). Kelas ini menyediakan opsi alternatif untuk mengakses reward tanpa perlu memperluas kelas Listener abstrak.

Listener berbasis pemeriksaan menggunakan antrean untuk mengelola award yang diberikan oleh Mobile Ads SDK, yang dapat diambil di lain waktu. Metode PollReward(RewardItem* reward) dari PollableRewardListener menampilkan reward antrean terlama dan menyalin datanya ke struct RewardItem.

Berikut ini contoh implementasi pemeriksaan reward menggunakan kelas 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);
}

Contoh game loop sederhana

Berikut ini adalah game loop sederhana yang menggunakan state machine untuk memantau panggilan metode ke namespace 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
}

Apa selanjutnya?

Lihat Panduan Memulai Video Reward di iOS dan Video Reward di Android untuk mengetahui informasi lebih lanjut tentang iklan Video Reward.

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.