Loslegen

Sie können AdMob verwenden, um Anzeigen in Ihren C++-Apps anzuzeigen. In dieser Anleitung erfahren Sie, wie Sie Firebase integrieren und mit dem Google Mobile Ads SDK interagieren.

Wenn dies das erste Mal ist durch diese Führung geht, wird empfohlen , dass Sie den Download starten und folgen Sie den mit AdMob Test - App .

Integration mit Firebase

  1. Führen Sie die Schritte in der Einrichtung für iOS oder Einrichtung für Android Abschnitt AdMob und Firebase zu Ihrem C ++ App hinzuzufügen.

  2. Fügen Sie die folgenden Header in den C++-Code Ihrer App ein:

    #include "firebase/admob.h"
    #include "firebase/admob/types.h"
    #include "firebase/app.h"
    #include "firebase/future.h"
    
  3. Fügen Sie dem C++-Code in Ihrer App Folgendes hinzu, um die AdMob-Bibliothek mit Ihrer AdMob-App-ID zu initialisieren.

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

Mit dem Google Mobile Ads SDK interagierens

Richten Sie die Anzeigenblock-IDs ein

Beim Schreiben von C++-Code, der sowohl von iOS als auch von Android unterstützt wird, müssen Sie möglicherweise Präprozessordirektiven verwenden, um Code zu definieren, der nur auf einem bestimmten Betriebssystem kompiliert werden soll. Für die Anzeige von Banner- und Interstitial-Anzeigen auf iOS und Android wird empfohlen, für jedes Betriebssystem und jede einzelne Anzeigenplatzierung eine neue Anzeigenblock-ID zu erstellen. Die folgenden Anzeigenblock-IDs wurden für iOS und Android erstellt und sind so konfiguriert, dass immer Testanzeigen ausgeliefert werden:

#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

Richten Sie eine Banneransicht ein

Fügen Sie dem C++-Code Ihrer App den folgenden Header hinzu:

#include "firebase/admob/banner_view.h"

Deklarieren und instanziieren BannerView Objekt:

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

Erstellen Sie einen AdSize und initialisieren das Banner Ansicht:

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

Interstitial-Anzeige einrichten

Fügen Sie dem C++-Code Ihrer App den folgenden Header hinzu:

#include "firebase/admob/interstitial_ad.h"

Deklarieren und instanziieren ein InterstitialAd Objekt:

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

Initialisieren Sie die Interstitial-Anzeige:

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

Erstellen Sie eine AdMob-Anzeigenanfrage

Mit der AdMob-Bibliothek können Sie einer Anzeigenanfrage benutzerdefinierte Targeting-Informationen bereitstellen. Dies wird erreicht, indem die Mitglieder einer getan AdRequest Struktur. Die struct wird dann an dem übergebenen BannerView::LoadAd() oder InterstitialAd::LoadAd() Methode.

Allgemeine Informationen zum Targeting und Anzeigenanforderungen angepasst haben , überprüfen unsere aus iOS und Android - Targeting Guides.

Hier ist die AdRequest Struktur durch einen verwendete BannerView und InterstitialAd auf eine Anzeigenanfrag zu machen:

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

Deklarieren und initialisieren die AdRequest Struktur:

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

Der folgende Code legt die Elementwerte der AdRequest struct Informationen an die Anzeigenanfrage hinzufügen Targeting:

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

Übergeben Sie die AdRequest Struktur zum BannerView::LoadAd() und Interstitial::LoadAd() Methoden:

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

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

Verwenden Sie Futures, um den Abschlussstatus von Methodenaufrufen zu überwachen

Futures bieten Ihnen eine Möglichkeit , den Abschlussstatus Ihrer bisherigen zu bestimmen BannerView oder InterstitialAd Methodenaufrufe. Wenn ein Anruf an denen gemacht wird InterstitialAd::LoadAd() Methode, zum Beispiel, wird eine neue Zukunft erstellt und zurückgegeben. Apps können den Status der Zukunft abfragen, um festzustellen, wann die Anzeige geladen wurde. Sobald die Zukunft abgeschlossen ist, kann die Interstitial-Anzeige am nächsten natürlichen Haltepunkt in Ihrer App geschaltet werden.

Die meisten Methoden in der BannerView und InterstitialAd Klassen haben eine entsprechende „letztes Ergebnis“ Methode , dass die Apps die letzte Zukunft für eine bestimmte Maßnahme abrufen können. Die InterstitialAd::LoadAd() Methode, zum Beispiel, hat ein entsprechendes Verfahren genannt InterstitialAd::LoadAdLastResult() . Es gibt eine Zukunft, die den Status des letzten Anrufs an denen überprüfen verwendet werden kann InterstitialAd::LoadAd() Methode.

Auf ähnliche Weise können Anwendungen die Verwendung BannerView::InitializeLastResult() Methode eine Zukunft zu erhalten , den Status darstellt (und den Fehlercode, falls vorhanden) des letzten Anrufs an die BannerView::Initialize() Methode. Wenn der Status abgeschlossen ist und seine Fehlercode ist firebase::admob::kAdMobErrorNone , dann sind Sie bereit die Banneransicht sichtbar durch den Aufruf der machen BannerView::Show() Methode:

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

Sobald die Zukunft des Status für den letzten Aufruf der BannerView::Show() Methode abgeschlossen ist , dann sind Sie bereit , eine Anzeige in die Banneransicht zu laden:

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

Bei Interstitial - Anzeigen verwenden , um die InterstitialAd::InitializeLastResult() Methode eine Zukunft zu erhalten , die den Status (und den Fehlercode, falls vorhanden) des letzten Anrufs an die InterstitialAd::Initialize() Methode. Wenn der Status abgeschlossen ist und sein Fehlercode ist firebase::admob::kAdMobErrorNone , dann sind Sie bereit , die Interstitial - Anzeige zu laden:

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

Sobald die Zukunft des Status für den letzten Aufruf der InterstitialAd::LoadAd() Verfahren abgeschlossen sind, dann sind Sie bereit , die Interstitial - Anzeige bei dem nächsten natürlichen Haltepunkt in der App angezeigt werden :

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

Sie können auch Callbacks registrieren, die aufgerufen werden, wenn ein Future abgeschlossen ist. Dieser Codeausschnitt verwendet einen Funktionszeiger für den 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);
  }
}

Verwenden Sie einen Listener, um über Ereignisse im Anzeigenlebenszyklus benachrichtigt zu werden

AdMob bietet eine abstrakte BannerView::Listener - Klasse, die Sie auf die erweitern und weitergeben können BannerView::SetListener() Methode , um Änderungen an einer Banneransicht Präsentation Zustand und Begrenzungskasten informiert zu werden. Eine ähnliche abstrakte InterstitialAd::Listener - Klasse wird auch für Interstitial - Anzeigen versehen, um erweitert werden kann , um eine Interstitial - Anzeige Präsentation Zustand über Änderungen zu werden.

Im Folgenden ist eine beispielhafte Implementierung einer Klasse, die sich BannerView::Listener - Klasse (eine ähnliche Implementierung verwendet für Interstitial - Anzeigen werden kann):

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

Was kommt als nächstes

Erfahren Sie, wie Sie Ihre App monetarisieren mit AdMob und stellen Sie sicher , dass der Testanzeigenblock - IDs in diesem Handbuch mit Ihrem eigenen Anzeigenblock - IDs zu ersetzen.