Migrar al nuevo SDK de C++ de anuncios de Google para móviles

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 llamarse AdView .
  • Se elimina NativeAdExpressView .
  • El espacio de nombres RewardedVideo se reemplaza por una clase RewardedAd .
  • La enumeración PresentationState y los oyentes se eliminan y se reemplazan con oyentes AdListener y FullScreenContent .
  • 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 . The Future 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 AdSize permite a los servidores de Google elegir un tamaño de anuncio óptimo con una altura menor o igual a una altura máxima especificada.

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 mueve AdView .

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)