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

Commencer

Vous pouvez utiliser AdMob pour afficher des annonces dans vos applications C++. Ce guide vous montre comment intégrer Firebase et interagir avec le SDK Google Mobile Ads.

Si c'est la première fois que vous parcourez ce guide, nous vous recommandons de télécharger et de suivre l' application de test AdMob .

Intégration avec Firebase

  1. Suivez les étapes de la section Configuration pour iOS ou Configuration pour Android pour ajouter AdMob et Firebase à votre application C++.

  2. Incluez les en-têtes suivants dans le code C++ de votre application :

    #include "firebase/admob.h"
    #include "firebase/admob/types.h"
    #include "firebase/app.h"
    #include "firebase/future.h"
    
  3. Ajoutez ce qui suit au code C++ de votre application pour initialiser la bibliothèque AdMob avec votre ID d'application AdMob (ce code doit être exécuté avant de créer une vue de bannière ou une annonce interstitielle) :

    #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);
    

Interagir avec le SDK Google Mobile Ads

Configurer les ID de bloc d'annonces

Lors de l'écriture de code C++ pris en charge sur iOS et Android, vous devrez peut-être utiliser des directives de préprocesseur pour définir le code qui ne doit être compilé que sur un système d'exploitation spécifique. Pour afficher des bannières et des annonces interstitielles sur iOS et Android, il est recommandé de créer un nouvel ID de bloc d'annonces pour chaque système d'exploitation et chaque emplacement d'annonce unique. Les ID de bloc d'annonces suivants ont été créés pour iOS et Android et sont configurés pour toujours diffuser des annonces test :

#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

Configurer une vue de bannière

Ajoutez l'en-tête suivant au code C++ de votre application :

#include "firebase/admob/banner_view.h"

Déclarez et instanciez un objet BannerView :

firebase::admob::BannerView* banner_view;
banner_view = new firebase::admob::BannerView();

Créez un AdSize et initialisez la vue de la bannière :

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);

Configurer une annonce interstitielle

Ajoutez l'en-tête suivant au code C++ de votre application :

#include "firebase/admob/interstitial_ad.h"

Déclarez et instanciez un objet InterstitialAd :

firebase::admob::InterstitialAd* interstitial_ad;
interstitial_ad = new firebase::admob::InterstitialAd();

Initialisez l'annonce interstitielle :

// 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);

Créer une demande d'annonce AdMob

La bibliothèque AdMob vous permet de fournir des informations de ciblage personnalisées à une demande d'annonce. Cela se fait en définissant les membres d'une structure AdRequest . La structure est ensuite transmise à la BannerView::LoadAd() ou InterstitialAd::LoadAd() .

Pour des informations générales sur le ciblage et la personnalisation des demandes d'annonces, consultez nos guides de ciblage iOS et Android .

Voici la structure AdRequest utilisée par un BannerView et un InterstitialAd pour effectuer une demande d'annonce :

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;
};

Déclarez et initialisez la structure AdRequest :

// Initialize all the AdRequest struct member values to zero.
firebase::admob::AdRequest my_ad_request = {};

Le code suivant définit les valeurs de membre de la structure AdRequest pour ajouter des informations de ciblage à la demande d'annonce :

// 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;

Transmettez la structure AdRequest aux BannerView::LoadAd() et 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.

Utiliser Futures pour surveiller l'état d'achèvement des appels de méthode

Les contrats à terme vous permettent de déterminer l'état d'avancement de vos précédents appels de méthode BannerView ou InterstitialAd . Lorsqu'un appel est effectué à la méthode InterstitialAd::LoadAd() , par exemple, un nouveau Future est créé et renvoyé. Les applications peuvent interroger l'état de l'avenir pour déterminer quand l'annonce a été chargée. Une fois l'avenir terminé, l'annonce interstitielle est prête à être affichée au prochain point d'arrêt naturel dans votre application.

La plupart des méthodes des classes BannerView et InterstitialAd ont une méthode "dernier résultat" correspondante que les applications peuvent utiliser pour récupérer le Future le plus récent pour une action donnée. La méthode InterstitialAd::LoadAd() , par exemple, a une méthode correspondante appelée InterstitialAd::LoadAdLastResult() . Elle renvoie un Future qui peut être utilisé pour vérifier l'état du dernier appel à la méthode InterstitialAd::LoadAd() .

De même, les applications peuvent utiliser la BannerView::InitializeLastResult() pour obtenir un Future représentant l'état (et le code d'erreur, le cas échéant) du dernier appel à la BannerView::Initialize() . Si son statut est complet et que son code d'erreur est firebase::admob::kAdMobErrorNone , alors vous êtes prêt à rendre la vue de la bannière visible en appelant la BannerView::Show() :

if (banner_view->InitializeLastResult().status() ==
    firebase::kFutureStatusComplete &&
    banner_view->InitializeLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  banner_view->Show();
}

Une fois que le statut de Future pour le dernier appel à la BannerView::Show() est terminé, vous êtes alors prêt à charger une publicité dans la vue bannière :

if (banner_view->ShowLastResult().status() ==
    firebase::kFutureStatusComplete &&
    banner_view->ShowLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  banner_view->LoadAd(my_ad_request);
}

Pour les annonces interstitielles, utilisez la méthode InterstitialAd::InitializeLastResult() pour obtenir un Future représentant l'état (et le code d'erreur, le cas échéant) du dernier appel à la méthode InterstitialAd::Initialize() . Si son état est terminé et que son code d'erreur est firebase::admob::kAdMobErrorNone , vous êtes prêt à charger l'annonce interstitielle :

if (interstitial_ad->InitializeLastResult().status() ==
    firebase::kFutureStatusComplete &&
    interstitial_ad->InitializeLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  interstitial_ad->LoadAd(my_ad_request);
}

Une fois que le statut de Future pour le dernier appel à la méthode InterstitialAd::LoadAd() est terminé, vous êtes prêt à afficher l'annonce interstitielle au prochain point d'arrêt naturel dans votre application :

if (interstitial_ad->LoadAdLastResult().status() ==
    firebase::kFutureStatusComplete &&
    interstitial_ad->LoadAdLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  interstitial_ad->Show();
}

Vous pouvez également enregistrer des rappels à invoquer lorsqu'un Future est terminé. Cet extrait de code utilise un pointeur de fonction pour le rappel :

// 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);
  }
}

Utiliser un écouteur pour être informé des événements du cycle de vie des annonces

AdMob fournit une classe abstraite BannerView::Listener que vous pouvez étendre et transmettre à la BannerView::SetListener() afin d'être informé des modifications apportées à l'état de présentation et au cadre de délimitation d'une vue de bannière. Une classe abstraite similaire InterstitialAd::Listener est également fournie pour les annonces interstitielles qui peuvent être étendues afin d'être informé des modifications apportées à l'état de présentation d'une annonce interstitielle.

Vous trouverez ci-dessous un exemple d'implémentation d'une classe qui étend la classe BannerView::Listener (une implémentation similaire peut être utilisée pour les annonces interstitielles) :

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.
  }
};

Et après

Découvrez comment monétiser votre application avec AdMob et assurez-vous de remplacer les ID de bloc d'annonces de test utilisés dans ce guide par vos propres ID de bloc d'annonces.