Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

להתחיל

אתה יכול להשתמש ב- AdMob כדי להציג מודעות באפליקציות C ++ שלך. מדריך זה מראה לך כיצד להשתלב עם Firebase ולקיים אינטראקציה עם SDK של מודעות Google לנייד.

אם זו הפעם הראשונה שאתה עובר במדריך זה, מומלץ להוריד ולבצע מעקב באמצעות אפליקציית הבדיקה AdMob .

השתלב עם Firebase

  1. השלם את השלבים בסעיף הגדרה עבור iOS או הגדרה עבור אנדרואיד להוספת 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, ייתכן שיהיה עליך להשתמש בהוראות מעבד מקדים כדי להגדיר קוד שיש לקמפל רק במערכת הפעלה ספציפית. להצגת מודעות באנר ומודעות ביניים גם ב- 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 אובייקט 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 אובייקט 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 את מבנה 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::Listener שתוכל להרחיב ולהעביר לשיטת BannerView::SetListener() מנת לקבל הודעה על שינויים במצב המצגת של תצוגת הבאנר ותיבת התוחם. מחלקה מודעת InterstitialAd::Listener מופשטת דומה 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 וודא שאתה מחליף את מזהי יחידות המודעות הבדיקות המשמשות במדריך זה במזהים משלך ליחידת מודעות.