Catch up on everthing we announced at this year's Firebase Summit. Learn more

البدء

يمكنك استخدام AdMob لعرض الإعلانات في تطبيقات C ++. يوضح لك هذا الدليل كيفية التكامل مع Firebase والتفاعل مع Google Mobile Ads SDK.

إذا كانت هذه هي المرة الأولى التي يمر بها هذا الدليل، فمن المستحسن أن تقوم بتحميل ومتابعة على طول باستخدام التطبيق اختبار في AdMob .

التكامل مع Firebase

  1. أكمل الخطوات في إعداد لدائرة الرقابة الداخلية أو الإعداد لالروبوت القسم لإضافة في 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() الأسلوب.

للحصول على معلومات عامة عن الاستهداف وتخصيص طلبات الإعلانات، تحقق من دائرة الرقابة الداخلية و الروبوت أدلة استهداف.

وهنا يكمن 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() . تقوم بإرجاع المستقبل التي يمكن استخدامها للتحقق من حالة من المكالمة الأخيرة إلى 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() طريقة من أجل أن يتم إعلامك من تغييرات على الدولة تقديم وجهة نظر راية والمربع المحيط. A مجردة مماثلة 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 وتأكد من استبدال وحدة معرفات اختبار الإعلانية المستخدمة في هذا الدليل مع معرفات الخاصة وحدتك الإعلانية.