Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Iniziare

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

Se è la prima volta che leggi questa guida, ti consigliamo di scaricarla e seguirla utilizzando l' app di prova AdMob .

Integrazione 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 utilizzare le direttive del preprocessore per definire il codice che deve essere compilato solo su un sistema operativo specifico. Per visualizzare banner e annunci interstitial su iOS e Android, si consiglia di creare un nuovo ID unità pubblicitaria per ogni sistema operativo e ogni posizionamento di annunci univoco. I seguenti ID unità pubblicitarie sono stati creati per iOS e Android e sono configurati per offrire 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 BannerView 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 di 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;
};

Dichiarare e inizializzare 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 AdRequest struttura AdRequest 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;

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.

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

I futures ti forniscono un modo per determinare lo stato di completamento delle tue 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 interrogare lo 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 l'eventuale codice di errore) dell'ultima chiamata al BannerView::Initialize() . Se il suo stato è completo e il suo codice di errore è firebase::admob::kAdMobErrorNone , 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 di Future 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 l'eventuale codice di errore) dell'ultima chiamata al metodo InterstitialAd::Initialize() . Se il suo stato è completo e il suo codice di errore è firebase::admob::kAdMobErrorNone , 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 di Future 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 i callback da richiamare quando un Future è completato. 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 ricevere notifiche sulle modifiche allo stato di presentazione e al riquadro di delimitazione di una visualizzazione banner. Una classe InterstitialAd::Listener astratta simile viene fornita anche per gli annunci interstitial che possono essere estesi per ricevere notifica 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à pubblicitarie di prova utilizzati in questa guida con i tuoi ID unità pubblicitarie.