Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Memulai

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

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