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

Per iniziare

Puoi utilizzare AdMob per visualizzare annunci nelle tue app C++. Questa guida mostra come integrarsi con Firebase e interagire con Google Mobile Ads SDK.

Se è la prima volta che consulti questa guida, ti consigliamo di scaricare e continuare a utilizzare l' app di prova di AdMob .

Integra con Firebase

  1. Completa i passaggi nella sezione Configurazione per iOS o Configurazione per Android per aggiungere AdMob e Firebase alla tua app C++.

  2. Includi le seguenti intestazioni nel codice C++ della tua app:

    #include "firebase/admob.h"
    #include "firebase/admob/types.h"
    #include "firebase/app.h"
    #include "firebase/future.h"
    
  3. Aggiungi quanto segue al codice C++ nella tua app per inizializzare la libreria AdMob con il tuo ID app AdMob (questo codice deve essere eseguito prima di creare una visualizzazione banner o un annuncio interstitial):

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

Interagisci con Google Mobile Ads SDK

Imposta gli ID delle unità pubblicitarie

Quando si scrive codice C++ supportato sia su iOS che su Android, potrebbe essere necessario usare le direttive del preprocessore per definire il codice che deve essere compilato solo su un sistema operativo specifico. Per visualizzare banner e annunci interstitial sia su iOS che su Android, si consiglia di creare un nuovo ID unità pubblicitaria per ciascun sistema operativo e ogni posizionamento univoco dell'annuncio. I seguenti ID unità pubblicitaria sono stati creati per iOS e Android e sono configurati per pubblicare sempre annunci di prova:

#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

Imposta una visualizzazione banner

Aggiungi la seguente intestazione al codice C++ della tua app:

#include "firebase/admob/banner_view.h"

Dichiara e crea un'istanza di un oggetto BannerView :

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

Crea un AdSize e inizializza la visualizzazione banner:

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

Imposta un annuncio interstitial

Aggiungi la seguente intestazione al codice C++ della tua app:

#include "firebase/admob/interstitial_ad.h"

Dichiara e crea un'istanza di un oggetto InterstitialAd :

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

Inizializza l'annuncio interstitial:

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

Crea una richiesta di annuncio AdMob

La libreria AdMob ti consente di fornire informazioni sul targeting personalizzato a una richiesta di annuncio. Questo viene fatto impostando i membri di una struttura AdRequest . La struttura viene quindi passata al BannerView::LoadAd() o InterstitialAd::LoadAd() .

Per informazioni generali sul targeting e sulla personalizzazione delle richieste di annunci, consulta le nostre guide al targeting per iOS e Android .

Ecco la struttura AdRequest utilizzata da BannerView e InterstitialAd per effettuare una richiesta di annuncio:

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

Dichiara e inizializza la struttura AdRequest :

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

Il codice seguente imposta i valori dei membri della struttura AdRequest per aggiungere informazioni sul targeting alla richiesta di annuncio:

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

Passa la struttura AdRequest ai BannerView::LoadAd() e 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.

Utilizzare Futures per monitorare lo stato di completamento delle chiamate di metodo

I future forniscono un modo per determinare lo stato di completamento delle precedenti chiamate al metodo BannerView o InterstitialAd . Quando viene effettuata una chiamata al metodo InterstitialAd::LoadAd() , ad esempio, viene creato e restituito un nuovo Future. Le app possono eseguire il polling dello stato del futuro per determinare quando l'annuncio è stato caricato. Una volta completato il futuro, l'annuncio interstitial è pronto per essere visualizzato al successivo punto di arresto naturale nella tua app.

La maggior parte dei metodi nelle classi BannerView e InterstitialAd ha un metodo "ultimo risultato" corrispondente che le app possono utilizzare per recuperare il Future più recente per una determinata azione. Il metodo InterstitialAd::LoadAd() , ad esempio, ha un metodo corrispondente chiamato InterstitialAd::LoadAdLastResult() . Restituisce un Future che può essere utilizzato per controllare lo stato dell'ultima chiamata al metodo InterstitialAd::LoadAd() .

Allo stesso modo, le app possono utilizzare il BannerView::InitializeLastResult() per ottenere un Future che rappresenta lo stato (e il codice di errore, se presente) dell'ultima chiamata al BannerView::Initialize() . Se il suo stato è completo e il suo codice di errore è firebase::admob::kAdMobErrorNone , allora sei pronto per rendere visibile la visualizzazione banner chiamando il BannerView::Show() :

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

Una volta completato lo stato del futuro per l'ultima chiamata al BannerView::Show() , sei pronto per caricare un annuncio nella visualizzazione banner:

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

Per gli annunci interstitial, utilizza il metodo InterstitialAd::InitializeLastResult() per ottenere un Future che rappresenta lo stato (e il codice di errore, se presente) dell'ultima chiamata al metodo InterstitialAd::Initialize() . Se il suo stato è completo e il suo codice di errore è firebase::admob::kAdMobErrorNone , allora sei pronto per caricare l'annuncio interstitial:

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

Una volta completato lo stato del futuro per l'ultima chiamata al metodo InterstitialAd::LoadAd() , sei pronto per visualizzare l'annuncio interstitial al successivo punto di arresto naturale nella tua app:

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

Puoi anche registrare le richiamate da richiamare al completamento di un Future. Questo frammento di codice utilizza un puntatore a funzione per la richiamata:

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

Utilizza un listener per ricevere notifiche sugli eventi del ciclo di vita degli annunci

AdMob fornisce una classe BannerView::Listener astratta che puoi estendere e passare al BannerView::SetListener() per essere informato delle modifiche allo stato di presentazione e al riquadro di delimitazione di una visualizzazione banner. Una classe astratta InterstitialAd::Listener viene fornita anche per gli annunci interstitial che possono essere estesi per essere notificati delle modifiche allo stato di presentazione di un annuncio interstitial.

Di seguito è riportato un esempio di implementazione di una classe che estende la classe BannerView::Listener (un'implementazione simile può essere utilizzata per gli annunci interstitial):

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

Qual è il prossimo

Scopri come monetizzare la tua app con AdMob e assicurati di sostituire gli ID unità pubblicitaria di prova utilizzati in questa guida con i tuoi ID unità pubblicitaria.