Anda dapat menggunakan AdMob untuk menampilkan iklan di aplikasi C++. Panduan ini menampilkan cara mengintegrasikan dengan Firebase dan berinteraksi dengan Google Mobile Ads SDK.
Jika ini pertama kalinya Anda mencoba panduan ini, sebaiknya Anda mendownload dan mengikuti aplikasi pengujian AdMob.
Mengintegrasikan dengan Firebase
Selesaikan langkah-langkah di bagian Penyiapan untuk iOS atau Penyiapan untuk Android untuk menambahkan AdMob dan Firebase ke aplikasi C++.
Sertakan header berikut dalam kode C++ aplikasi:
#include "firebase/admob.h" #include "firebase/admob/types.h" #include "firebase/app.h" #include "firebase/future.h"
Tambahkan kode berikut ke dalam kode C++ pada aplikasi untuk menginisialisasi library AdMob dengan ID aplikasi AdMob Anda (kode ini harus dijalankan sebelum membuat tampilan banner atau iklan interstisial):
#if defined(__ANDROID__) // Create the Firebase app. firebase::App* app = firebase::App::Create(firebase::AppOptions(), your_jni_env, your_android_activity); // Your Android AdMob app ID. const char* kAdMobAppID = "ca-app-pub-XXXXXXXXXXXXXXXX~NNNNNNNNNN"; #else // Create the Firebase app. firebase::App* app = firebase::App::Create(firebase::AppOptions()); // Your iOS AdMob app ID. const char* kAdMobAppID = "ca-app-pub-XXXXXXXXXXXXXXXX~NNNNNNNNNN"; #endif // __ANDROID__ // Initialize the AdMob library with your AdMob app ID. firebase::admob::Initialize(*app, kAdMobAppID);
Berinteraksi dengan Google Mobile Ads SDK
Menyiapkan ID unit iklan
Saat menulis kode C++ yang didukung di iOS dan Android, Anda mungkin perlu menggunakan arahan preprosesor untuk menentukan kode yang seharusnya hanya dikompilasi di OS tertentu. Untuk menampilkan iklan banner dan interstisial di iOS dan Android, sebaiknya buat ID unit iklan baru untuk setiap OS dan setiap penempatan iklan yang unik. ID unit iklan berikut dibuat untuk iOS dan Android, dan dikonfigurasi untuk selalu menayangkan iklan pengujian:
#if defined(__ANDROID__)
// Android ad unit IDs
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/6300978111";
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/1033173712";
#else
// iOS ad unit IDs
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/2934735716";
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/4411468910";
#endif
Menyiapkan tampilan banner
Tambahkan header berikut ke kode C++ aplikasi Anda:
#include "firebase/admob/banner_view.h"
Deklarasikan dan buat instance objek BannerView
:
firebase::admob::BannerView* banner_view;
banner_view = new firebase::admob::BannerView();
Buat AdSize
dan inisialisasi tampilan banner:
firebase::admob::AdSize ad_size;
ad_size.ad_size_type = firebase::admob::kAdSizeStandard;
ad_size.width = 320;
ad_size.height = 50;
// my_ad_parent is a reference to an iOS UIView or an Android Activity.
// This is the parent UIView or Activity of the banner view.
banner_view->Initialize(static_cast<firebase::admob::AdParent>(my_ad_parent), kBannerAdUnit, ad_size);
Menyiapkan iklan interstisial
Tambahkan header berikut ke kode C++ aplikasi Anda:
#include "firebase/admob/interstitial_ad.h"
Deklarasikan dan buat instance objek InterstitialAd
:
firebase::admob::InterstitialAd* interstitial_ad;
interstitial_ad = new firebase::admob::InterstitialAd();
Lakukan inisialisasi iklan interstisial:
// my_ad_parent is a reference to an iOS UIView or an Android Activity.
// This is the parent UIView or Activity of the interstitial ad.
interstitial_ad->Initialize(static_cast<firebase::admob::AdParent>(my_ad_parent), kInterstitialAdUnit);
Membuat permintaan iklan AdMob
Dengan library AdMob, Anda dapat menyediakan informasi penargetan kustom ke permintaan iklan.
Hal ini dilakukan dengan menetapkan anggota struct AdRequest
.
Struktur ini kemudian diteruskan ke metode BannerView::LoadAd()
atau InterstitialAd::LoadAd()
.
Untuk mengetahui informasi umum tentang penargetan dan penyesuaian permintaan iklan, lihat panduan Penargetan iOS dan Android.
Berikut adalah struct AdRequest
yang digunakan oleh BannerView
dan InterstitialAd
untuk
membuat permintaan iklan:
struct AdRequest {
const char **test_device_ids;
unsigned int test_device_id_count;
const char **keywords;
unsigned int keyword_count;
const KeyValuePair *extras;
unsigned int extras_count;
int birthday_day;
int birthday_month;
int birthday_year;
Gender gender;
ChildDirectedTreatmentState tagged_for_child_directed_treatment;
};
Deklarasikan dan inisialisasi struct AdRequest
:
// Initialize all the AdRequest struct member values to zero.
firebase::admob::AdRequest my_ad_request = {};
Kode berikut menetapkan nilai anggota untuk struct AdRequest
untuk menambahkan
informasi penargetan pada permintaan iklan:
// If the app is aware of the user's gender, it can be added to the
// targeting information. Otherwise, "unknown" should be used.
my_ad_request.gender = firebase::admob::kGenderUnknown;
// The user's birthday, if known. Note that months are indexed from one.
my_ad_request.birthday_day = 10;
my_ad_request.birthday_month = 11;
my_ad_request.birthday_year = 1976;
// Additional keywords to be used in targeting.
static const char* kKeywords[] = {"AdMob", "C++", "Fun"};
my_ad_request.keyword_count = sizeof(kKeywords) / sizeof(kKeywords[0]);
my_ad_request.keywords = kKeywords;
// "Extra" key value pairs can be added to the request as well.
static const firebase::admob::KeyValuePair kRequestExtras[] = {
{"the_name_of_an_extra", "the_value_for_that_extra"}};
my_ad_request.extras_count = sizeof(kRequestExtras) / sizeof(kRequestExtras[0]);
my_ad_request.extras = kRequestExtras;
// Register the device IDs associated with any devices that will be used to
// test your app. Below are sample test device IDs used for making the ad request.
static const char* kTestDeviceIDs[] =
{"2077ef9a63d2b398840261c8221a0c9b",
"098fe087d987c9a878965454a65654d7"};
my_ad_request.test_device_id_count =
sizeof(kTestDeviceIDs) / sizeof(kTestDeviceIDs[0]);
my_ad_request.test_device_ids = kTestDeviceIDs;
Teruskan struct AdRequest
ke metode BannerView::LoadAd()
dan Interstitial::LoadAd()
:
banner_view->LoadAd(my_ad_request);
interstitial_ad->LoadAd(my_ad_request);
Note: A single `AdRequest` struct can be reused for multiple calls.
Menggunakan Future untuk mengawasi status penyelesaian panggilan metode
Future menyediakan cara untuk menentukan status penyelesaian panggilan metode
BannerView
atau InterstitialAd
Anda sebelumnya.
Misalnya, saat panggilan dilakukan ke metode InterstitialAd::LoadAd()
,
Future baru akan dibuat dan ditampilkan.
Aplikasi dapat memeriksa status Future untuk
menentukan apakah iklan telah dimuat.
Setelah Future selesai, iklan interstisial siap
ditampilkan di titik pemberhentian alami
selanjutnya dalam aplikasi Anda.
Sebagian besar metode dalam class BannerView
dan InterstitialAd
memiliki metode "hasil terakhir" yang sesuai, yang dapat digunakan aplikasi
untuk mengambil Future terbaru untuk tindakan tertentu.
Metode InterstitialAd::LoadAd()
, misalnya, memiliki
metode yang sesuai yang disebut InterstitialAd::LoadAdLastResult()
.
Metode ini menampilkan Future yang dapat digunakan
untuk memeriksa status panggilan terakhir ke metode InterstitialAd::LoadAd()
.
Demikian pula, aplikasi dapat menggunakan metode
BannerView::InitializeLastResult()
untuk mendapatkan Future yang mewakili
status (dan kode error, jika ada) dari panggilan
terakhir ke metode BannerView::Initialize()
.
Jika statusnya selesai dan kode errornya adalah firebase::admob::kAdMobErrorNone
, Anda siap menampilkan tampilan banner dengan memanggil metode BannerView::Show()
:
if (banner_view->InitializeLastResult().status() ==
firebase::kFutureStatusComplete &&
banner_view->InitializeLastResult().error() ==
firebase::admob::kAdMobErrorNone) {
banner_view->Show();
}
Setelah status Future untuk panggilan terakhir ke metode BannerView::Show()
selesai,
Anda siap memuat iklan ke tampilan banner:
if (banner_view->ShowLastResult().status() ==
firebase::kFutureStatusComplete &&
banner_view->ShowLastResult().error() ==
firebase::admob::kAdMobErrorNone) {
banner_view->LoadAd(my_ad_request);
}
Untuk iklan interstisial, gunakan metode InterstitialAd::InitializeLastResult()
untuk mendapatkan Future yang mewakili status
(dan kode error, jika ada)
dari panggilan terakhir ke metode InterstitialAd::Initialize()
.
Jika statusnya selesai dan kode errornya adalah firebase::admob::kAdMobErrorNone
, Anda siap memuat iklan interstisial:
if (interstitial_ad->InitializeLastResult().status() ==
firebase::kFutureStatusComplete &&
interstitial_ad->InitializeLastResult().error() ==
firebase::admob::kAdMobErrorNone) {
interstitial_ad->LoadAd(my_ad_request);
}
Setelah status Future untuk panggilan terakhir ke metode InterstitialAd::LoadAd()
selesai, Anda siap menampilkan iklan interstisial pada titik pemberhentian alami selanjutnya
dalam aplikasi Anda:
if (interstitial_ad->LoadAdLastResult().status() ==
firebase::kFutureStatusComplete &&
interstitial_ad->LoadAdLastResult().error() ==
firebase::admob::kAdMobErrorNone) {
interstitial_ad->Show();
}
Anda juga bisa mendaftarkan callback agar dipanggil saat Future selesai. Cuplikan kode ini menggunakan pointer fungsi untuk callback:
// Initialize the interstitial ad.
interstitial_ad->Initialize(static_cast<firebase::admob::AdParent>(my_ad_parent), kInterstitialAdUnit);
// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. In this example, we pass the interstitial ad object to be
// used in the OnCompletionCallback function.
interstitial_ad->InitializeLastResult().OnCompletion(OnCompletionCallback, interstitial_ad /*user_data*/);
// The OnCompletion callback function.
static void OnCompletionCallback(const firebase::Future<void>& future, void* user_data) {
// Called when the Future is completed for the last call to the InterstitialAd::Initialize()
// method. If the error code is firebase::admob::kAdMobErrorNone, then you're ready to
// load the interstitial ad.
firebase::admob::InterstitialAd *interstitial_ad = static_cast<firebase::admob::InterstitialAd*>(user_data);
if (future.error() == firebase::admob::kAdMobErrorNone) {
interstitial_ad->LoadAd(my_ad_request);
}
}
Menggunakan pemroses untuk mendapatkan notifikasi mengenai peristiwa siklus proses iklan
AdMob menyediakan class BannerView::Listener
abstrak yang
dapat Anda perluas dan teruskan ke metode BannerView::SetListener()
untuk
mendapatkan notifikasi tentang perubahan status presentasi dan kotak pembatas
tampilan banner.
Class InterstitialAd::Listener
abstrak serupa juga disediakan untuk
iklan interstisial yang dapat diperluas agar mendapatkan pemberitahuan
tentang perubahan status presentasi iklan interstisial.
Berikut adalah contoh implementasi class yang
memperluas class BannerView::Listener
(penerapan serupa
dapat digunakan untuk iklan interstisial):
class ExampleBannerViewListener
: public firebase::admob::BannerView::Listener {
public:
ExampleBannerViewListener() {}
void OnPresentationStateChanged(
firebase::admob::BannerView* banner_view,
firebase::admob::BannerView::PresentationState state) override {
// This method gets called when the banner view's presentation
// state changes.
}
void OnBoundingBoxChanged(
firebase::admob::BannerView* banner_view,
firebase::admob::BoundingBox box) override {
// This method gets called when the banner view's bounding box
// changes.
}
};
Langkah selanjutnya
Pelajari cara memonetisasi aplikasi dengan AdMob, dan pastikan untuk mengganti ID unit iklan pengujian yang digunakan dalam panduan ini dengan ID unit iklan Anda sendiri.