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 interstisial yang memiliki objeknya sendiri,
video reward dikontrol menggunakan metode statis di
namespace rewarded_video
.
Untuk mengakses namespace rewarded_video
, tambahkan penyertaan berikut
ke kode C ++ aplikasi Anda:
#include "firebase/admob/rewarded_video.h"
Berikut adalah langkah dasar untuk berinteraksi dengan namespace rewarded_video
:
Panggil
Initialize()
untuk menginisialisasi library dan adaptor mediasi:firebase::admob::rewarded_video::Initialize();
Setelah library dan adaptor 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.
Setelah video reward dimuat, panggil
Show()
untuk menampilkan video 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);
Ulangi langkah 2 dan 3 sesuai kebutuhan.
Panggil
Pause()
untuk menjeda pemrosesan latar belakang yang terkait dengan video reward:firebase::admob::rewarded_video::Pause();
Panggil metode ini setiap kali mesin C++ berhenti atau aplikasi kehilangan fokus.
Panggil
Resume()
untuk melanjutkan jeda, misalnya, saat pengguna kembali ke aplikasi Anda dari Google Play:firebase::admob::rewarded_video::Resume();
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 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
Anda sebelumnya. Misalnya, saat panggilan dilakukan ke metode rewarded_video::Initialize()
,
Future baru akan 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 dalam 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 selanjutnya
dalam 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 pemroses untuk mendapatkan notifikasi mengenai peristiwa siklus proses iklan
Namespace rewarded_video
AdMob menyediakan class Listener
abstrak
yang dapat Anda perluas dan teruskan ke metode SetListener()
untuk
mendapatkan notifikasi tentang reward dan perubahan status presentasi video reward.
Berikut adalah contoh implementasi class yang memperluas class
Listener
abstrak:
// 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
,
class yang instance-nya dapat dibuat dan diteruskan ke metode SetListener()
.
Class ini menyediakan opsi alternatif untuk mengakses reward tanpa harus
memperluas class Listener
abstrak.
Pemroses 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
memunculkan
reward antrean terlama dan menyalin datanya ke dalam struct RewardItem
yang diberikan.
Berikut ini contoh implementasi untuk memeriksa reward menggunakan
class 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 adalah game loop sederhana yang menggunakan mesin status 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
}
Langkah selanjutnya
Lihat Panduan Memulai Video Reward di iOS dan Video Reward di Android untuk mengetahui informasi lebih lanjut tentang iklan Video Reward.