คุณสามารถใช้ AdMob เพื่อแสดงโฆษณาในแอป C++ ของคุณ คู่มือนี้แสดงวิธีผสานรวมกับ Firebase และโต้ตอบกับ SDK โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google
หากคุณอ่านคู่มือนี้เป็นครั้งแรก ขอแนะนำให้ดาวน์โหลดและปฏิบัติตามโดยใช้ แอปทดสอบ AdMob
ผสานรวมกับ Firebase
ทำตามขั้นตอนในส่วนการ ตั้งค่าสำหรับ iOS หรือ การตั้งค่าสำหรับ Android เพื่อเพิ่ม AdMob และ Firebase ในแอป C++
รวมส่วนหัวต่อไปนี้ในโค้ด C++ ของแอปของคุณ:
#include "firebase/admob.h" #include "firebase/admob/types.h" #include "firebase/app.h" #include "firebase/future.h"
เพิ่มสิ่งต่อไปนี้ในโค้ด 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
โฆษณา จากนั้น โครงสร้างจะถูกส่งไปยัง BannerView::LoadAd()
หรือ InterstitialAd::LoadAd()
สำหรับข้อมูลทั่วไปเกี่ยวกับการกำหนดเป้าหมายและการปรับแต่งคำขอโฆษณา โปรดดูคู่มือการกำหนดเป้าหมาย iOS และ Android
นี่คือโครงสร้าง BannerView
AdRequest
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.
ใช้ Futures เพื่อตรวจสอบสถานะความสมบูรณ์ของการเรียกเมธอด
ฟิวเจอร์สช่วยให้คุณสามารถกำหนดสถานะความสมบูรณ์ของการเรียกใช้เมธอด BannerView
หรือ InterstitialAd
ก่อนหน้านี้ได้ เมื่อมีการเรียกใช้ InterstitialAd::LoadAd()
เช่น อนาคตใหม่จะถูกสร้างขึ้นและส่งคืน แอปสามารถสำรวจสถานะของอนาคตเพื่อพิจารณาว่าโฆษณาโหลดเมื่อใด เมื่ออนาคตเสร็จสมบูรณ์ โฆษณาคั่นระหว่างหน้าก็พร้อมที่จะแสดงที่จุดหยุดตามธรรมชาติถัดไปในแอปของคุณ
เมธอดส่วนใหญ่ใน BannerView
และ InterstitialAd
มีเมธอด "ผลลัพธ์ล่าสุด" ที่สอดคล้องกัน ซึ่งแอปสามารถใช้เพื่อดึงข้อมูลอนาคตล่าสุดสำหรับการดำเนินการที่กำหนด ตัวอย่างเช่น เมธอด InterstitialAd::LoadAd( InterstitialAd::LoadAd()
มีเมธอดที่เกี่ยวข้องเรียกว่า InterstitialAd::LoadAdLastResult()
คืนค่า Future ที่สามารถใช้ตรวจสอบสถานะของการเรียกครั้งสุดท้ายไปยัง 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()
เพื่อรับ Future ที่แสดงสถานะ (และรหัสข้อผิดพลาด หากมี) ของการเรียกครั้งสุดท้ายไปยังเมธอด 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);
}
}
ใช้ 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 และอย่าลืมแทนที่รหัสหน่วยโฆษณาทดสอบที่ใช้ในคู่มือนี้ด้วยรหัสหน่วยโฆษณาของคุณเอง