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

Начать

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