El lanzamiento de la versión 9.1.0 del SDK de Firebase C++ incluye un nuevo SDK de C++ de anuncios de Google para dispositivos móviles.
El SDK de C++ de anuncios de Google para dispositivos móviles es una nueva plataforma de API que incorpora los principales cambios rotundos que se realizaron en los SDK de Firebase AdMob C++ para iOS y Android en 2021 y 2022, incluidos la eliminación de las APIs obsoletas y un nuevo flujo cuando se trabaja con tipos de anuncios de pantalla completa.
El SDK de Firebase AdMob C++ antiguo (firebase::admob
) está obsoleto
y ya no recibirá actualizaciones ni correcciones de errores.
Tanto el nuevo SDK de C++ de anuncios de Google para dispositivos móviles (firebase::gma
) como el antiguo
SDK de Firebase AdMob C++ (firebase::admob
) seguirán siendo parte de los archivos de compilación
del SDK de Firebase C++ durante la ventana de baja del
SDK de Firebase AdMob C++.
Eliminación de la API heredada
Se quitaron por completo las siguientes API del SDK de C++ de anuncios de Google para dispositivos móviles.
RewardedVideoAd
Se reemplazó el espacio de nombres RewardedVideoAd
de AdMob por
una clase RewardedAd
. RewardedAd
se comporta de manera similar a InterstitialAd
, pero
incluye un objeto RewardedAdListener
adicional para recibir notificaciones de recompensas de
elementos.
NativeExpressAds
NativeExpressAd
de AdMob ya se había marcado como obsoleto en cada
SDK de Firebase AdMob C++. Por lo tanto, no se incluye NativeExpressAd
en el
nuevo SDK de C++ de anuncios de Google para dispositivos móviles.
Cambio en el espacio de nombres del SDK
El SDK se trasladó a un nuevo espacio de nombres y tiene una nueva estructura de directorio:
Espacio de nombres firebase::gma
Las fuentes del nuevo SDK de C++ de anuncios de Google para dispositivos móviles se encuentran en el espacio de nombres
firebase::gma
. El espacio de nombres firebase::admob
anterior dejó de estar disponible junto con
el SDK de Firebase AdMob C++.
Estructura del directorio
Los archivos de encabezado se movieron a un directorio nuevo dentro del archivo de compilación:
SDK de Firebase AdMob C++ obsoleto | Nuevo SDK de C++ de anuncios de Google para dispositivos móviles |
---|---|
include/firebase/admob |
include/firebase/gma |
Biblioteca
El SDK de Firebase AdMob C++ se proporcionará como una biblioteca estática dentro del archivo de compilación del SDK de Firebase C++:
iOS
SDK de Firebase AdMob C++ obsoleto | Nuevo SDK de C++ de anuncios de Google para dispositivos móviles |
---|---|
firebase_admob.xcframework |
firebase_gma.xcframework |
Android
SDK de Firebase AdMob C++ obsoleto | Nuevo SDK de C++ de anuncios de Google para dispositivos móviles |
---|---|
libfirebase_admob.a |
libfirebase_gma.a |
Migraciones de clases, enums y structs
En la siguiente tabla, se enumeran las clases, enums y structs específicos que se cambiaron o quitaron. Aquí encontrarás un resumen:
- Se cambió el nombre de
BannerView
porAdView
. - Se quitó
NativeAdExpressView
. - Se reemplazó el espacio de nombres
RewardedVideo
por una claseRewardedAd
. - Se quitaron y reemplazaron la enumeración y los objetos de escucha
PresentationState
por los objetos de escuchaAdListener
yFullScreenContent
. Se quitaron los siguientes parámetros como parámetros de configuración por anuncio en
AdRequests
:- el parámetro de configuración de los ID de dispositivos de prueba
- la segmentación de los anuncios según la edad
En su lugar, estos parámetros ahora se pueden configurar en
RequestConfiguration
, un parámetro de configuración global que afectará a todas las cargas de anuncios posteriores.
firebase::admob namespace obsoleto |
Nuevo firebase::gma namespace |
---|---|
AdSizeType (enum) |
AdSize::Type (enum) |
BannerView |
AdView |
BannerView::Listener |
AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position |
AdView::Position |
BannerView::PresentationState |
Se quitó |
ChildDirectedTreatmentState |
RequestConfiguration::TagForChildDirectedTreatment |
Gender (enum) |
Se quitó |
InterstitialAd::Listener |
FullScreenContentListener PaidEventListener |
KeyValuePair |
Se quitó |
NativeExpressAdView |
Se quitó |
PollableRewardListener |
Se quitó |
RewardItem |
AdReward |
RewardedVideoAd (espacio de nombres) |
RewardedAd (clase) |
RewardedVideoAd::Listener |
FullScreenContentListener PaidEventListener UserEarnedRewardListener |
AdMobError (enum) |
AdErrorCode (enum) |
RewardItem |
AdReward |
Inicialización del SDK
Cada función de inicialización del SDK de C++ de anuncios de Google para dispositivos móviles muestra inmediatamente dos indicadores de estado:
Un parámetro opcional de salida transmite si se produjo un error de dependencia antes de que comience el proceso de inicialización.
El parámetro que se muestra es una referencia a
firebase::Future
.Future
contiene los resultados de la inicialización asíncrona de los adaptadores de mediación en el dispositivo.
Si bien se puede invocar el SDK de C++ de anuncios de Google para dispositivos móviles a fin de cargar anuncios publicados por AdMob apenas
se muestre la función de inicialización, otras redes de publicidad no publicarán
anuncios hasta que se haya inicializado por completo el adaptador de mediación correspondiente. Este
proceso se realiza de forma asíncrona. Por lo tanto, si usas la mediación de anuncios en tu
aplicación, te recomendamos que esperes a que se resuelva Future
antes
de intentar cargar cualquier anuncio.
Antes
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;
}
Después
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.
}
Cambios en AdSize
dentro de AdView
Ahora AdSize
contiene miembros estáticos de tamaños comunes de anuncios en forma de banner y admite
tamaños de anuncios AnchorAdaptive
y InlineAdaptive
, que tienen una altura dinámica en función
del ancho determinado y la orientación actual de la pantalla.
Se agregaron constantes AdSize estáticas a
firebase::gma::AdSize |
|
---|---|
AdSize::kBanner |
Tamaño del anuncio en forma de banner de la Asociación de marketing para dispositivos móviles (MMA) (320 × 50 píxeles independientes de la densidad) |
AdSize::kFullBanner |
Tamaño de anuncio en forma de banner completo de la Interactive Advertising Bureau (IAB) (468 × 60 píxeles independientes de la densidad) |
AdSize::kLargeBanner |
Versión más estándar de kBanner , normalmente de 320 × 100 |
AdSize::kLeaderboard |
Tamaño de anuncio de la tabla de clasificación de la Interactive Advertising Bureau (IAB) (728 × 90 píxeles independientes de la densidad) |
AdSize::kMediumRectangle |
Tamaño publicitario de rectángulo mediano de la Interactive Advertising Bureau (IAB) (300 × 250 píxeles independientes de la densidad) |
Métodos estáticos en firebase::gma::AdSize para
ayudar a construir instancias de AdSize |
|
---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize |
Se crea un elemento AdSize con el ancho especificado y una
altura optimizada por Google para crear un anuncio en forma de banner en modo horizontal. |
GetPortraitAnchoredAdaptiveBannerAdSize |
Se crea un elemento AdSize con el ancho especificado y una
altura optimizada por Google para crear un anuncio en forma de banner en modo vertical. |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize |
Se crea una AdSize con el ancho determinado y una
altura optimizada por Google para crear un anuncio en forma de banner con la orientación
actual. |
GetInlineAdaptiveBannerAdSize |
Se crea un objeto AdSize más adecuado para anuncios en forma de banner a partir de una
altura máxima.
Este |
GetLandscapeInlineAdaptiveBannerAdSize |
Se crea un InlineAdaptive AdSize con el
ancho dado y la altura horizontal del dispositivo. |
GetPortraitInlineAdaptiveBannerAdSize |
Se crea un InlineAdaptive AdSize con el
ancho dado y la altura vertical del dispositivo. |
GetCurrentOrientationInlineAdaptiveBannerAdSize |
Un método útil para mostrar InlineAdaptive
AdSize según la orientación actual de la interfaz, teniendo en cuenta un
ancho específico. |
Antes
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);
Después
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
y la configuración global
Se quitaron de AdRequest
los ID de dispositivo de prueba, TagForChildDirectedTreatment
y TagForUnderAgeOfConsent
(antes controlados por fecha de nacimiento), y ahora
son parte de una RequestConfiguration
global. Es posible que ciertas aplicaciones invoquen
firebase::gma::SetRequestConfiguration()
al comienzo de su ciclo de vida
para configurar estos valores. Todas las operaciones posteriores de carga de anuncios respetarán
esta configuración una vez que se establezca.
Aún existe firebase::gma::AdRequest
, ya que proporciona información contextual
para cargar anuncios, incluidas las palabras clave y URLs de contenido opcional.
Se reemplazó el struct de estilo C AdRequest
de AdMob por una clase con métodos
que proporcionan una mejor experiencia del usuario cuando se definen y anexan
las diversas listas de información.
Estos son algunos cambios notables en AdRequest
:
- Ahora las opciones adicionales se asocian con un nombre de clase de adaptador de mediación. Las opciones adicionales enviadas al servicio de AdMob deben usar el nombre de clase predeterminado, como se define a continuación.
- Cuando las apps solicitan un anuncio, pueden pasar una URL del contenido que publican. Esto permite usar la segmentación por palabras clave para que el anuncio coincida con otro contenido que se muestra.
Antes
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.
Después
// 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
Ahora LoadAd
muestra un Future
que contiene un objeto AdResult
para todos
los tipos de anuncios AdView
, InterstitialAd
y RewardedAd
. El método
AdResult::is_successful
muestra true
si la solicitud de anuncio se
completó correctamente; de lo contrario, muestra false
.
En caso de error, AdResult
contiene un objeto AdError
con información
a nivel de servicio sobre el problema, incluidos el código de error, el mensaje de error y
las strings del dominio.
Antes
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.
}
}
}
Después
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.
}
}
}
}
Eventos de AdListener
en AdView
Se reemplazó la clase BannerView::Listener
de AdMob por dos
clases de objeto de escucha distintas en el SDK de C++ de anuncios de Google para dispositivos móviles:
AdListener
hace un seguimiento del ciclo de vida de los anuncios y de los eventos de interacción del usuario.AdViewBoundingBoxListener
se invoca cuando se cambia el tamaño o se mueve elAdView
.
Asignaciones de Google Mobile Ads de devolución de llamada de OnPresentationStateChanged
de AdMob
El tipo enumerado firebase::admob::BannerView::PresentationState
y
el método de objeto de escucha OnPresentationStateChanged
no se incluyen en el nuevo
SDK de C++ de anuncios de Google para dispositivos móviles.
Las siguientes son formas alternativas de detectar cambios en el estado de la presentación en el
ciclo de vida de AdView
:
firebase::admob::BannerView::Listener
OnPresentationStateChanged evento |
Contraparte firebase::gma::AdListener |
---|---|
kPresentationStateHidden |
Cuando se invoca AdListener::OnAdClosed o cuando
AdView::Hide() completa su operación asíncrona
correctamente |
kPresentationStateVisibleWithoutAd |
Ninguno Si se intenta invocar a AdView::Show() una AdView no cargada,
se generará un error. |
kPresentationStateVisibleWithAd |
Cuando se invoca AdListener::OnAdOpened o cuando
AdView::Show() completa su operación asíncrona
correctamente con un anuncio |
kPresentationStateOpenedPartialOverlay |
Consulta el cuadro de límite después de invocar AdListener::OnAdOpened() para
determinar el tamaño y la posición del anuncio que se muestra.
Como alternativa, consulta la posición de AdView y
AdSize , o supervisa el cuadro de límite a través de
AdViewBoundingBoxListener . |
kPresentationStateCoveringUI |
Consulta kPresentationStateOpenedPartialOverlay más arriba. |
Ahora RewardedAd
es una clase
El SDK de Firebase AdMob C++ obsoleto facilitaba la publicación de anuncios recompensados mediante
una colección de funciones en el espacio de nombres firebase::admob::rewarded_ad
. Estas
funciones se combinaron en una nueva clase RewardedAd
que publica
anuncios con una superficie de API similar a InterstitialAd
(consulta la siguiente sección).
Objetos de escucha InterstitialAd
y RewardedAd
Los anuncios intersticiales y los recompensados se consideran anuncios de pantalla completa. Se puede instalar un nuevo
FullScreenContentListener
para escuchar los eventos del ciclo de vida de los anuncios
para estos tipos de anuncios, y se puede instalar un
PaidEventListener
independiente para realizar un seguimiento cuando el servicio de AdMob considere que se produjo un
evento pagado.
RewardedAd
tiene un objeto de escucha adicional para supervisar los eventos de recompensas obtenidos por el usuario.
Nuevos métodos de devolución de llamada de anuncios de pantalla completa
Métodos FullScreenContentListener |
Métodos PaidEventListener |
Métodos UserEarnedRewardListener |
---|---|---|
OnAdClicked |
OnPaidEvent |
OnUserEarnedReward |
OnAdDismissedFullScreenContent |
||
OnAdFailedToShowFullScreenContent |
||
OnAdImpression |
||
OnAdShowedFullScreenContent |
Se cambiaron, quitaron o reemplazaron métodos
En la siguiente tabla, se enumeran los métodos específicos que se modificaron en el nuevo SDK de C++ de anuncios de Google para dispositivos móviles. Los métodos con parámetros enumerados permanecen, pero cambiaron sus firmas.
Clase | API del SDK de Firebase AdMob C++ | API del SDK de C++ de anuncios de Google para dispositivos móviles | Notas |
---|---|---|---|
BannerView
|
MoveTo
|
AdView::SetPosition
|
|
presentation_state
|
Se quitó | Controlado por eventos AdViewListener y
resultados futuros AdView::Show y AdView::Hide .
|
|
SetListener
|
AdView::SetAdListener AdView::SetBoundingBoxListener AdView::SetPaidEventListener |
El nuevo diseño de objeto de escucha aumenta la fidelidad de la detección
de eventos de ciclo de vida de AdView .
|
|
Listener::OnPresentationStateChanged
|
Se quitó | Consulta BannerView::SetListener , más arriba.
|
|
Listener::OnBoundingBoxChanged
|
AdViewBoundingBoxListener::OnBoundingBoxChanged
|
||
InterstitialAd | Initialize(AdParent parent, const char* ad_unit_id)
|
Initialize(AdParent parent)
|
Ahora el parámetro ad_unit_id forma parte de
la operación LoadAd .
|
LoadAd(const AdRequest& request)
|
LoadAd(const char* ad_unit_id, const AdRequest& request)
|
||
presentation_state
|
Se quitó | Se quitó la enumeración presentation_state . Usa
FullScreenContentListener .
|
|
SetListener
|
SetFullScreenContentListener SetPaidEventListener
|
||
Destroy
|
Se quitó | La limpieza de recursos ahora forma parte del destructor
RewardedAd .
|
|
RewardedAd (formalmente RewardedVideoAd )
|
Initialize
|
Initialize(AdParent parent)
|
Antes se pasaba AdParent a Show , pero ahora forma
parte de la inicialización.
|
presentation_state
|
Se quitó | Se quitó la enumeración presentation_state . Usa
FullScreenContentListener .
|
|
SetListener
|
SetFullScreenContentListener SetPaidEventListener
Show
|
También se define un objeto de escucha UserEarnedReward cuando se muestra un
RewardedAd . Consulta a continuación.
|
|
Show(AdParent parent)
|
Show(UserEarnedRewardListener* listener)
|