Check out what’s new from Firebase at Google I/O 2022. Learn more

מתחילים!

אתה יכול להשתמש ב-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);
    

צור אינטראקציה עם Google Mobile Ads SDK

הגדר את מזהי יחידות המודעות

בעת כתיבת קוד 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 .

להלן מבנה 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.

השתמש ב-futures כדי לעקוב אחר מצב ההשלמה של קריאות למתודה

עתידים מספקים לך דרך לקבוע את סטטוס ההשלמה של קריאות קודמות שלך BannerView או InterstitialAd . כאשר מתבצעת קריאה לשיטת InterstitialAd::LoadAd() , למשל, נוצר עתיד חדש ומוחזר. אפליקציות יכולות לסקור את סטטוס העתיד כדי לקבוע מתי המודעה נטענה. לאחר השלמת העתיד, מודעת הביניים מוכנה להצגה בנקודת העצירה הטבעית הבאה באפליקציה שלך.

לרוב השיטות BannerView ו- InterstitialAd יש שיטת "תוצאה אחרונה" מתאימה שבה אפליקציות יכולות להשתמש כדי לאחזר את העתיד העדכני ביותר עבור פעולה נתונה. InterstitialAd::LoadAd() למשל, יש שיטה מתאימה בשם InterstitialAd::LoadAdLastResult() . זה מחזיר Future שניתן להשתמש בו כדי לבדוק את מצב הקריאה האחרונה לשיטת InterstitialAd::LoadAd() .

באופן דומה, אפליקציות יכולות להשתמש בשיטת BannerView::InitializeLastResult() כדי לקבל Future המייצג את המצב (וקוד השגיאה, אם יש) של הקריאה האחרונה לשיטת 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);
  }
}

השתמש במאזין כדי לקבל הודעה על אירועי מחזור חיים של מודעות

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 והקפד להחליף את מזהי יחידות המודעות לבדיקה המשמשים במדריך זה במזהי יחידות המודעות שלך.