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

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 questa è la prima volta passando attraverso questa guida, si consiglia di scaricare e seguire insieme utilizzando l' applicazione di test AdMob .

Integrazione con Firebase

  1. Completare i passaggi nella Configurazione per iOS o Configurazione per Android sezione per aggiungere AdMob e Firebase al C ++ app.

  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 utilizzare le direttive del preprocessore per definire il codice che deve essere compilato solo su un sistema operativo specifico. Per visualizzare annunci banner e interstitial sia su iOS che su Android, si consiglia di creare un nuovo ID unità pubblicitaria per ogni sistema operativo e ogni posizionamento di annuncio univoco. 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"

Dichiarare e creare un'istanza di un BannerView oggetto:

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

Crea un AdSize e inizializzare la vista striscione:

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"

Dichiarare e creare un'istanza di un InterstitialAd oggetto:

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

Inizializza l'annuncio interstiziale:

// 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 di targeting personalizzate a una richiesta di annuncio. Questo viene fatto impostando i membri di un AdRequest struct. La struct viene poi passato al BannerView::LoadAd() o InterstitialAd::LoadAd() metodo.

Per informazioni generali sul targeting e la personalizzazione di richieste di annuncio, controlla i nostri iOS e Android guide targeting.

Ecco AdRequest struct utilizzato da un BannerView e InterstitialAd per fare 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;
};

Dichiarare e inizializzare AdRequest struct:

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

Il codice seguente imposta i valori dei membri del AdRequest struct per aggiungere informazioni di 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;

Passare AdRequest struct al BannerView::LoadAd() e Interstitial::LoadAd() metodi:

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

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

Usa Futures per monitorare lo stato di completamento delle chiamate al metodo

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

La maggior parte dei metodi nelle BannerView e InterstitialAd classi hanno un metodo corrispondente "ultimo risultato" che le applicazioni possono utilizzare per recuperare il futuro più recente per una determinata azione. InterstitialAd::LoadAd() metodo, per esempio, ha un corrispondente metodo chiamato InterstitialAd::LoadAdLastResult() . Esso restituisce un futuro che può essere utilizzato per controllare lo stato della ultima chiamata al InterstitialAd::LoadAd() metodo.

Allo stesso modo, le applicazioni possono utilizzare il BannerView::InitializeLastResult() metodo per ottenere un futuro che rappresenta lo stato (e il codice di errore, se presente) dell'ultima chiamata al BannerView::Initialize() metodo. Se lo stato è completo e il suo codice di errore è firebase::admob::kAdMobErrorNone , allora siete pronti a fare la vista striscione visibile chiamando il BannerView::Show() Metodo:

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

Una volta che lo stato del futuro per l'ultima chiamata al BannerView::Show() il metodo è completa, allora siete pronti a caricare un annuncio nella vista striscione:

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

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

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

Una volta che lo stato del futuro per l'ultima chiamata al InterstitialAd::LoadAd() il metodo è completa, allora siete pronti per visualizzare l'annuncio interstiziale al successivo punto di sosta naturale nella vostra app:

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

Puoi anche registrare callback da invocare quando un Future è completato. Questo frammento di codice utilizza un puntatore a funzione per il callback:

// 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 essere informato sugli eventi del ciclo di vita dell'annuncio

AdMob fornisce un abstract BannerView::Listener classe che è possibile estendere e passare al BannerView::SetListener() metodo al fine di ricevere una notifica delle modifiche apportate di una vista bandiera dello stato di presentazione e di delimitazione scatola. Un simile astratto InterstitialAd::Listener classe è prevista anche per gli annunci interstiziali che può essere esteso in modo da ricevere una notifica delle modifiche allo stato la presentazione di un annuncio interstiziale.

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

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

Ulteriori informazioni su come monetizzare la tua app con AdMob e assicurarsi di sostituire gli ID delle unità pubblicitarie di prova utilizzati in questa guida con i tuoi ID delle unità pubblicitarie proprie.