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 ceci est votre première fois en passant par ce guide, il est recommandé de télécharger et de suivre le long de l' aide de l' application de test AdMob .

Intégration avec Firebase

  1. Suivez les étapes de l' installation pour iOS ou le programme d' installation pour Android section 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++ dans 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 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 à la fois 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 de 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éclarer et instancier un BannerView objet:

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

Créer un AdSize et initialiser le point de 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éclarer et instancier un InterstitialAd objet:

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 réglant les membres d'une AdRequest struct. La structure est ensuite transmis à la BannerView::LoadAd() ou InterstitialAd::LoadAd() méthode.

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

Voici le AdRequest struct utilisé par un BannerView et InterstitialAd pour faire 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éclarer et initialiser le AdRequest struct:

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

Le code suivant définit les valeurs membres du AdRequest struct ajouter le ciblage des informations à 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;

Passez le AdRequest struct au BannerView::LoadAd() et Interstitial::LoadAd() méthodes:

banner_view->LoadAd(my_ad_request);
interstitial_ad->LoadAd(my_ad_request);

Note: A single `AdRequest` struct can be reused for multiple calls.

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

À terme vous fournir un moyen de déterminer l'état d'avancement de votre précédente BannerView ou InterstitialAd appels de méthode. Lorsqu'un appel est fait à la InterstitialAd::LoadAd() méthode, par exemple, un nouvel avenir est créé et retourné. Les applications peuvent interroger l'état du futur pour déterminer quand l'annonce a été chargée. Une fois le Future 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 dans les BannerView et InterstitialAd classes ont une méthode « dernier résultat » correspondant que les applications peuvent utiliser pour récupérer le plus récent avenir pour une action donnée. Le InterstitialAd::LoadAd() méthode, par exemple, a un procédé correspondant appelé InterstitialAd::LoadAdLastResult() . Il retourne un avenir qui peut être utilisé pour vérifier l'état du dernier appel à la InterstitialAd::LoadAd() méthode.

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

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

Une fois le statut de futur pour le dernier appel à la BannerView::Show() méthode est terminée, vous êtes prêt à charger une annonce dans la vue de la 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 le InterstitialAd::InitializeLastResult() méthode pour obtenir un avenir représentant l'état (et le code d'erreur, le cas échéant) du dernier appel à la InterstitialAd::Initialize() méthode. Si son état est complet et son code d'erreur est firebase::admob::kAdMobErrorNone , alors 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 le statut de futur pour le dernier appel à la InterstitialAd::LoadAd() méthode est terminée, 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 futur 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);
  }
}

Utilisez un écouteur pour être averti des événements du cycle de vie des annonces

AdMob fournit un résumé BannerView::Listener classe que vous pouvez étendre et passer à la BannerView::SetListener() méthode afin d'être informé des modifications apportées à un état de présentation de vue bannière et boîte englobante. Un extrait similaire InterstitialAd::Listener classe est également fourni 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.

Voici un exemple d' implémentation d'une classe qui étend la BannerView::Listener classe (une implémentation similaire peut être utilisé 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

Apprenez à monétiser votre application avec AdMob et assurez - vous de remplacer les ID de bloc d'annonces de test utilisés dans ce guide avec vos propres identifiants d'unité d'annonce.