Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

เริ่ม

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

ถ้านี่เป็นครั้งแรกที่คุณจะผ่านคู่มือนี้ก็จะแนะนำให้คุณดาวน์โหลดและทำตามโดยใช้ แอปทดสอบ 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

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

เมื่อเขียนโค้ด C++ ที่รองรับทั้ง iOS และ Android คุณอาจต้องใช้คำสั่งตัวประมวลผลล่วงหน้าเพื่อกำหนดโค้ดที่ควรคอมไพล์บนระบบปฏิบัติการเฉพาะ สำหรับการแสดงแบนเนอร์และโฆษณาคั่นระหว่างหน้าทั้งบน iOS และ Android ขอแนะนำให้คุณสร้างรหัสหน่วยโฆษณาใหม่สำหรับแต่ละระบบปฏิบัติการและแต่ละตำแหน่งโฆษณาที่ไม่ซ้ำกัน รหัสหน่วยโฆษณาต่อไปนี้สร้างขึ้นสำหรับ 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 struct struct จะถูกส่งผ่านไปยัง BannerView::LoadAd() หรือ InterstitialAd::LoadAd() วิธีการ

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

นี่คือ AdRequest struct ใช้โดย 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 struct:

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

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

// 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 struct ไป 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.

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

ฟิวเจอร์สให้คุณมีวิธีการตรวจสอบสถานะการเสร็จสิ้นการก่อนหน้านี้ของคุณ 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() วิธีการเสร็จสมบูรณ์แล้วคุณก็พร้อมที่จะแสดงโฆษณาคั่นระหว่างที่จุดหยุดต่อไปตามธรรมชาติใน app ของคุณ:

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

ใช้ Listener เพื่อรับการแจ้งเตือนเหตุการณ์วงจรชีวิตโฆษณา

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 และให้แน่ใจว่าจะเข้ามาแทนที่รหัสหน่วยโฆษณาทดสอบที่ใช้ในคู่มือนี้กับรหัสหน่วยโฆษณาของคุณเอง