Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

เริ่ม

คุณสามารถใช้ AdMob เพื่อแสดงโฆษณาในแอป C ++ ของคุณ คู่มือนี้แสดงวิธีการรวมเข้ากับ Firebase และโต้ตอบกับ Google Mobile Ads SDK

หากนี่เป็นครั้งแรกที่คุณได้อ่านคู่มือนี้ขอแนะนำให้คุณดาวน์โหลดและทำตามโดยใช้ แอปทดสอบ AdMob

ผสานรวมกับ Firebase

  1. ทำตามขั้นตอนในส่วนการ ตั้งค่าสำหรับ iOS หรือการ ตั้งค่าสำหรับ Android เพื่อเพิ่ม AdMob และ Firebase ไปยังแอป C ++ ของคุณ

  2. รวมส่วนหัวต่อไปนี้ในรหัส C ++ ของแอปของคุณ:

     #include "firebase/admob.h"
    #include "firebase/admob/types.h"
    #include "firebase/app.h"
    #include "firebase/future.h"
     
  3. เพิ่มรหัสต่อไปนี้ในรหัส C ++ ในแอปของคุณเพื่อเริ่มต้นไลบรารี AdMob ด้วยรหัสแอป AdMob ของคุณ (รหัสนี้ควรถูกเรียกใช้ก่อนที่จะสร้างมุมมองแบนเนอร์หรือโฆษณาคั่นระหว่างหน้า):

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

โต้ตอบกับ SDK โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google

ตั้งค่ารหัสหน่วยโฆษณา

เมื่อเขียนรหัส C ++ ที่รองรับทั้ง iOS และ Android คุณอาจต้องใช้คำสั่ง preprocessor เพื่อกำหนดรหัสที่ควรจะรวบรวมในระบบปฏิบัติการที่ระบุเท่านั้น สำหรับการแสดงโฆษณาแบนเนอร์และโฆษณาคั่นระหว่างหน้าทั้ง iOS และ Android ขอแนะนำให้คุณสร้าง ID หน่วยโฆษณาใหม่สำหรับแต่ละระบบปฏิบัติการและแต่ละตำแหน่งโฆษณาที่ไม่ซ้ำกัน รหัสหน่วยโฆษณาต่อไปนี้สร้างขึ้นสำหรับ iOS และ Android และได้รับการกำหนดค่าให้แสดงโฆษณาทดสอบเสมอ:

 #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
 

ตั้งค่ามุมมองแบนเนอร์

เพิ่มส่วนหัวต่อไปนี้ในรหัส C ++ ของแอปของคุณ:

 #include "firebase/admob/banner_view.h"
 

ประกาศและยกตัวอย่างวัตถุ BannerView :

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

สร้าง AdSize และเริ่มต้นมุมมองแบนเนอร์:

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

ตั้งค่าโฆษณาคั่นระหว่างหน้า

เพิ่มส่วนหัวต่อไปนี้ในรหัส C ++ ของแอปของคุณ:

 #include "firebase/admob/interstitial_ad.h"
 

ประกาศและยกตัวอย่างวัตถุ InterstitialAd :

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

เริ่มต้นโฆษณาคั่นระหว่างหน้า:

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

สร้างคำขอโฆษณา AdMob

ไลบรารี AdMob ช่วยให้คุณสามารถให้ข้อมูลการกำหนดเป้าหมายเองไปยังคำขอโฆษณา สิ่งนี้ทำได้โดยการตั้งค่าสมาชิกของโครงสร้าง AdRequest โครงสร้างถูกส่งผ่านไปยัง BannerView::LoadAd() หรือ InterstitialAd::LoadAd()

สำหรับข้อมูลทั่วไปเกี่ยวกับการกำหนดเป้าหมายและปรับแต่งคำขอโฆษณาดูที่แนวทางการกำหนดเป้าหมาย iOS และ Android ของเรา

นี่คือโครงสร้าง AdRequest ใช้โดย BannerView และ InterstitialAd เพื่อสร้างคำขอโฆษณา:

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

ประกาศและเริ่มต้นโครงสร้าง AdRequest :

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

รหัสต่อไปนี้ตั้งค่าสมาชิกของโครงสร้าง AdRequest เพื่อเพิ่มข้อมูลการกำหนดเป้าหมายไปยังคำขอโฆษณา:

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

ผ่านโครงสร้าง AdRequest ไปยัง 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.
 

ใช้ฟิวเจอร์สเพื่อตรวจสอบสถานะความสมบูรณ์ของวิธีการโทร

ฟิวเจอร์ให้คุณมีวิธีในการกำหนดสถานะความสำเร็จของการเรียกเมธอด BannerView หรือ InterstitialAd ก่อนหน้าของคุณ เมื่อมีการโทรไปยัง InterstitialAd::LoadAd() ตัวอย่างเช่นอนาคตใหม่จะถูกสร้างและส่งคืน แอปสามารถสำรวจสถานะของอนาคตเพื่อดูว่าโฆษณาโหลดแล้วเมื่อใด เมื่ออนาคตเสร็จสมบูรณ์โฆษณาคั่นระหว่างหน้าก็พร้อมที่จะแสดงที่จุดหยุดตามธรรมชาติครั้งต่อไปในแอปของคุณ

วิธีการส่วนใหญ่ใน BannerView และ InterstitialAd มีวิธี "ผลลัพธ์ล่าสุด" ที่สอดคล้องกันที่แอปสามารถใช้เพื่อเรียกข้อมูลอนาคตล่าสุดสำหรับการดำเนินการที่กำหนด InterstitialAd::LoadAd() วิธีการเช่นมีวิธีการที่สอดคล้องกันเรียกว่า InterstitialAd::LoadAdLastResult() มันส่งกลับอนาคตที่สามารถใช้ในการตรวจสอบสถานะของการโทรล่าสุดไปยังวิธีการ InterstitialAd::LoadAd()

ในทำนองเดียวกันแอพสามารถใช้ BannerView::InitializeLastResult() เพื่อรับอนาคตที่แสดงสถานะ (และรหัสข้อผิดพลาดหากมี) ของการโทรครั้งล่าสุดไปยัง BannerView::Initialize() หากสถานะของมันเสร็จสมบูรณ์และรหัสข้อผิดพลาดคือ firebase::admob::kAdMobErrorNone คุณก็พร้อมที่จะทำให้มุมมองแบนเนอร์ปรากฏขึ้นโดยเรียก BannerView::Show() :

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

เมื่อสถานะในอนาคตสำหรับการเรียกไปยังวิธีการ BannerView::Show() ครั้งสุดท้ายเสร็จสมบูรณ์คุณก็พร้อมที่จะโหลดโฆษณาลงในมุมมองแบนเนอร์:

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

สำหรับโฆษณาคั่นระหว่างหน้าให้ใช้เมธอด InterstitialAd::InitializeLastResult() เพื่อรับอนาคตแทนสถานะ (และรหัสข้อผิดพลาดหากมี) ของการโทรครั้งล่าสุดไปยังวิธีการ InterstitialAd::Initialize() หากสถานะเสร็จสมบูรณ์และรหัสข้อผิดพลาดคือ firebase::admob::kAdMobErrorNone คุณก็พร้อมที่จะโหลดโฆษณาคั่นระหว่างหน้า:

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

เมื่อสถานะในอนาคตสำหรับการโทรครั้งสุดท้ายไปยังวิธีการ InterstitialAd::LoadAd() เสร็จสมบูรณ์คุณก็พร้อมที่จะแสดงโฆษณาคั่นระหว่างหน้าที่จุดหยุดตามธรรมชาติถัดไปในแอปของคุณ:

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

นอกจากนี้คุณยังสามารถลงทะเบียนการเรียกกลับที่จะเรียกใช้เมื่อสร้างเสร็จในอนาคต ข้อมูลโค้ดนี้ใช้ตัวชี้ฟังก์ชั่นสำหรับการโทรกลับ:

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

ใช้ผู้ฟังเพื่อรับการแจ้งเตือนเกี่ยวกับวงจรชีวิตของโฆษณา

AdMob จัดเตรียม BannerView::Listener เป็นนามธรรมซึ่งคุณสามารถขยายและส่งผ่านไปยัง BannerView::SetListener() เพื่อรับการแจ้งเตือนการเปลี่ยนแปลงสถานะการนำเสนอและขอบเขตของมุมมองแบนเนอร์ นอกจากนี้ยังมีคลาส InterstitialAd::Listener เป็นนามธรรมสำหรับโฆษณาคั่นระหว่างหน้าที่สามารถขยายได้เพื่อรับการแจ้งเตือนการเปลี่ยนแปลงสถานะการนำเสนอโฆษณาคั่นระหว่างหน้า

ด้านล่างนี้เป็นตัวอย่างการใช้งานของคลาสที่ขยาย BannerView::Listener (การนำไปใช้ที่คล้ายกันสามารถใช้สำหรับโฆษณาคั่นระหว่างหน้า):

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

อะไรต่อไป

เรียนรู้วิธี สร้างรายได้จากแอปของคุณ ด้วย AdMob และตรวจสอบให้แน่ใจว่าได้เปลี่ยนรหัสหน่วยโฆษณาทดสอบที่ใช้ในคู่มือนี้ด้วยรหัสหน่วยโฆษณาของคุณเอง