Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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 thực hiện hướng dẫn này, bạn nên tải xuống và làm theo cùng với ứng dụng thử nghiệm AdMob .

Tích hợp với Firebase

  1. Hoàn thành các bước trong phần Thiết lập cho iOS hoặc Thiết lập cho Android để thêm AdMob và Firebase vào ứ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 đoạn mã sau vào mã C ++ trong ứng dụng của bạn để khởi tạo thư viện AdMob bằng 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 thiết bị 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 các chỉ thị tiền xử lý để xác định mã chỉ nên được biên dịch trên một HĐH cụ thể. Để hiển thị 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 mỗi HĐH và từng vị trí quảng cáo duy nhất. ID đơn vị quảng cáo sau đây đã đượ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 đối tượng BannerView :

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

Tạo một AdSize và khởi tạo chế độ xem 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);
 

Thiết lập quảng cáo xen kẽ

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 đối tượng InterstitialAd :

 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 yêu cầu quảng cáo. Điều này được thực hiện bằng cách đặt các thành viên của cấu trúc AdRequest . Cấu trúc này sau đó được chuyển đến phương thức BannerView::LoadAd() hoặc InterstitialAd::LoadAd() .

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

Đây là cấu trúc AdRequest được sử dụng bởi BannerViewInterstitialAd để thực hiện 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 cấu trúc AdRequest :

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

Đoạn mã sau đặt các giá trị thành viên của cấu trúc AdRequest để thêm thông tin nhắm mục tiêu vào 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;
 

BannerView::LoadAd() cấu trúc AdRequest cho các phương thức BannerView::LoadAd()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.
 

Sử dụng Tương lai để theo dõi trạng thái hoàn thành của các cuộc gọi phương thức

Futures cung cấp cho bạn một cách để xác định trạng thái hoàn thành của các cuộc gọi phương thức BannerView hoặc InterstitialAd trước đó của bạn. Ví dụ, khi một cuộc gọi được thực hiện cho phương thức InterstitialAd::LoadAd() , một Tương lai mới được tạo và trả lại. Ứng dụng có thể thăm dò trạng thái của Tương lai để xác định khi quảng cáo đã được tải. Khi Tương lai hoàn tất, quảng cáo xen kẽ đã sẵn sàng để được 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 thức trong các BannerViewInterstitialAd đều có phương thức "kết quả cuối cùng" tương ứng mà các ứng dụng có thể sử dụng để truy xuất 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 trạng thái của cuộc gọi cuối cùng với phương thức InterstitialAd::LoadAd() .

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

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

Khi trạng thái của Tương lai cho cuộc gọi cuối cùng đến phương thức BannerView::Show() hoàn tất, thì bạn đã sẵn sàng tải quảng cáo vào chế độ xem 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 xen kẽ, hãy sử dụng phương thức InterstitialAd::InitializeLastResult() để lấy Tương lai biểu thị trạng thái (và mã lỗi, nếu có) của cuộc gọi cuối cùng với phương thức InterstitialAd::Initialize() . Nếu trạng thái của nó hoàn tất và mã lỗi của nó là firebase::admob::kAdMobErrorNone , thì bạn đã sẵn sàng tải quảng cáo xen kẽ:

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

Khi trạng thái của Tương lai cho cuộc gọi cuối cùng đến phương thức InterstitialAd::LoadAd() hoàn tất, thì bạn đã sẵn sàng để hiển thị quảng cáo xen kẽ tại đ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ý gọi lại để đượ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 hàm 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 một người nghe để được thông báo về các sự kiện vòng đời quảng cáo

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

Dưới đây là một ví dụ triển khai của một lớp mở rộng lớp BannerView::Listener (một triển khai 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 cách kiếm tiền từ ứng dụng của bạn với AdMob và đảm bảo thay thế ID đơn vị quảng cáo thử nghiệm được sử dụng trong hướng dẫn này bằng ID đơn vị quảng cáo của riêng bạn.