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 и взаимодействовать с Google Mobile Ads SDK.

Если это ваш первый раз , когда происходит это руководство, рекомендуется загрузить и следовать вместе с помощью тестового AdMob приложения .

Интегрировать с Firebase

  1. Выполните действия , описанные в программе настройки для прошивки или установок для 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() метод, например, новое будущее создается и возвращается. Приложения могут опрашивать статус будущего, чтобы определить, когда была загружена реклама. Как только Future будет завершен, межстраничная реклама будет готова для показа в следующей естественной точке остановки в вашем приложении.

Большинство методов в 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();
}

Вы также можете зарегистрировать обратные вызовы, которые будут вызываться после завершения Future. Этот фрагмент кода использует указатель функции для обратного вызова:

// 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 и убедитесь , чтобы заменить идентификаторы единиц теста объявлений , используемые в данном руководстве со своими собственными идентификаторами рекламных блоков.