Mit der Veröffentlichung des Firebase C++ SDK v9.1.0 wird ein neues Google Mobile Ads C++ SDK eingeführt.
Das Google Mobile Ads C++ SDK ist eine neue API-Oberfläche, die die wichtigsten Änderungen enthält, die 2021 und 2022 am Firebase AdMob C++ SDK für iOS und Android vorgenommen wurden. Dazu gehören die Entfernung eingestellter APIs und ein neuer Ablauf bei der Verwendung von Vollbildanzeigentypen.
Das alte Firebase AdMob C++ SDK (firebase::admob) wurde als veraltet markiert und erhält keine Updates oder Fehlerkorrekturen mehr.
Sowohl das neue Google Mobile Ads C++ SDK (firebase::gma) als auch das alte Firebase AdMob C++ SDK (firebase::admob) bleiben während des Zeitraums für die Einstellung des Firebase AdMob C++ SDK Teil der Build-Archive für das Firebase C++ SDK.
Entfernung von Legacy-APIs
Die folgenden APIs wurden vollständig aus dem Google Mobile Ads C++ SDK entfernt.
RewardedVideoAd
Der AdMob-Namespace RewardedVideoAd wurde durch die Klasse RewardedAd ersetzt. RewardedAd verhält sich ähnlich wie InterstitialAd, enthält aber ein zusätzliches RewardedAdListener, um Benachrichtigungen über Artikelbelohnungen zu erhalten.
NativeExpressAds
Die NativeExpressAd von AdMob war bereits in jedem Firebase AdMob C++ SDK als veraltet gekennzeichnet. Daher ist NativeExpressAd nicht im neuen Google Mobile Ads C++ SDK enthalten.
Änderung des SDK-Namespace
Das SDK wurde in einen neuen Namespace verschoben und hat eine neue Verzeichnisstruktur:
Namespace firebase::gma
Die Quellen des neuen Google Mobile Ads C++ SDK befinden sich im firebase::gma-Namespace. Der alte firebase::admob-Namespace wurde zusammen mit dem Firebase AdMob C++ SDK eingestellt.
Verzeichnisstruktur
Headerdateien wurden in ein neues Verzeichnis im Build-Archiv verschoben:
| Eingestelltes Firebase AdMob C++ SDK | Neues Google Mobile Ads C++ SDK |
|---|---|
include/firebase/admob |
include/firebase/gma |
Bibliothek
Das Firebase AdMob C++ SDK wird als statische Bibliothek im Firebase C++-SDK-Buildarchiv bereitgestellt:
iOS
| Eingestelltes Firebase AdMob C++ SDK | Neues Google Mobile Ads C++ SDK |
|---|---|
firebase_admob.xcframework |
firebase_gma.xcframework |
Android
| Eingestelltes Firebase AdMob C++ SDK | Neues Google Mobile Ads C++ SDK |
|---|---|
libfirebase_admob.a |
libfirebase_gma.a |
Migration von Klassen, Enums und Strukturen
In der folgenden Tabelle sind bestimmte Klassen, Enums und Strukturen aufgeführt, die geändert oder entfernt wurden. Hier eine Zusammenfassung:
BannerViewwird inAdViewumbenannt.- „
NativeAdExpressView“ wurde entfernt. - Der Namespace
RewardedVideowird durch eineRewardedAd-Klasse ersetzt. - Die Enumeration
PresentationStateund die Listener werden entfernt und durchAdListenerundFullScreenContent-Listener ersetzt. Die folgenden Parameter werden als Konfigurationsparameter pro Anzeige in
AdRequestsentfernt:- Konfiguration von Testgeräte-IDs
- die Ausrichtung von Werbung nach Alter
Stattdessen können diese Parameter jetzt in
RequestConfigurationkonfiguriert werden. Das ist eine globale Einstellung, die sich auf alle nachfolgenden Anzeigenaufrufe auswirkt.
Eingestellt: firebase::admob namespace |
firebase::gma namespace erstellen |
|---|---|
AdSizeType (Aufzählung) |
AdSize::Type (Aufzählung) |
BannerView |
AdView |
BannerView::Listener |
AdListenerAdViewBoundingBoxListenerPaidEventListener |
BannerView::Position |
AdView::Position |
BannerView::PresentationState |
Entfernt |
ChildDirectedTreatmentState |
RequestConfiguration::TagForChildDirectedTreatment |
Gender (Aufzählung) |
Entfernt |
InterstitialAd::Listener |
FullScreenContentListenerPaidEventListener |
KeyValuePair |
Entfernt |
NativeExpressAdView |
Entfernt |
PollableRewardListener |
Entfernt |
RewardItem |
AdReward |
RewardedVideoAd (Namespace) |
RewardedAd (Kurs) |
RewardedVideoAd::Listener |
FullScreenContentListenerPaidEventListenerUserEarnedRewardListener |
AdMobError (Aufzählung) |
AdErrorCode (Aufzählung) |
RewardItem |
AdReward |
SDK-Initialisierung
Jede Initialisierungsfunktion des Google Mobile Ads C++ SDK gibt sofort zwei Statusindikatoren zurück:
Ein optionaler „out“-Parameter gibt an, ob vor dem Start des Initialisierungsprozesses ein Abhängigkeitsfehler aufgetreten ist.
Der Rückgabeparameter ist ein Verweis auf ein
firebase::Future.Futureenthält die Ergebnisse der asynchronen Initialisierung der Vermittlungsadapter auf dem Gerät.
Während das Google Mobile Ads C++ SDK aufgerufen werden kann, um AdMob-Anzeigen zu laden, sobald die Initialisierungsfunktion zurückgegeben wird, werden Anzeigen von anderen Werbenetzwerken erst ausgeliefert, wenn der entsprechende Vermittlungsadapter vollständig initialisiert wurde. Dieser Vorgang erfolgt asynchron. Wenn Sie also die Anzeigenvermittlung in Ihrer App verwenden, empfehlen wir, mit dem Laden von Anzeigen zu warten, bis das Problem Future behoben ist.
Vorher
firebase::App* app = ::firebase::App::Create();
firebase::InitResult result = firebase::admob::Initialize(*app, kAdMobAppID);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing dependency.
// Check the device logs for more information.
return;
}
Nach
using firebase::App;
using firebase::Future;
using firebase::gma::AdapterInitializationStatus;
App* app = ::firebase::App::Create();
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(*app, &result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing dependency.
// Check the device logs for more information.
return;
}
// Poll the future to wait for its completion either in this
// thread, or as part of your game loop by calling
// firebase::gma::InitializeLastResult();
while (future.status() == firebase::kFutureStatusPending) {
// Initialization on-going, continue to wait.
}
// future.status() is either kFutureStatusComplete or there’s an error
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::AdErrorCodeNone) {
AdapterInitializationStatus* status = future.result();
// Check status for any mediation adapters you wish to use.
// ..
} else {
// Handle initialization error.
}
Änderungen an AdSize innerhalb von AdView
AdSize enthält jetzt statische Elemente für gängige Banneranzeigengrößen und unterstützt die Anzeigengrößen AnchorAdaptive und InlineAdaptive, die eine dynamische Höhe basierend auf der angegebenen Breite und der aktuellen Ausrichtung des Bildschirms haben.
Statische AdSize-Konstanten, die firebase::gma::AdSize hinzugefügt wurden |
|
|---|---|
AdSize::kBanner |
Banneranzeigengröße der Mobile Marketing Association (MMA) (320 × 50 dichteunabhängige Pixel) |
AdSize::kFullBanner |
IAB-Vollbanneranzeigengröße (468 × 60 dichteunabhängige Pixel) |
AdSize::kLargeBanner |
Höhere Version von kBanner, in der Regel 320 × 100 |
AdSize::kLeaderboard |
IAB-Leaderboard-Anzeigengröße (728 × 90 dp) |
AdSize::kMediumRectangle |
IAB-Anzeigengröße „Medium Rectangle“ (Interactive Advertising Bureau) (300 × 250 dichteunabhängige Pixel) |
Statische Methoden in firebase::gma::AdSize zum Erstellen von Instanzen von AdSize |
|
|---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize |
Erstellt ein AdSize mit der angegebenen Breite und einer von Google optimierten Höhe, um eine Banneranzeige im Querformat zu erstellen. |
GetPortraitAnchoredAdaptiveBannerAdSize |
Erstellt ein AdSize mit der angegebenen Breite und einer von Google optimierten Höhe, um eine Banneranzeige im Hochformat zu erstellen. |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize |
Erstellt ein AdSize mit der angegebenen Breite und einer von Google optimierten Höhe, um eine Banneranzeige für die aktuelle Ausrichtung zu erstellen. |
GetInlineAdaptiveBannerAdSize |
Erstellt ein AdSize, das sich für Banneranzeigen eignet, wenn eine maximale Höhe angegeben wird.
Mit diesem |
GetLandscapeInlineAdaptiveBannerAdSize |
Erstellt ein InlineAdaptive AdSize mit der angegebenen Breite und der Höhe des Geräts im Querformat. |
GetPortraitInlineAdaptiveBannerAdSize |
Erstellt ein InlineAdaptive AdSize mit der angegebenen Breite und der Porträthöhe des Geräts. |
GetCurrentOrientationInlineAdaptiveBannerAdSize |
Eine Hilfsmethode zum Zurückgeben von InlineAdaptive
AdSize für die aktuelle Ausrichtung der Benutzeroberfläche bei einer bestimmten Breite. |
Vorher
firebase::admob::BannerView* banner_view = new firebase::admob::BannerView();
firebase::admob::AdSize ad_size;
ad_size.ad_size_type = firebase::admob::kAdSizeStandard;
ad_size.width = 320;
ad_size.height = 50;
// ad_parent is a reference to an iOS UIView or an Android Activity.
// banner_ad_unit is your ad unit id for banner ads.
banner_view->Initialize(ad_parent, banner_ad_unit, ad_size);
Nach
firebase::gma::AdView* ad_view = new firebase::gma::AdView();
// ad_parent is a reference to an iOS UIView or an Android Activity.
// banner_ad_unit is your ad unit id for banner ads.
banner_view->Initialize(ad_parent, banner_ad_unit, firebase::gma::AdSize.kBanner);
AdRequest und globale Konfiguration
Die Testgeräte-IDs TagForChildDirectedTreatment und TagForUnderAgeOfConsent (die zuvor über das Geburtsdatum verarbeitet wurden) wurden aus AdRequest entfernt und sind jetzt Teil einer globalen RequestConfiguration. Anwendungen können firebase::gma::SetRequestConfiguration() früh im Lebenszyklus der Anwendung aufrufen, um diese Werte zu konfigurieren. Alle nachfolgenden Vorgänge zum Laden von Anzeigen berücksichtigen diese Einstellungen, sobald sie konfiguriert sind.
firebase::gma::AdRequest ist weiterhin vorhanden, da es Kontextinformationen zum Laden von Anzeigen liefert, einschließlich Keywords und einer optionalen Inhalts-URL.
Die AdRequest-C-Struktur von AdMob wurde durch eine Klasse mit Methoden ersetzt, die eine bessere Nutzerfreundlichkeit beim Definieren und Anhängen an die verschiedenen Informationslisten bieten.
Hier sind die wichtigsten Änderungen bei AdRequest:
- Extras sind jetzt mit dem Klassennamen eines Vermittlungsadapters verknüpft. Für Extras, die an den AdMob-Dienst gesendet werden, sollte der unten definierte Standardklassenname verwendet werden.
- Beim Anfordern einer Anzeige können Apps eine URL des Inhalts übergeben, der bereitgestellt wird. So kann die Keyword-Ausrichtung die Anzeige mit anderen angezeigten Inhalten abstimmen.
Vorher
firebase::admob::AdRequest request;
// Keywords to be used in targeting.
const char* keywords[] = {"GMA", "C++", "Fun"};
request.keyword_count = sizeof(keywords) / sizeof(keywords[0]);
request.keywords = keywords;
// "Extra" key value pairs.
static const firebase::admob::KeyValuePair extras[] = {
{"extra_name", "extra_value"}};
request.extras_count = sizeof(extras) / sizeof(extras[0]);
request.extras = kRequestExtras;
// Devices that should be served test ads.
const char* test_device_ids[] ={ "123", "4567", "890" };
request.test_device_id_count =
sizeof(test_device_ids) / sizeof(test_device_ids[0]);
request.test_device_ids = test_device_ids;
// Sample birthday to help determine the age of the user.
request.birthday_day = 10;
request.birthday_month = 11;
request.birthday_year = 1975;
// Load Ad with the AdRequest.
Nach
// Do once after Google Mobile Ads C++ SDK initialization.
// These settings will affect all Ad Load operations.
firebase::gma::RequestConfiguration configuration;
configuration.max_ad_content_rating =
firebase::gma::RequestConfiguration::kMaxAdContentRatingPG;
configuration.tag_for_child_directed_treatment =
firebase::gma::RequestConfiguration::kChildDirectedTreatmentTrue;
configuration.tag_for_under_age_of_consent =
firebase::gma::RequestConfiguration::kUnderAgeOfConsentFalse;
configuration.test_device_ids.push_back("1234");
configuration.test_device_ids.push_back("4567");
configuration.test_device_ids.push_back("890");
firebase::gma::SetRequestConfiguration(configuration);
// Then, more information must be provided via an AdRequest when
// loading individual ads.
firebase::gma::AdRequest ad_request;
// "Extra" key value pairs.
ad_request.add_keyword("GMA");
ad_request.add_keyword("C++");
ad_request.add_keyword("Fun");
// Content URL.
ad_request.set_content_url("www.example.com");
// Mediation Adapter Extras.
#if defined(Android)
const char* ad_network_extras_class_name =
"com/google/ads/mediation/admob/AdMobAdapter";
#else // iOS
const char* ad_network_extras_class_name = "GADExtras";
#endif
ad_request.add_extra(ad_network_extras_class_name, "extra_name", "extra_value");
// Load Ad with the AdRequest. See next section.
AdResults
LoadAd gibt jetzt eine Future mit einem AdResult-Objekt für alle Anzeigentypen AdView, InterstitialAd und RewardedAd zurück. Die Methode AdResult::is_successful gibt true zurück, wenn die Anzeigenanfrage erfolgreich ausgeführt wurde, andernfalls false.
Bei einem Fehler enthält AdResult ein AdError-Objekt mit Informationen zum Problem auf Dienstebene, einschließlich des Fehlercodes, der Fehlermeldung und der Domainstrings.
Vorher
firebase::Future<AdResult> future;
void load_ad() {
// Assume an already created AdRequest object.
future = ad_view->LoadAd(ad_request);
}
void your_game_loop() {
if (future.status() == firebase::kFutureStatusComplete) {
if(future.error() != firebase::admob::kAdMobErrorNone) {
// There was either an internal SDK issue that caused the Future to
// fail its completion, or AdMob failed to fulfill the ad request.
// Details are unknown other than the Future’s error code returned
// from future.error().
} else {
// The ad loaded successfully.
}
}
}
Nach
firebase::Future<AdResult> future;
void load_ad() {
// Assumes a previously created AdRequest object.
// See "AdRequest and Global Configuration" above.
future = ad_view->LoadAd(ad_request);
}
void your_game_loop() {
// Check the future status in your game loop:
if (future.status() == firebase::kFutureStatusComplete) {
if(future.error() != firebase::admob::kAdErrorCodeNone) {
// There was an internal SDK issue that caused the Future to fail.
} else {
// Future completed successfully. Check the GMA result.
const AdResult* ad_result = future.result();
if ( ad_result->is_successful() != true ) {
// GMA failed to serve an ad. Gather information about the error.
const AdError& ad_error = ad_result->ad_error();
AdErrorCode error_code = ad_error.code();
const std::string error_domain = ad_error.domain();
const std::string error_message = ad_error.message();
} else {
// The ad loaded successfully.
}
}
}
}
AdListener-Ereignisse in AdView
Die AdMob-Klasse BannerView::Listener wurde im Google Mobile Ads C++ SDK durch zwei separate Listener-Klassen ersetzt:
AdListenererfasst Ereignisse im Anzeigen-Lifecycle und Nutzerinteraktionsereignisse.AdViewBoundingBoxListenerwird aufgerufen, wenn die Größe desAdViewgeändert oder dasAdViewverschoben wird.
AdMob-OnPresentationStateChanged-Callback-Google Mobile Ads-Zuordnungen
Der Aufzählungstyp firebase::admob::BannerView::PresentationState und die Listener-Methode OnPresentationStateChanged sind nicht im neuen Google Mobile Ads C++ SDK enthalten.
Im Lebenszyklus einer AdView gibt es folgende alternative Möglichkeiten, Änderungen des Präsentationsstatus zu erkennen:
firebase::admob::BannerView::Listener
OnPresentationStateChanged Ereignis |
firebase::gma::AdListener Gegenstück |
|---|---|
kPresentationStateHidden |
Wenn AdListener::OnAdClosed aufgerufen wird oder wenn AdView::Hide() den asynchronen Vorgang erfolgreich abgeschlossen hat |
kPresentationStateVisibleWithoutAd |
Keine. Der Versuch, AdView::Show() für ein nicht geladenes AdView aufzurufen, führt zu einem Fehler. |
kPresentationStateVisibleWithAd |
Wenn AdListener::OnAdOpened aufgerufen wird oder wenn AdView::Show() seinen asynchronen Vorgang mit einer Anzeige erfolgreich abgeschlossen hat |
kPresentationStateOpenedPartialOverlay |
Fragen Sie das umgebende Rechteck ab, nachdem AdListener::OnAdOpened() aufgerufen wurde, um die Größe und Position der angezeigten Anzeige zu ermitteln.
Alternativ können Sie die Position des AdView und AdSize abfragen und/oder das umgebende Rechteck über AdViewBoundingBoxListener überwachen. |
kPresentationStateCoveringUI |
Siehe kPresentationStateOpenedPartialOverlay oben |
RewardedAd ist jetzt eine Klasse
Das eingestellte Firebase AdMob C++ SDK ermöglichte die Bereitstellung von Anzeigen mit Prämie über eine Sammlung von Funktionen im Namespace firebase::admob::rewarded_ad. Diese Funktionen wurden in einer neuen RewardedAd-Klasse zusammengefasst, die Anzeigen mit einer ähnlichen API-Oberfläche wie InterstitialAd ausliefert (siehe nächsten Abschnitt).
InterstitialAd- und RewardedAd-Listener
Sowohl Interstitial- als auch Anzeigen mit Prämie gelten als Vollbildanzeigen. Ein neues FullScreenContentListener kann installiert werden, um auf Ereignisse im Lebenszyklus von Anzeigen für diese Anzeigentypen zu reagieren. Außerdem kann ein separates PaidEventListener installiert werden, um zu erfassen, wann der AdMob-Dienst ein bezahltes Ereignis erkannt hat.
RewardedAd hat einen zusätzlichen Listener, um Ereignisse mit Nutzerprämien zu erfassen.
Neue Callback-Methoden für Vollbildanzeigen
FullScreenContentListener-Methoden |
PaidEventListener-Methoden |
UserEarnedRewardListener-Methoden |
|---|---|---|
OnAdClicked |
OnPaidEvent |
OnUserEarnedReward |
OnAdDismissedFullScreenContent |
||
OnAdFailedToShowFullScreenContent |
||
OnAdImpression |
||
OnAdShowedFullScreenContent |
Methoden geändert/entfernt/ersetzt
In der folgenden Tabelle sind die spezifischen Methoden aufgeführt, die sich im neuen Google Mobile Ads C++ SDK geändert haben. Methoden mit aufgeführten Parametern sind weiterhin vorhanden, ihre Signaturen haben sich jedoch geändert.
| Klasse | Firebase AdMob C++ SDK API | Google Mobile Ads C++ SDK API | Hinweise |
|---|---|---|---|
BannerView
|
MoveTo
|
AdView::SetPosition
|
|
presentation_state
|
Entfernt | Wird durch AdViewListener-Ereignisse und zukünftige Ergebnisse von AdView::Show und AdView::Hide verarbeitet.
|
|
SetListener
|
AdView::SetAdListenerAdView::SetBoundingBoxListenerAdView::SetPaidEventListener |
Das neue Listener-Design erhöht die Genauigkeit der Erkennung von AdView-Lebenszyklusereignissen.
|
|
Listener::OnPresentationStateChanged
|
Entfernt | Siehe BannerView::SetListener oben.
|
|
Listener::OnBoundingBoxChanged
|
AdViewBoundingBoxListener::OnBoundingBoxChanged
|
||
| InterstitialAd | Initialize(AdParent parent, const char* ad_unit_id)
|
Initialize(AdParent parent)
|
Der Parameter ad_unit_id ist jetzt Teil des Vorgangs LoadAd.
|
LoadAd(const AdRequest& request)
|
LoadAd(const char* ad_unit_id, const AdRequest& request)
|
||
presentation_state
|
Entfernt | Die Aufzählung presentation_state wurde entfernt. Verwenden Sie FullScreenContentListener.
|
|
SetListener
|
SetFullScreenContentListenerSetPaidEventListener
|
||
Destroy
|
Entfernt | Das Bereinigen von Ressourcen ist jetzt Teil des Destruktors RewardedAd.
|
|
RewardedAd(formell RewardedVideoAd)
|
Initialize
|
Initialize(AdParent parent)
|
AdParent wurde zuvor an Show übergeben, ist jetzt aber Teil der Initialisierung.
|
presentation_state
|
Entfernt | Die Aufzählung presentation_state wurde entfernt. Verwenden Sie FullScreenContentListener.
|
|
SetListener
|
SetFullScreenContentListenerSetPaidEventListener
Show
|
Ein UserEarnedReward-Listener wird auch definiert, wenn ein RewardedAd angezeigt wird. Siehe unten.
|
|
Show(AdParent parent)
|
Show(UserEarnedRewardListener* listener)
|