Mit Version 9.1.0 des Firebase C++ SDK wurde 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 an den Firebase AdMob C++ SDKs für iOS und Android vorgenommen wurden. Dazu gehören die Entfernung veralteter APIs und ein neuer Ablauf bei der Arbeit mit Vollbildanzeigen.
Das alte Firebase AdMob C++ SDK (firebase::admob
) wurde als veraltet gekennzeichnet und erhält in Zukunft keine Updates oder Fehlerkorrekturen.
Sowohl das neue Google Mobile Ads C++ SDK (firebase::gma
) als auch das alte Firebase AdMob C++ SDK (firebase::admob
) sind während der Einstellungsphase des Firebase AdMob C++ SDK Teil der Build-Archive für das Firebase C++ SDK.
Entfernung der alten API
Die folgenden APIs wurden vollständig aus dem Google Mobile Ads C++ SDK entfernt.
RewardedVideoAd
Der RewardedVideoAd
-Namespace von AdMob wurde durch die Klasse RewardedAd
ersetzt. RewardedAd
verhält sich ähnlich wie InterstitialAd
, enthält aber eine zusätzliche RewardedAdListener
, um Benachrichtigungen zu Artikelprämien zu erhalten.
NativeExpressAds
NativeExpressAd
von AdMob wurde 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-Namensraums
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 ältere 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 Build-Archiv des Firebase C++ SDK zur Verfügung gestellt:
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 |
Klassen-, Enum- und Strukturmigrationen
In der folgenden Tabelle sind bestimmte Klassen, Enums und Strukturen aufgeführt, die geändert oder entfernt wurden. Hier eine Zusammenfassung:
BannerView
wird inAdView
umbenannt.- „
NativeAdExpressView
“ wurde entfernt. - Der Namespace
RewardedVideo
wird durch eine KlasseRewardedAd
ersetzt. - Die Aufzählung
PresentationState
und die Listener werden entfernt und durchAdListener
- undFullScreenContent
-Listener ersetzt. Die folgenden Parameter werden in
AdRequests
als Konfigurationsparameter für einzelne Anzeigen entfernt:- die Konfiguration von Testgeräte-IDs
- der Ausrichtung von Anzeigen auf Basis des Alters
Stattdessen können diese Parameter jetzt in
RequestConfiguration
konfiguriert werden. Dies ist eine globale Einstellung, die sich auf alle nachfolgenden Ladevorgänge von Anzeigen auswirkt.
Eingestellt: firebase::admob namespace |
firebase::gma namespace erstellen |
---|---|
AdSizeType (Aufzählung) |
AdSize::Type (Aufzählung) |
BannerView |
AdView |
BannerView::Listener |
AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position |
AdView::Position |
BannerView::PresentationState |
Entfernt |
ChildDirectedTreatmentState |
RequestConfiguration::TagForChildDirectedTreatment |
Gender (Aufzählung) |
Entfernt |
InterstitialAd::Listener |
FullScreenContentListener PaidEventListener |
KeyValuePair |
Entfernt |
NativeExpressAdView |
Entfernt |
PollableRewardListener |
Entfernt |
RewardItem |
AdReward |
RewardedVideoAd (Namespace) |
RewardedAd (Klasse) |
RewardedVideoAd::Listener |
FullScreenContentListener PaidEventListener UserEarnedRewardListener |
AdMobError (Aufzählung) |
AdErrorCode (Aufzählung) |
RewardItem |
AdReward |
SDK-Initialisierung
Bei jeder Initialisierungsfunktion des Google Mobile Ads C++ SDK werden sofort zwei Statusanzeigen zurückgegeben:
Ein optionaler Parameter gibt an, ob vor Beginn des Initialisierungsvorgangs ein Abhängigkeitsfehler aufgetreten ist.
Der Rückgabeparameter ist ein Verweis auf eine
firebase::Future
. DerFuture
enthält die Ergebnisse der asynchronen Initialisierung der Vermittlungsadapter auf dem Gerät.
Das Google Mobile Ads C++ SDK kann zwar zum Laden von AdMob-Anzeigen aufgerufen werden, sobald die Initialisierungsfunktion zurückgegeben wird, andere Werbenetzwerke liefern jedoch erst Anzeigen aus, wenn der entsprechende Vermittlungsadapter vollständig initialisiert wurde. Dieser Vorgang erfolgt asynchron. Wenn Sie in Ihrer Anwendung Anzeigenbereitstellung verwenden, sollten Sie daher warten, bis die Future
behoben ist, bevor Sie versuchen, Anzeigen zu laden.
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;
}
Nachher
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 gängiger Banneranzeigengrößen und unterstützt die Anzeigengrößen AnchorAdaptive
und InlineAdaptive
mit einer dynamischen Höhe, die auf der gegebenen Breite und der aktuellen Bildschirmausrichtung basiert.
Statische AdSize -Konstanten zu firebase::gma::AdSize hinzugefügt |
|
---|---|
AdSize::kBanner |
Banneranzeigengröße der Mobile Marketing Association (MMA) (320 × 50 pixel, unabhängig von der Bildschirmdichte) |
AdSize::kFullBanner |
Größe einer Full-Banneranzeige des Interactive Advertising Bureau (IAB) (468 × 60 Pixel, dichteunabhängige Pixel) |
AdSize::kLargeBanner |
Höhere Version von kBanner , in der Regel 320 × 100 |
AdSize::kLeaderboard |
IAB-Anzeigengröße für Leaderboards (728 x 90 Pixel, dichteunabhängig) |
AdSize::kMediumRectangle |
Medium Rectangle-Anzeigengröße des Interactive Advertising Bureau (IAB) (300 × 250 Pixel, dichteunabhängig) |
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 aufgrund einer maximalen Höhe am besten für Banneranzeigen eignet
Mit diesem |
GetLandscapeInlineAdaptiveBannerAdSize |
Erstellt eine InlineAdaptive AdSize mit der angegebenen Breite und der Höhe des Geräts im Querformat |
GetPortraitInlineAdaptiveBannerAdSize |
Erstellt eine InlineAdaptive AdSize mit der angegebenen Breite und der Hochformathöhe des Geräts. |
GetCurrentOrientationInlineAdaptiveBannerAdSize |
Eine praktische Methode, um InlineAdaptive
AdSize für die aktuelle Benutzeroberflächenausrichtung und eine bestimmte Breite zurückzugeben. |
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);
Nachher
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
(bisher „Geburtstag“) wurden aus AdRequest
entfernt und sind jetzt Teil eines globalen RequestConfiguration
. Anwendungen können firebase::gma::SetRequestConfiguration()
zu Beginn des Lebenszyklus der Anwendung aufrufen, um diese Werte zu konfigurieren. Diese Einstellungen werden bei allen nachfolgenden Anzeigenladevorgängen berücksichtigt.
firebase::gma::AdRequest
ist weiterhin verfügbar, da es Kontextinformationen zum Laden von Anzeigen liefert, einschließlich Keywords und einer optionalen Content-URL.
Die AdRequest
-Struktur im C-Format von AdMob wurde durch eine Klasse mit Methoden ersetzt, die die Nutzerfreundlichkeit beim Definieren und Anhängen an die verschiedenen Listen mit Informationen verbessern.
Dies sind die wichtigsten Änderungen an AdRequest
:
- Extras sind jetzt mit dem Namen einer Mediationsadapterklasse verknüpft. Für Extras, die an den AdMob-Dienst gesendet werden, sollte der Standardklassenname verwendet werden, der unten definiert ist.
- Bei der Anzeigenanfrage übergeben Apps möglicherweise eine URL der Inhalte, die sie bereitstellen. So kann die Anzeige mithilfe des Keyword-Targetings auf andere angezeigte Inhalte abgestimmt werden.
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.
Nachher
// 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 für alle AdView
-, InterstitialAd
- und RewardedAd
-Anzeigentypen eine Future
mit einem AdResult
-Objekt zurück. Die Methode AdResult::is_successful
gibt true
zurück, wenn die Anzeigenanfrage erfolgreich erfüllt wurde, oder false
, wenn nicht.
Bei einem Fehler enthält die AdResult
ein AdError
-Objekt mit Informationen zum Problem auf Dienstebene, einschließlich des Fehlercodes, der Fehlermeldung und 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.
}
}
}
Nachher
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 BannerView::Listener
-Klasse von AdMob wurde im Google Mobile Ads C++ SDK durch zwei separate Listener-Klassen ersetzt:
AdListener
erfasst Ereignisse im Anzeigenlebenszyklus und Nutzerinteraktionen.AdViewBoundingBoxListener
wird aufgerufen, wenn die Größe desAdView
geändert oder er verschoben wird.
Zuordnungen von AdMob-OnPresentationStateChanged
-Google Mobile Ads-Callbacks
Der Enum-Typ firebase::admob::BannerView::PresentationState
und die Listener-Methode OnPresentationStateChanged
sind nicht im neuen Google Mobile Ads C++ SDK enthalten.
Es gibt folgende alternative Möglichkeiten, Änderungen des Präsentationsstatus im Lebenszyklus eines AdView
zu erkennen:
firebase::admob::BannerView::Listener
OnPresentationStateChanged Ereignis |
firebase::gma::AdListener Gegenstück |
---|---|
kPresentationStateHidden |
Wenn AdListener::OnAdClosed aufgerufen wird oder AdView::Hide() seinen asynchronen Vorgang erfolgreich abgeschlossen hat |
kPresentationStateVisibleWithoutAd |
Keine. Der Versuch, AdView::Show() ein nicht geladenes AdView aufzurufen, führt zu einem Fehler. |
kPresentationStateVisibleWithAd |
Wenn AdListener::OnAdOpened aufgerufen wird oder AdView::Show() seinen asynchronen Vorgang mit einer Anzeige erfolgreich abgeschlossen hat |
kPresentationStateOpenedPartialOverlay |
Ermitteln Sie die Größe und Position der angezeigten Anzeige, indem Sie den Begrenzungsrahmen abfragen, nachdem AdListener::OnAdOpened() aufgerufen wurde.
Alternativ können Sie die Position und AdSize des AdView abfragen und/oder den Begrenzungsrahmen über AdViewBoundingBoxListener überwachen. |
kPresentationStateCoveringUI |
Siehe kPresentationStateOpenedPartialOverlay oben |
RewardedAd
ist jetzt ein Kurs
Das eingestellte Firebase AdMob C++ SDK ermöglicht Anzeigen mit Prämie über eine Reihe von Funktionen im Namespace firebase::admob::rewarded_ad
. Diese Funktionen wurden in einer neuen RewardedAd
-Klasse zusammengeführt, die Anzeigen mit einer ähnlichen API-Oberfläche wie InterstitialAd
ausliefert (siehe nächster Abschnitt).
InterstitialAd
- und RewardedAd
-Listener
Sowohl Interstitial-Anzeigen als auch Anzeigen mit Prämie gelten als Vollbildanzeigen. Sie können ein neues FullScreenContentListener
einfügen, um Lebenszyklusereignisse für diese Anzeigentypen zu erfassen. Außerdem können Sie ein separates PaidEventListener
einfügen, um zu erfassen, wann der AdMob-Dienst ein kostenpflichtiges Ereignis erkannt hat.
RewardedAd
hat einen zusätzlichen Listener, um Ereignisse zu erfassen, bei denen Nutzer Prämien erhalten.
Neue Callback-Methoden für Vollbildanzeigen
FullScreenContentListener Methode |
PaidEventListener Methode |
UserEarnedRewardListener Methoden |
---|---|---|
OnAdClicked |
OnPaidEvent |
OnUserEarnedReward |
OnAdDismissedFullScreenContent |
||
OnAdFailedToShowFullScreenContent |
||
OnAdImpression |
||
OnAdShowedFullScreenContent |
Methoden geändert/entfernt/ersetzt
In der folgenden Tabelle sind die Methoden aufgeführt, die sich im neuen Google Mobile Ads C++ SDK geändert haben. Methoden mit aufgeführten Parametern bleiben erhalten, 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 von AdViewListener -Ereignissen und zukünftigen Ergebnissen von AdView::Show und AdView::Hide verarbeitet.
|
|
SetListener
|
AdView::SetAdListener AdView::SetBoundingBoxListener AdView::SetPaidEventListener |
Das neue Listener-Design verbessert die Genauigkeit der Erkennung von AdView -Lebenszyklusereignissen.
|
|
Listener::OnPresentationStateChanged
|
Entfernt | Siehe oben BannerView::SetListener .
|
|
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 Befehls 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
|
SetFullScreenContentListener SetPaidEventListener
|
||
Destroy
|
Entfernt | Das Bereinigen von Ressourcen ist jetzt Teil des RewardedAd -Destruktors.
|
|
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
|
SetFullScreenContentListener SetPaidEventListener
Show
|
Ein UserEarnedReward -Listener wird auch definiert, wenn ein RewardedAd angezeigt wird. Siehe unten.
|
|
Show(AdParent parent)
|
Show(UserEarnedRewardListener* listener)
|