Bắt đầu

Bạn có thể sử dụng AdMob để hiển thị quảng cáo trong ứng dụng C ++ của mình. Hướng dẫn này chỉ cho bạn cách tích hợp với Firebase và tương tác với SDK quảng cáo trên thiết bị di động của Google.

Nếu đây là lần đầu tiên bạn đi qua hướng dẫn này, chúng tôi khuyên bạn tải về và làm theo bằng cách sử dụng ứng dụng thử nghiệm AdMob .

Tích hợp với Firebase

  1. Hoàn tất các bước trong cài đặt dành cho iOS hoặc cài đặt dành cho Android phần để thêm AdMob và căn cứ hỏa lực để ++ ứng dụng C của bạn.

  2. Bao gồm các tiêu đề sau trong mã C ++ của ứng dụng của bạn:

    #include "firebase/admob.h"
    #include "firebase/admob/types.h"
    #include "firebase/app.h"
    #include "firebase/future.h"
    
  3. Thêm mã sau vào mã C ++ trong ứng dụng của bạn để khởi chạy thư viện AdMob với ID ứng dụng AdMob của bạn (mã này phải được thực thi trước khi tạo chế độ xem biểu ngữ hoặc quảng cáo xen kẽ):

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

Tương tác với SDK quảng cáo trên điện thoại di động của Google

Thiết lập ID đơn vị quảng cáo

Khi viết mã C ++ được hỗ trợ trên cả iOS và Android, bạn có thể cần sử dụng chỉ thị tiền xử lý để xác định mã chỉ nên được biên dịch trên một hệ điều hành cụ thể. Để hiển thị quảng cáo biểu ngữ và quảng cáo xen kẽ trên cả iOS và Android, bạn nên tạo ID đơn vị quảng cáo mới cho từng hệ điều hành và từng vị trí đặt quảng cáo duy nhất. Các ID đơn vị quảng cáo sau đã được tạo cho iOS và Android và được định cấu hình để luôn phân phát quảng cáo thử nghiệm:

#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

Thiết lập chế độ xem biểu ngữ

Thêm tiêu đề sau vào mã C ++ của ứng dụng của bạn:

#include "firebase/admob/banner_view.h"

Khai báo và khởi tạo một BannerView đối tượng:

firebase::admob::BannerView* banner_view;
banner_view = new firebase::admob::BannerView();

Tạo một AdSize và khởi tạo giao diện biểu ngữ:

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

Thiết lập quảng cáo trung gian

Thêm tiêu đề sau vào mã C ++ của ứng dụng của bạn:

#include "firebase/admob/interstitial_ad.h"

Khai báo và khởi tạo một InterstitialAd đối tượng:

firebase::admob::InterstitialAd* interstitial_ad;
interstitial_ad = new firebase::admob::InterstitialAd();

Khởi tạo quảng cáo xen kẽ:

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

Tạo yêu cầu quảng cáo AdMob

Thư viện AdMob cho phép bạn cung cấp thông tin nhắm mục tiêu tùy chỉnh cho một yêu cầu quảng cáo. Này được thực hiện bằng cách thiết lập các thành viên của một AdRequest struct. Sau đó các cấu trúc được truyền cho BannerView::LoadAd() hoặc InterstitialAd::LoadAd() phương pháp.

Để biết thông tin chung về nhắm mục tiêu và tùy yêu cầu quảng cáo, kiểm tra của chúng tôi iOSAndroid hướng dẫn Nhắm mục tiêu.

Đây là AdRequest struct được sử dụng bởi một BannerViewInterstitialAd để thực hiện một yêu cầu quảng cáo:

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

Khai báo và khởi tạo AdRequest struct:

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

Các mã sau thiết đặt giá trị thành viên của AdRequest struct thêm nhắm mục tiêu thông tin để yêu cầu quảng cáo:

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

Vượt qua AdRequest struct đến BannerView::LoadAd()Interstitial::LoadAd() phương pháp:

banner_view->LoadAd(my_ad_request);
interstitial_ad->LoadAd(my_ad_request);

Note: A single `AdRequest` struct can be reused for multiple calls.

Sử dụng Futures để theo dõi trạng thái hoàn thành của các lệnh gọi phương thức

Futures cung cấp cho bạn một cách để xác định tình trạng kết thúc trước đó của bạn BannerView hoặc InterstitialAd lời gọi phương thức. Khi có cuộc gọi được thực hiện cho các InterstitialAd::LoadAd() phương pháp, ví dụ, một tương lai mới được tạo và trả về. Các ứng dụng có thể thăm dò trạng thái của Tương lai để xác định thời điểm quảng cáo đã tải. Khi Tương lai hoàn tất, quảng cáo xen kẽ đã sẵn sàng để hiển thị tại điểm dừng tự nhiên tiếp theo trong ứng dụng của bạn.

Hầu hết các phương pháp trong BannerViewInterstitialAd lớp có một "kết quả cuối cùng" phương pháp tương ứng mà ứng dụng có thể sử dụng để lấy tương lai gần đây nhất cho một hành động nhất định. Các InterstitialAd::LoadAd() phương pháp, ví dụ, có một phương pháp tương ứng gọi là InterstitialAd::LoadAdLastResult() . Nó trả về một tương lai có thể được sử dụng để kiểm tra tình trạng của cuộc gọi cuối cùng để các InterstitialAd::LoadAd() phương pháp.

Tương tự như vậy, các ứng dụng có thể sử dụng BannerView::InitializeLastResult() phương pháp để có được một tương lai thể hiện trạng thái (và các mã lỗi, nếu có) của cuộc gọi cuối cùng để các BannerView::Initialize() phương pháp. Nếu tình trạng của nó là đầy đủ và mã lỗi của nó là firebase::admob::kAdMobErrorNone , sau đó bạn đã sẵn sàng để làm cho giao diện biểu ngữ có thể nhìn thấy bằng cách gọi BannerView::Show() phương pháp:

if (banner_view->InitializeLastResult().status() ==
    firebase::kFutureStatusComplete &&
    banner_view->InitializeLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  banner_view->Show();
}

Khi tình trạng của tương lai cho cuộc gọi cuối cùng để các BannerView::Show() phương pháp hoàn tất, sau đó bạn đã sẵn sàng để tải quảng cáo vào giao diện biểu ngữ:

if (banner_view->ShowLastResult().status() ==
    firebase::kFutureStatusComplete &&
    banner_view->ShowLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  banner_view->LoadAd(my_ad_request);
}

Đối với quảng cáo kẽ, sử dụng InterstitialAd::InitializeLastResult() phương pháp để có được một tương lai thể hiện trạng thái (và các mã lỗi, nếu có) của cuộc gọi cuối cùng để các InterstitialAd::Initialize() phương pháp. Nếu tình trạng của nó là đầy đủ và mã lỗi của nó là firebase::admob::kAdMobErrorNone , sau đó bạn đã sẵn sàng để tải quảng cáo chuyển tiếp:

if (interstitial_ad->InitializeLastResult().status() ==
    firebase::kFutureStatusComplete &&
    interstitial_ad->InitializeLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  interstitial_ad->LoadAd(my_ad_request);
}

Khi tình trạng của tương lai cho cuộc gọi cuối cùng để các InterstitialAd::LoadAd() phương pháp hoàn tất, sau đó bạn đã sẵn sàng để hiển thị các quảng cáo chuyển tiếp tại các điểm dừng tự nhiên tiếp theo trong ứng dụng của bạn:

if (interstitial_ad->LoadAdLastResult().status() ==
    firebase::kFutureStatusComplete &&
    interstitial_ad->LoadAdLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  interstitial_ad->Show();
}

Bạn cũng có thể đăng ký các lệnh gọi lại sẽ được gọi khi Tương lai hoàn thành. Đoạn mã này sử dụng một con trỏ hàm cho lệnh gọi lại:

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

Sử dụng trình nghe để được thông báo về các sự kiện trong vòng đời quảng cáo

AdMob cung cấp một bản tóm tắt BannerView::Listener lớp mà bạn có thể mở rộng và chuyển cho các BannerView::SetListener() phương pháp để được thông báo về những thay đổi trạng thái trình bày một cái nhìn biểu ngữ và khung giới hạn. Một trừu tượng tương tự InterstitialAd::Listener lớp cũng được cung cấp cho quảng cáo xen kẽ có thể được mở rộng để được thông báo về những thay đổi trạng thái trình bày một quảng cáo kẽ của.

Dưới đây là một ví dụ về thực hiện một lớp mở rộng BannerView::Listener lớp (một thực hiện tương tự có thể được sử dụng cho quảng cáo xen kẽ):

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

Cái gì tiếp theo

Tìm hiểu làm thế nào để kiếm tiền từ ứng dụng của bạn với AdMob và chắc chắn rằng để thay thế ID đơn vị quảng cáo thử nghiệm được sử dụng trong hướng dẫn này với đơn vị quảng cáo ID của riêng mình.