Il rilascio dell'SDK Firebase C++ v9.1.0 introduce un nuovo SDK C++ per gli annunci per dispositivi mobili di Google.
L'SDK C++ di Google Mobile Ads è una nuova superficie API che incorpora le principali modifiche apportate agli SDK C++ di Firebase AdMob per iOS e Android nel 2021 e nel 2022, inclusa la rimozione delle API obsolete e un nuovo flusso quando si lavora con annunci a schermo intero tipi.
Il vecchio SDK Firebase AdMob C++ ( firebase::admob
) è stato contrassegnato come deprecato e da ora in poi non riceverà aggiornamenti o correzioni di bug.
Sia il nuovo SDK C++ di Google Mobile Ads ( firebase::gma
) che il vecchio SDK C++ di Firebase AdMob ( firebase::admob
) rimarranno parte degli archivi di build per l'SDK di Firebase C++ durante la finestra di deprecazione dell'SDK di Firebase AdMob C++.
Rimozione dell'API legacy
Le seguenti API sono state rimosse completamente dall'SDK C++ di Google Mobile Ads.
RewardedVideoAd
Lo spazio dei nomi RewardedVideoAd
di AdMob è stato sostituito con la classe RewardedAd
. RewardedAd
si comporta in modo simile a InterstitialAd
ma include un RewardedAdListener
aggiuntivo per ricevere la notifica dei premi degli articoli.
NativeExpressAds
NativeExpressAd
di AdMob era già stato contrassegnato come obsoleto in ciascun SDK Firebase AdMob C++. Pertanto NativeExpressAd
non è incluso nel nuovo SDK C++ di Google Mobile Ads.
Modifica dello spazio dei nomi dell'SDK
L'SDK è stato spostato in un nuovo spazio dei nomi e ha una nuova struttura di directory:
Spazio dei nomi firebase::gma
Le origini del nuovo SDK C++ per gli annunci per dispositivi mobili di Google si trovano nello spazio dei nomi firebase::gma
. Il vecchio spazio dei nomi firebase::admob
è stato deprecato insieme all'SDK Firebase AdMob C++.
Struttura delle directory
I file di intestazione sono stati spostati in una nuova directory all'interno dell'archivio build:
SDK Firebase AdMob C++ obsoleto | Nuovo SDK C++ per gli annunci per dispositivi mobili di Google |
---|---|
include/firebase/admob | include/firebase/gma |
Biblioteca
L'SDK Firebase AdMob C++ verrà fornito come libreria statica all'interno dell'archivio della build dell'SDK Firebase C++:
iOS
SDK Firebase AdMob C++ obsoleto | Nuovo SDK C++ per gli annunci per dispositivi mobili di Google |
---|---|
firebase_admob.xcframework | firebase_gma.xcframework |
Androide
SDK Firebase AdMob C++ obsoleto | Nuovo SDK C++ per gli annunci per dispositivi mobili di Google |
---|---|
libfirebase_admob.a | libfirebase_gma.a |
Migrazioni di classi, enumerazioni e strutture
La tabella seguente elenca classi, enumerazioni e strutture specifiche che sono state modificate o rimosse. Ecco un riepilogo:
-
BannerView
viene rinominatoAdView
. -
NativeAdExpressView
viene rimosso. - Lo spazio dei nomi
RewardedVideo
viene sostituito con una classeRewardedAd
. - L'enumerazione e i listener
PresentationState
vengono rimossi e sostituiti con i listenerAdListener
eFullScreenContent
. I seguenti parametri vengono rimossi come parametri di configurazione per annuncio in
AdRequests
:- la configurazione degli ID dei dispositivi di test
- la targetizzazione degli annunci pubblicitari in base all'età
Invece, questi parametri ora possono essere configurati in
RequestConfiguration
, un'impostazione globale che influenzerà tutti i successivi caricamenti di annunci.
firebase::admob namespace deprecato | Nuovo firebase::gma namespace |
---|---|
AdSizeType (enumerazione) | AdSize::Type (enumerazione) |
BannerView | AdView |
BannerView::Listener | AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position | AdView::Position |
BannerView::PresentationState | RIMOSSO |
ChildDirectedTreatmentState | RequestConfiguration::TagForChildDirectedTreatment |
Gender (enumerazione) | RIMOSSO |
InterstitialAd::Listener | FullScreenContentListener PaidEventListener |
KeyValuePair | RIMOSSO |
NativeExpressAdView | RIMOSSO |
PollableRewardListener | RIMOSSO |
RewardItem | AdReward |
RewardedVideoAd (spazio dei nomi) | RewardedAd (classe) |
RewardedVideoAd::Listener | FullScreenContentListener PaidEventListener UserEarnedRewardListener |
AdMobError (enumerazione) | AdErrorCode (enumerazione) |
RewardItem | AdReward |
Inizializzazione dell'SDK
Ciascuna funzione di inizializzazione dell'SDK C++ di Google Mobile Ads restituisce immediatamente due indicatori di stato:
Un parametro out opzionale indica se si è verificato un errore di dipendenza prima dell'inizio del processo di inizializzazione.
Il parametro return è un riferimento a
firebase::Future
. IlFuture
contiene i risultati dell'inizializzazione asincrona degli adattatori di mediazione nel dispositivo.
Sebbene l'SDK C++ di Google Mobile Ads possa essere richiamato per caricare gli annunci pubblicati da AdMob non appena viene ripristinata la funzione di inizializzazione, altre reti pubblicitarie non pubblicheranno annunci finché l'adattatore di mediazione corrispondente non sarà stato completamente inizializzato. Questo processo avviene in modo asincrono. Pertanto, se utilizzi la mediazione annunci nella tua applicazione, ti consigliamo di attendere la risoluzione del Future
prima di tentare di caricare eventuali annunci.
Prima
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;
}
Dopo
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.
}
Modifiche AdSize
in AdView
AdSize
ora contiene membri statici delle comuni dimensioni degli annunci banner e supporta le dimensioni degli annunci AnchorAdaptive
e InlineAdaptive
che hanno un'altezza dinamica basata sulla larghezza specificata e sull'orientamento corrente dello schermo.
Costanti statiche AdSize aggiunte a firebase::gma::AdSize | |
---|---|
AdSize::kBanner | Dimensioni del banner pubblicitario della Mobile Marketing Association (MMA) (320 x 50 pixel indipendenti dalla densità) |
AdSize::kFullBanner | Dimensioni dell'annuncio banner completo dell'Interactive Advertising Bureau (IAB) (468x60 pixel indipendenti dalla densità) |
AdSize::kLargeBanner | Versione più alta di kBanner , in genere 320x100 |
AdSize::kLeaderboard | Dimensioni dell'annuncio leaderboard dell'Interactive Advertising Bureau (IAB) (728 x 90 pixel indipendenti dalla densità) |
AdSize::kMediumRectangle | Dimensioni dell'annuncio rettangolare medio dell'Interactive Advertising Bureau (IAB) (300 x 250 pixel indipendenti dalla densità) |
Metodi statici in firebase::gma::AdSize per aiutare a costruire istanze di AdSize | |
---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize | Crea una AdSize con la larghezza specificata e un'altezza ottimizzata da Google per creare un banner pubblicitario in modalità orizzontale |
GetPortraitAnchoredAdaptiveBannerAdSize | Crea una AdSize con la larghezza specificata e un'altezza ottimizzata da Google per creare un banner pubblicitario in modalità verticale |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize | Crea una AdSize con la larghezza specificata e un'altezza ottimizzata da Google per creare un banner pubblicitario in base all'orientamento corrente |
GetInlineAdaptiveBannerAdSize | Crea una AdSize più adatta per gli annunci banner data un'altezza massima Questa |
GetLandscapeInlineAdaptiveBannerAdSize | Crea un InlineAdaptive AdSize con la larghezza specificata e l'altezza orizzontale del dispositivo |
GetPortraitInlineAdaptiveBannerAdSize | Crea un InlineAdaptive AdSize con la larghezza specificata e l'altezza verticale del dispositivo. |
GetCurrentOrientationInlineAdaptiveBannerAdSize | Un metodo pratico per restituire InlineAdaptive AdSize dato l'orientamento corrente dell'interfaccia con una larghezza specifica. |
Prima
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);
Dopo
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
e configurazione globale
Gli ID dispositivo di test, TagForChildDirectedTreatment
e TagForUnderAgeOfConsent
(precedentemente gestiti in base alla data di nascita) sono stati rimossi da AdRequest
e ora fanno parte di RequestConfiguration
globale. Le applicazioni possono richiamare firebase::gma::SetRequestConfiguration()
nelle prime fasi del ciclo di vita dell'applicazione per configurare questi valori. Tutte le successive operazioni di caricamento degli annunci rispetteranno queste impostazioni una volta configurate.
firebase::gma::AdRequest
esiste ancora poiché fornisce informazioni contestuali per il caricamento degli annunci pubblicitari, incluse parole chiave e un URL di contenuto opzionale.
La struttura in stile C AdRequest
di AdMob è stata sostituita con una classe con metodi che forniscono una migliore esperienza utente durante la definizione e l'aggiunta ai vari elenchi di informazioni.
Di seguito sono riportate le modifiche più importanti AdRequest
:
- Gli extra sono ora associati al nome di una classe dell'adattatore di mediazione. Gli extra inviati al servizio AdMob devono utilizzare il nome della classe predefinito come definito di seguito.
- Quando richiedono un annuncio, le app possono trasmettere un URL del contenuto che stanno offrendo. Ciò consente al targeting per parole chiave di abbinare l'annuncio con altri contenuti visualizzati.
Prima
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.
Dopo
// 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
ora restituisce un Future
contenente un oggetto AdResult
per tutti i tipi di annunci AdView
, InterstitialAd
e RewardedAd
. Il metodo AdResult::is_successful
restituisce true
se la richiesta di annuncio è stata soddisfatta correttamente, altrimenti false
.
In caso di errore, AdResult
contiene un oggetto AdError
con informazioni sul livello di servizio relative al problema, inclusi il codice di errore, il messaggio di errore e le stringhe di dominio.
Prima
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.
}
}
}
Dopo
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.
}
}
}
}
Eventi AdListener
all'interno di AdView
La classe BannerView::Listener
di AdMob è stata sostituita con due classi listener distinte nell'SDK C++ di Google Mobile Ads:
-
AdListener
tiene traccia del ciclo di vita dell'annuncio e degli eventi di interazione dell'utente. -
AdViewBoundingBoxListener
viene richiamato quandoAdView
viene ridimensionato o spostato.
AdMob OnPresentationStateChanged
richiama le mappature degli annunci per dispositivi mobili di Google
Il tipo enumerato firebase::admob::BannerView::PresentationState
e il metodo listener OnPresentationStateChanged
non sono inclusi nel nuovo SDK C++ per gli annunci per dispositivi mobili di Google.
Di seguito sono riportati modi alternativi per rilevare i cambiamenti dello stato di presentazione nel ciclo di vita di un AdView
:
evento firebase::admob::BannerView::Listener OnPresentationStateChanged | controparte firebase::gma::AdListener |
---|---|
kPresentationStateHidden | Quando viene richiamato AdListener::OnAdClosed o quando AdView::Hide() completa correttamente la sua operazione asincrona |
kPresentationStateVisibleWithoutAd | Nessuno. Il tentativo di richiamare AdView::Show() un AdView non caricato genererà un errore. |
kPresentationStateVisibleWithAd | Quando viene richiamato AdListener::OnAdOpened o quando AdView::Show() completa correttamente la sua operazione asincrona con un annuncio |
kPresentationStateOpenedPartialOverlay | Interroga il riquadro di delimitazione dopo che AdListener::OnAdOpened() è stato richiamato per determinare la dimensione e la posizione dell'annuncio visualizzato. In alternativa, interroga la posizione di AdView e AdSize e/o monitora il riquadro di delimitazione tramite AdViewBoundingBoxListener . |
kPresentationStateCoveringUI | Vedi kPresentationStateOpenedPartialOverlay sopra |
RewardedAd
è ora una classe
L'SDK Firebase AdMob C++ deprecato facilitava gli annunci con premio tramite una raccolta di funzioni nello spazio dei nomi firebase::admob::rewarded_ad
. Queste funzioni sono state riunite in una nuova classe RewardedAd
che offre annunci con una superficie API simile a InterstitialAd
(vedere la sezione successiva).
Ascoltatori InterstitialAd
e RewardedAd
Sia gli annunci interstitial che gli annunci con premio sono considerati annunci a schermo intero. È possibile installare un nuovo FullScreenContentListener
per ascoltare gli eventi del ciclo di vita dell'annuncio per questi tipi di annunci ed è possibile installare un PaidEventListener
separato per monitorare quando il servizio AdMob ha ritenuto che si sia verificato un evento a pagamento.
RewardedAd
dispone di un ascoltatore aggiuntivo per monitorare gli eventi di ricompensa guadagnati dagli utenti.
Nuovi metodi di richiamata degli annunci a schermo intero
Metodi FullScreenContentListener | Metodi PaidEventListener | Metodi UserEarnedRewardListener |
---|---|---|
OnAdClicked | OnPaidEvent | OnUserEarnedReward |
OnAdDismissedFullScreenContent | ||
OnAdFailedToShowFullScreenContent | ||
OnAdImpression | ||
OnAdShowedFullScreenContent |
Metodi modificati/rimossi/sostituiti
La tabella seguente elenca i metodi specifici modificati nel nuovo SDK C++ di Google Mobile Ads. I metodi con i parametri elencati rimangono ma le loro firme sono cambiate.
Classe | API dell'SDK C++ di AdMob Firebase | API dell'SDK C++ per gli annunci per dispositivi mobili di Google | Appunti |
---|---|---|---|
BannerView | MoveTo | AdView::SetPosition | |
presentation_state | RIMOSSO | Gestito dagli eventi AdViewListener e AdView::Show e AdView::Hide risultati futuri. | |
SetListener | AdView::SetAdListener AdView::SetBoundingBoxListener AdView::SetPaidEventListener | Il nuovo design del listener aumenta la fedeltà nel rilevamento degli eventi del ciclo di vita AdView . | |
Listener::OnPresentationStateChanged | RIMOSSO | Vedi BannerView::SetListener , sopra. | |
Listener::OnBoundingBoxChanged | AdViewBoundingBoxListener::OnBoundingBoxChanged | ||
Annuncio interstiziale | Initialize(AdParent parent, const char* ad_unit_id) | Initialize(AdParent parent) | Il parametro ad_unit_id fa ora parte dell'operazione LoadAd . |
LoadAd(const AdRequest& request) | LoadAd(const char* ad_unit_id, const AdRequest& request) | ||
presentation_state | RIMOSSO | L'enumerazione presentation_state è stata rimossa. Utilizza FullScreenContentListener . | |
SetListener | SetFullScreenContentListener SetPaidEventListener | ||
Destroy | RIMOSSO | La pulizia delle risorse ora fa parte del distruttore RewardedAd . | |
RewardedAd (formalmente RewardedVideoAd ) | Initialize | Initialize(AdParent parent) | AdParent veniva precedentemente passato a Show , ma ora fa parte dell'inizializzazione. |
presentation_state | RIMOSSO | L'enumerazione presentation_state è stata rimossa. Utilizza FullScreenContentListener . | |
SetListener | SetFullScreenContentListener Show SetPaidEventListener | Viene definito anche un listener UserEarnedReward quando viene mostrato un RewardedAd . Vedi sotto. | |
Show(AdParent parent) | Show(UserEarnedRewardListener* listener) |