Il rilascio della versione 9.1.0 dell'SDK C++ Firebase introduce un nuovo SDK C++ Google Mobile Ads.
L'SDK Google Mobile Ads C++ è una nuova API che incorpora le modifiche sostanziali apportate agli SDK C++ di Firebase AdMob per iOS e Android nel 2021 e nel 2022, inclusa la rimozione delle API ritirate e un nuovo flusso quando si utilizzano i tipi di annunci a schermo intero.
Il vecchio SDK Firebase AdMob C++ (firebase::admob
) è stato contrassegnato come deprecato
e non riceverà aggiornamenti o correzioni di bug in futuro.
Sia il nuovo SDK Google Mobile Ads C++ (firebase::gma
) sia il vecchio SDK Firebase AdMob C++ (firebase::admob
) rimarranno negli archivi di compilazione per l'SDK Firebase C++ durante il periodo di ritiro dell'SDK Firebase AdMob C++.
Rimozione delle API legacy
Le seguenti API sono state rimosse completamente dall'SDK Google Mobile Ads C++.
RewardedVideoAd
Lo spazio dei nomi RewardedVideoAd
di AdMob è stato sostituito dalla classe RewardedAd
. RewardedAd
si comporta in modo simile a InterstitialAd
, ma
include altri RewardedAdListener
per ricevere la notifica dei premi
dell'elemento.
NativeExpressAds
NativeExpressAd
di AdMob era già stato contrassegnato come deprecato in ogni SDK Firebase AdMob C++. Pertanto, NativeExpressAd
non è incluso nel
nuovo SDK Google Mobile Ads C++.
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
I file sorgente del nuovo SDK Google Mobile Ads C++ si trovano nello spazio dei nomi firebase::gma
. Lo spazio dei nomi firebase::admob
precedente è stato ritirato insieme all'SDK Firebase AdMob C++.
Struttura delle directory
I file di intestazione sono stati spostati in una nuova directory all'interno dell'archivio di build:
SDK Firebase AdMob C++ deprecato | Nuovo SDK Google Mobile Ads C++ |
---|---|
include/firebase/admob |
include/firebase/gma |
Raccolta
L'SDK Firebase AdMob C++ verrà fornito come libreria statica all'interno dell'Firebase C++ archivio di compilazione dell'SDK:
iOS
SDK Firebase AdMob C++ deprecato | Nuovo SDK Google Mobile Ads C++ |
---|---|
firebase_admob.xcframework |
firebase_gma.xcframework |
Android
SDK Firebase AdMob C++ deprecato | Nuovo SDK Google Mobile Ads C++ |
---|---|
libfirebase_admob.a |
libfirebase_gma.a |
Migrazioni di classi, enum e struct
La tabella riportata di seguito elenca le classi, le enumerazioni e gli struct specifici che sono stati modificati o sono stati rimossi. Ecco un riepilogo:
- Il nuovo nome di
BannerView
èAdView
. NativeAdExpressView
rimosso.- Lo spazio dei nomi
RewardedVideo
viene sostituito da 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 dispositivo di test
- il targeting degli annunci in base all'età
Ora questi parametri possono essere configurati in
RequestConfiguration
che è un'impostazione globale che influisce su tutti i caricamenti degli annunci successivi.
firebase::admob namespace deprecato |
Nuovo firebase::gma namespace |
---|---|
AdSizeType (enum) |
AdSize::Type (enum) |
BannerView |
AdView |
BannerView::Listener |
AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position |
AdView::Position |
BannerView::PresentationState |
Rimosso |
ChildDirectedTreatmentState |
RequestConfiguration::TagForChildDirectedTreatment |
Gender (enum) |
Rimosso |
InterstitialAd::Listener |
FullScreenContentListener PaidEventListener |
KeyValuePair |
Rimosso |
NativeExpressAdView |
Rimosso |
PollableRewardListener |
Rimosso |
RewardItem |
AdReward |
RewardedVideoAd (spazio dei nomi) |
RewardedAd (corso) |
RewardedVideoAd::Listener |
FullScreenContentListener PaidEventListener UserEarnedRewardListener |
AdMobError (enum) |
AdErrorCode (enum) |
RewardItem |
AdReward |
Inizializzazione dell'SDK
Ogni funzione di inizializzazione dell'SDK Google Mobile Ads C++ restituisce immediatamente due indicatori di stato:
Un parametro out facoltativo indica se si è verificato un errore di dipendenza prima dell'avvio del processo di inizializzazione.
Il parametro di ritorno è un riferimento a un
firebase::Future
.Future
contiene i risultati dell'inizializzazione asincrona degli adattatori di mediazione sul dispositivo.
Sebbene l'SDK Google Mobile Ads per C++ possa essere invocato per caricare gli annunci pubblicati da AdMob non appena viene restituita la funzione di inizializzazione, le 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 degli annunci nella tua
applicazione, ti consigliamo di attendere la risoluzione del problema Future
prima di tentare di caricare gli 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 a AdSize
in AdView
AdSize
ora contiene membri statici dei formati degli annunci banner comuni e supporta le dimensioni degli annunci AnchorAdaptive
e InlineAdaptive
con un'altezza dinamica in base alla larghezza specificata e all'orientamento corrente dello schermo.
Costanti AdSize statiche aggiunte a
firebase::gma::AdSize |
|
---|---|
AdSize::kBanner |
Dimensioni degli annunci banner della Mobile Marketing Association (MMA) (pixel indipendenti dalla densità di 320 x 50) |
AdSize::kFullBanner |
Dimensioni dell'annuncio banner intero dell'Interactive Advertising Bureau (IAB) (468 x 60 pixel indipendenti dalla densità) |
AdSize::kLargeBanner |
Versione più alta di kBanner , in genere 320 x 100 |
AdSize::kLeaderboard |
Dimensioni dell'annuncio leaderboard IAB (Interactive Advertising Bureau) (728 x 90 pixel indipendenti dalla densità) |
AdSize::kMediumRectangle |
Dimensioni degli annunci in formato rettangolo medio di Interactive Advertising Bureau (IAB) (pixel indipendenti dalla densità di 300 x 250) |
Metodi statici in firebase::gma::AdSize per
aiutare a creare istanze di AdSize |
|
---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize |
Crea un AdSize con la larghezza specificata e un'altezza ottimizzata da Google per creare un annuncio banner in modalità Orizzontale |
GetPortraitAnchoredAdaptiveBannerAdSize |
Crea un AdSize con la larghezza specificata e un'altezza ottimizzata da Google per creare un annuncio banner in modalità Ritratto |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize |
Crea un AdSize con la larghezza specificata e un'altezza ottimizzata da Google per creare un annuncio banner in base all'orientamento corrente |
GetInlineAdaptiveBannerAdSize |
Crea un AdSize più adatto per gli annunci banner in base a un'altezza massima
Questo |
GetLandscapeInlineAdaptiveBannerAdSize |
Crea un InlineAdaptive AdSize con la
larghezza specificata e l'altezza del dispositivo in orizzontale |
GetPortraitInlineAdaptiveBannerAdSize |
Crea un InlineAdaptive AdSize con la
larghezza specificata e l'altezza del dispositivo in verticale. |
GetCurrentOrientationInlineAdaptiveBannerAdSize |
Un metodo pratico per restituire InlineAdaptive
AdSize dato l'orientamento corrente dell'interfaccia in base a 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 dalla data di nascita) sono stati rimossi da AdRequest
e ora fanno
parte di un RequestConfiguration
globale. Le applicazioni possono invocare
firebase::gma::SetRequestConfiguration()
all'inizio del ciclo di vita
dell'applicazione per configurare questi valori. Tutte le operazioni di caricamento degli annunci successive rispetteranno queste impostazioni una volta configurate.
firebase::gma::AdRequest
continua a esistere perché fornisce informazioni contestuali per il caricamento degli annunci, tra cui parole chiave e un URL dei contenuti facoltativo.
La AdRequest
struct in stile C di AdMob è stata sostituita da una classe con metodi
che offrono un'esperienza utente migliore durante la definizione e l'aggiunta ai diversi elenchi di informazioni.
Ecco alcune importanti modifiche di 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 dei contenuti che pubblicano. In questo modo, il targeting per parole chiave consente di associare l'annuncio ad 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 oggetto 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 o false
in caso contrario.
In caso di errore, AdResult
contiene un oggetto AdError
con informazioni sul problema a livello di servizio, tra cui 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.
}
}
}
}
AdListener
eventi in AdView
La classe BannerView::Listener
di AdMob è stata sostituita con due
classi di ascoltatore distinte nell'SDK Google Mobile Ads C++:
AdListener
monitora gli eventi del ciclo di vita degli annunci e di interazione degli utenti.AdViewBoundingBoxListener
viene invocato quando le dimensioni diAdView
vengono modificate o quando viene spostato.
Mappature dei OnPresentationStateChanged
callback Google Mobile Ads di AdMob
Il tipo enumerato firebase::admob::BannerView::PresentationState
e il metodo di listener OnPresentationStateChanged
non sono inclusi nel nuovo SDK Google Mobile Ads per C++.
Di seguito sono riportati metodi alternativi per rilevare le modifiche dello stato di presentazione nel
ciclo di vita di un AdView
:
firebase::admob::BannerView::Listener
OnPresentationStateChanged evento |
firebase::gma::AdListener controparte |
---|---|
kPresentationStateHidden |
Quando viene richiamato AdListener::OnAdClosed o quando
AdView::Hide() completa la sua operazione asincrona
|
kPresentationStateVisibleWithoutAd |
Nessuno. Il tentativo di richiamare AdView::Show() un caricamento non eseguito
AdView comporterà un errore. |
kPresentationStateVisibleWithAd |
Quando viene invocato AdListener::OnAdOpened o quando
AdView::Show() completa la sua operazione asincrona
correttamente con un annuncio |
kPresentationStateOpenedPartialOverlay |
Esegui una query sul riquadro di delimitazione dopo aver richiamato AdListener::OnAdOpened() per determinare le dimensioni e la posizione dell'annuncio mostrato.
In alternativa, esegui query sulla posizione di AdView e
AdSize e/o monitora la casella delimitante tramite
AdViewBoundingBoxListener . |
kPresentationStateCoveringUI |
Vedi kPresentationStateOpenedPartialOverlay sopra |
RewardedAd
è ora un corso
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 unite in una nuova classe RewardedAd
che pubblica annunci con un'interfaccia API simile a InterstitialAd
(vedi la sezione successiva).
InterstitialAd
e RewardedAd
Sia gli annunci interstitial sia gli annunci con premio sono considerati annunci a schermo intero. È possibile installare un nuovo FullScreenContentListener
per ascoltare gli eventi del ciclo di vita degli annunci per questi tipi di annunci e un PaidEventListener
separato per monitorare quando il servizio AdMob ha stabilito che si è verificato un evento a pagamento.
RewardedAd
ha un listener aggiuntivo per monitorare gli eventi relativi ai premi guadagnati dagli utenti.
Nuovi metodi di callback per gli annunci a schermo intero
FullScreenContentListener metodi |
PaidEventListener metodi |
UserEarnedRewardListener metodi |
---|---|---|
OnAdClicked |
OnPaidEvent |
OnUserEarnedReward |
OnAdDismissedFullScreenContent |
||
OnAdFailedToShowFullScreenContent |
||
OnAdImpression |
||
OnAdShowedFullScreenContent |
Metodi modificati/rimossi/sostituiri
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 relative firme sono cambiate.
Classe | API SDK Firebase AdMob C++ | API SDK Google Mobile Ads per C++ | Note |
---|---|---|---|
BannerView
|
MoveTo
|
AdView::SetPosition
|
|
presentation_state
|
Rimosso | Gestito dagli eventi AdViewListener e dai risultati futuri AdView::Show e AdView::Hide .
|
|
SetListener
|
AdView::SetAdListener AdView::SetBoundingBoxListener AdView::SetPaidEventListener |
Il nuovo design del listener aumenta la fedeltà del rilevamento
AdView degli eventi del ciclo di vita.
|
|
Listener::OnPresentationStateChanged
|
Rimosso | Vedi BannerView::SetListener , sopra.
|
|
Listener::OnBoundingBoxChanged
|
AdViewBoundingBoxListener::OnBoundingBoxChanged
|
||
InterstitialAd | Initialize(AdParent parent, const char* ad_unit_id)
|
Initialize(AdParent parent)
|
Il parametro ad_unit_id ora fa 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 SetPaidEventListener
Show
|
Quando viene mostrato un
RewardedAd , viene definito anche un listener UserEarnedReward . Consulta quanto riportato di seguito.
|
|
Show(AdParent parent)
|
Show(UserEarnedRewardListener* listener)
|