Memulai

Anda dapat menggunakan AdMob untuk menampilkan iklan di aplikasi C++. Panduan ini menampilkan cara mengintegrasikan dengan Firebase dan berinteraksi dengan SDK Iklan Seluler Google

Jika ini pertama kalinya Anda mencoba panduan ini, sebaiknya Anda mendownload dan mengikuti aplikasi pengujian AdMob.

Mengintegrasikan dengan Firebase

  1. Selesaikan langkah-langkah di bagian Penyiapan untuk iOS atau Penyiapan untuk Android untuk menambahkan AdMob dan Firebase ke aplikasi C++.

  2. Sertakan header berikut dalam kode C++ aplikasi:

    #include "firebase/admob.h"
    #include "firebase/admob/types.h"
    #include "firebase/app.h"
    #include "firebase/future.h"
    
  3. 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 SDK Iklan Seluler Google

Menyiapkan ID unit iklan

Saat menulis kode C++ yang didukung pada iOS dan Android, Anda mungkin perlu menggunakan arahan preprosesor untuk menentukan kode yang seharusnya hanya dikompilasi pada OS tertentu. Untuk menampilkan iklan banner dan interstisial pada iOS dan Android, sebaiknya Anda membuat 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 lakukan 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

Library AdMob memungkinkan Anda menyediakan informasi penargetan khusus untuk permintaan iklan. Ini dilakukan dengan menetapkan anggota struct AdRequest. Struct tersebut 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 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 lakukan inisialisasi struct AdRequest:

// Initialize all the AdRequest struct member values to zero.
firebase::admob::AdRequest my_ad_request = {};

Kode berikut menetapkan nilai anggota 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 sebelumnya. Misalnya, ketika 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 kelas BannerView dan InterstitialAd memiliki metode "hasil terakhir" yang sesuai, yang dapat digunakan aplikasi untuk mengambil Future terbaru untuk suatu tindakan tertentu. Metode InterstitialAd::LoadAd(), misalnya, memiliki metode yang sesuai yang disebut InterstitialAd::LoadAdLastResult(). Metode tersebut menampilkan Future yang dapat digunakan untuk memeriksa status panggilan terakhir terhadap 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 untuk membuat tampilan banner menjadi terlihat 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 untuk 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 untuk 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 untuk menampilkan iklan interstisial di 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 dipicu saat Future selesai. Cuplikan kode ini menggunakan petunjuk 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 agar diberi tahu mengenai peristiwa siklus hidup iklan

AdMob menyediakan kelas BannerView::Listener abstrak yang dapat diperpanjang dan diteruskan ke metode BannerView::SetListener(), agar Anda diberi tahu mengenai perubahan kotak lekat dan status presentasi pada tampilan banner. Kelas InterstitialAd::Listener abstrak serupa juga disediakan untuk iklan interstisial yang dapat diperpanjang agar diberi tahu mengenai perubahan status presentasi iklan interstisial.

Berikut adalah contoh implementasi kelas yang memperpanjang kelas BannerView::Listener (implementasi yang sama bisa dipakai 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.
  }
};

Apa 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.