El lanzamiento del SDK de Firebase C++ v9.1.0 presenta un nuevo SDK de C++ de anuncios de Google para móviles.
El SDK de C++ de Google Mobile Ads es una nueva superficie de API que incorpora los principales cambios realizados en los SDK de Firebase AdMob C++ para iOS y Android en 2021 y 2022, incluida la eliminación de API obsoletas y un nuevo flujo al trabajar con anuncios de pantalla completa. tipos.
El antiguo SDK de Firebase AdMob C++ ( firebase::admob
) se ha marcado como obsoleto y no recibirá ninguna actualización ni corrección de errores en el futuro.
Tanto el nuevo SDK de Google Mobile Ads C++ ( 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 obsolescencia del SDK de Firebase AdMob C++.
Eliminación de API heredada
Las siguientes API se han eliminado en su totalidad del SDK de C++ de anuncios de Google para móviles.
RewardedVideoAd
El espacio de nombres RewardedVideoAd
de AdMob se reemplazó por la clase RewardedAd
. RewardedAd
se comporta de manera similar a InterstitialAd
pero incluye un RewardedAdListener
adicional para recibir notificaciones de recompensas de artículos.
NativeExpressAds
NativeExpressAd
de AdMob ya se había marcado como obsoleto en cada SDK de Firebase AdMob C++. Por lo tanto, NativeExpressAd
no está incluido en el nuevo SDK de C++ de anuncios móviles de Google.
Cambio de espacio de nombres del SDK
El SDK se ha trasladado a un nuevo espacio de nombres y tiene una nueva estructura de directorios:
firebase::gma
Las fuentes del nuevo SDK de C++ de anuncios de Google para móviles se encuentran en el espacio de nombres firebase::gma
. El antiguo espacio de nombres firebase::admob
ha quedado obsoleto junto con el SDK de Firebase AdMob C++.
Estructura de directorios
Los archivos de encabezado se han movido a un nuevo directorio dentro del archivo de compilación:
SDK de Firebase AdMob C++ obsoleto | Nuevo SDK de C++ de anuncios de Google para 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 móviles |
---|---|
firebase_admob.xcframework | firebase_gma.xcframework |
Androide
SDK de Firebase AdMob C++ obsoleto | Nuevo SDK de C++ de anuncios de Google para móviles |
---|---|
libfirebase_admob.a | libfirebase_gma.a |
Migraciones de clases, enumeraciones y estructuras
La siguiente tabla enumera clases, enumeraciones y estructuras específicas que cambiaron o se eliminaron. Aquí hay un resumen:
-
BannerView
pasa a llamarseAdView
. - Se elimina
NativeAdExpressView
. - El espacio de nombres
RewardedVideo
se reemplaza por una claseRewardedAd
. - La enumeración
PresentationState
y los oyentes se eliminan y se reemplazan con oyentesAdListener
yFullScreenContent
. Los siguientes parámetros se eliminan como parámetros de configuración por anuncio en
AdRequests
:- la configuración de los ID de los dispositivos de prueba
- la orientación de los anuncios en función de la edad
En cambio, estos parámetros ahora se pueden configurar en
RequestConfiguration
, que es una configuración global que afectará todas las cargas de anuncios posteriores.
firebase::admob namespace obsoleto | Nuevo firebase::gma namespace |
---|---|
AdSizeType (enumeración) | AdSize::Type (enumeración) |
BannerView | AdView |
BannerView::Listener | AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position | AdView::Position |
BannerView::PresentationState | Remoto |
ChildDirectedTreatmentState | RequestConfiguration::TagForChildDirectedTreatment |
Gender (enumeración) | Remoto |
InterstitialAd::Listener | FullScreenContentListener PaidEventListener |
KeyValuePair | Remoto |
NativeExpressAdView | Remoto |
PollableRewardListener | Remoto |
RewardItem | AdReward |
RewardedVideoAd (espacio de nombres) | RewardedAd (clase) |
RewardedVideoAd::Listener | FullScreenContentListener PaidEventListener UserEarnedRewardListener |
AdMobError (enumeración) | AdErrorCode (enumeración) |
RewardItem | AdReward |
Inicialización del SDK
Cada función de inicialización del SDK de C++ de anuncios de Google para móviles devuelve inmediatamente dos indicadores de estado:
Un parámetro de salida opcional indica si se produjo un error de dependencia antes de que comenzara el proceso de inicialización.
El parámetro de retorno es una referencia a
firebase::Future
. TheFuture
contiene los resultados de la inicialización asincrónica de los adaptadores de mediación en el dispositivo.
Si bien se puede invocar el SDK de C++ de anuncios de Google para móviles para cargar anuncios servidos por AdMob tan pronto como vuelva la función de inicialización, otras redes publicitarias no publicarán anuncios hasta que su adaptador de mediación correspondiente se haya inicializado por completo. Este proceso ocurre de forma asincrónica. Por lo tanto, si utiliza la mediación de anuncios en su aplicación, le recomendamos que espere a que se resuelva el 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
AdSize
ahora contiene miembros estáticos de tamaños de anuncios de banner comunes y admite tamaños de anuncios AnchorAdaptive
e InlineAdaptive
que tienen una altura dinámica basada en el ancho dado y la orientación actual de la pantalla.
Constantes estáticas AdSize agregadas a firebase::gma::AdSize | |
---|---|
AdSize::kBanner | Tamaño del anuncio de banner de la Mobile Marketing Association (MMA) (320 x 50 píxeles independientes de la densidad) |
AdSize::kFullBanner | Tamaño de anuncio de banner completo de Interactive Advertising Bureau (IAB) (468 x 60 píxeles independientes de la densidad) |
AdSize::kLargeBanner | Versión más alta de kBanner , normalmente 320x100 |
AdSize::kLeaderboard | Tamaño del anuncio de la tabla de clasificación de Interactive Advertising Bureau (IAB) (728 x 90 píxeles independientes de la densidad) |
AdSize::kMediumRectangle | Tamaño de anuncio rectangular mediano de Interactive Advertising Bureau (IAB) (300 x 250 píxeles independientes de la densidad) |
Métodos estáticos en firebase::gma::AdSize para ayudar a construir instancias de AdSize | |
---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize | Crea un AdSize con el ancho dado y una altura optimizada por Google para crear un anuncio de banner en modo horizontal. |
GetPortraitAnchoredAdaptiveBannerAdSize | Crea un AdSize con el ancho dado y una altura optimizada por Google para crear un anuncio de banner en modo vertical. |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize | Crea un AdSize con el ancho dado y una altura optimizada por Google para crear un anuncio de banner dada la orientación actual. |
GetInlineAdaptiveBannerAdSize | Crea un AdSize más adecuado para anuncios de banner dada una altura máxima. Este |
GetLandscapeInlineAdaptiveBannerAdSize | Crea un AdSize InlineAdaptive con el ancho dado y la altura horizontal del dispositivo. |
GetPortraitInlineAdaptiveBannerAdSize | Crea un InlineAdaptive AdSize con el ancho dado y la altura vertical del dispositivo. |
GetCurrentOrientationInlineAdaptiveBannerAdSize | Un método conveniente para devolver InlineAdaptive AdSize dada la orientación de la interfaz actual y 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 configuración global
Los ID de dispositivo de prueba, TagForChildDirectedTreatment
y TagForUnderAgeOfConsent
(anteriormente manejados por cumpleaños) se eliminaron de AdRequest
y ahora forman parte de una RequestConfiguration
global. Las aplicaciones pueden invocar firebase::gma::SetRequestConfiguration()
al principio del ciclo de vida de la aplicación para configurar estos valores. Todas las operaciones de carga de anuncios posteriores respetarán estas configuraciones una vez que estén configuradas.
firebase::gma::AdRequest
todavía existe, ya que proporciona información contextual para cargar anuncios, incluidas palabras clave y una URL de contenido opcional.
La estructura estilo C AdRequest
de AdMob ha sido reemplazada por una clase con métodos que brindan una mejor experiencia de usuario al definir y agregar a las distintas listas de información.
A continuación se muestran cambios notables AdRequest
:
- Los extras ahora están asociados con un nombre de clase de adaptador de mediación. Los extras enviados al servicio AdMob deben utilizar el nombre de clase predeterminado, tal como se define a continuación.
- Al solicitar un anuncio, las aplicaciones pueden pasar una URL del contenido que ofrecen. Esto permite que la orientación por palabras clave haga coincidir el anuncio 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
LoadAd
ahora devuelve un Future
que contiene un objeto AdResult
para todos los tipos de anuncios AdView
, InterstitialAd
y RewardedAd
. El método AdResult::is_successful
devuelve true
si la solicitud de anuncio se cumplió correctamente, o false
en caso contrario.
En caso de error, AdResult
contiene un objeto AdError
con información de nivel de servicio sobre el problema, incluido el código de error, el mensaje de error y las cadenas de 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 AdListener
dentro de AdView
La clase BannerView::Listener
de AdMob se reemplazó por dos clases de escucha distintas en el SDK de C++ de anuncios de Google para móviles:
-
AdListener
rastrea el ciclo de vida de los anuncios y los eventos de interacción del usuario. -
AdViewBoundingBoxListener
se invoca cuando se cambia el tamaño o se mueveAdView
.
Asignaciones de anuncios móviles de Google de devolución de llamada de AdMob OnPresentationStateChanged
El tipo enumerado firebase::admob::BannerView::PresentationState
y el método de escucha OnPresentationStateChanged
no están incluidos en el nuevo SDK de C++ de Google Mobile Ads.
Las siguientes son formas alternativas de detectar cambios en el estado de la presentación en el ciclo de vida de un AdView
:
firebase::admob::BannerView::Listener OnPresentationStateChanged | firebase::gma::AdListener |
---|---|
kPresentationStateHidden | Cuando se invoca AdListener::OnAdClosed , o cuando AdView::Hide() completa su operación asincrónica exitosamente |
kPresentationStateVisibleWithoutAd | Ninguno. Intentar invocar AdView::Show() un AdView descargado resultará en un error. |
kPresentationStateVisibleWithAd | Cuando se invoca AdListener::OnAdOpened , o cuando AdView::Show() completa su operación asincrónica exitosamente con un anuncio |
kPresentationStateOpenedPartialOverlay | Consulta el cuadro delimitador después de que se haya invocado AdListener::OnAdOpened() para determinar el tamaño y la posición del anuncio que se muestra. Alternativamente, consulte la posición de AdView y AdSize y/o monitoree el cuadro delimitador a través de AdViewBoundingBoxListener . |
kPresentationStateCoveringUI | Consulte kPresentationStateOpenedPartialOverlay arriba |
RewardedAd
ahora es una clase
El obsoleto SDK de Firebase AdMob C++ facilitó anuncios recompensados a través de una colección de funciones en el espacio de nombres firebase::admob::rewarded_ad
. Estas funciones se han fusionado en una nueva clase RewardedAd
que muestra anuncios con una superficie API similar a InterstitialAd
(consulte la siguiente sección).
Oyentes de InterstitialAd
y RewardedAd
Tanto los anuncios intersticiales como los anuncios bonificados 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
separado para realizar un seguimiento de cuándo el servicio AdMob considera que se ha producido un evento pago.
RewardedAd
tiene un oyente adicional para monitorear los eventos de recompensas obtenidos por los usuarios.
Nuevos métodos de devolución de llamada de anuncios en pantalla completa
Métodos FullScreenContentListener | Métodos PaidEventListener | Métodos UserEarnedRewardListener |
---|---|---|
OnAdClicked | OnPaidEvent | OnUserEarnedReward |
OnAdDismissedFullScreenContent | ||
OnAdFailedToShowFullScreenContent | ||
OnAdImpression | ||
OnAdShowedFullScreenContent |
Métodos cambiados/eliminados/reemplazados
La siguiente tabla enumera los métodos específicos modificados en el nuevo SDK de C++ de anuncios de Google para móviles. Los métodos con parámetros enumerados permanecen pero sus firmas han cambiado.
Clase | API del SDK de Firebase AdMob C++ | API del SDK de C++ de anuncios de Google para móviles | Notas |
---|---|---|---|
BannerView | MoveTo | AdView::SetPosition | |
presentation_state | Remoto | Manejado por eventos AdViewListener y AdView::Show y AdView::Hide resultados futuros. | |
SetListener | AdView::SetAdListener AdView::SetBoundingBoxListener AdView::SetPaidEventListener | El nuevo diseño del detector aumenta la fidelidad de la detección de eventos del ciclo de vida AdView . | |
Listener::OnPresentationStateChanged | Remoto | Consulte BannerView::SetListener , más arriba. | |
Listener::OnBoundingBoxChanged | AdViewBoundingBoxListener::OnBoundingBoxChanged | ||
Anuncio intersticial | Initialize(AdParent parent, const char* ad_unit_id) | Initialize(AdParent parent) | El parámetro ad_unit_id ahora forma parte de la operación LoadAd . |
LoadAd(const AdRequest& request) | LoadAd(const char* ad_unit_id, const AdRequest& request) | ||
presentation_state | Remoto | Se eliminó la enumeración presentation_state . Utilice FullScreenContentListener . | |
SetListener | SetFullScreenContentListener SetPaidEventListener | ||
Destroy | Remoto | La limpieza de recursos ahora forma parte del destructor RewardedAd . | |
RewardedAd (formalmente RewardedVideoAd ) | Initialize | Initialize(AdParent parent) | AdParent se pasó anteriormente a Show , pero ahora forma parte de la inicialización. |
presentation_state | Remoto | Se eliminó la enumeración presentation_state . Utilice FullScreenContentListener . | |
SetListener | SetFullScreenContentListener Show SetPaidEventListener | También se define un oyente UserEarnedReward cuando se muestra un RewardedAd . Vea abajo. | |
Show(AdParent parent) | Show(UserEarnedRewardListener* listener) |