Migrer vers le nouveau SDK C++ de Google Mobile Ads

La sortie du SDK Firebase C++ v9.1.0 introduit un nouveau SDK Google Mobile Ads C++.

Le SDK Google Mobile Ads C++ est une nouvelle surface d'API qui intègre les modifications majeures apportées aux SDK Firebase AdMob C++ pour iOS et Android en 2021 et 2022, notamment la suppression des API obsolètes et un nouveau flux lors de l'utilisation d'annonces plein écran. les types.

L'ancien SDK Firebase AdMob C++ ( firebase::admob ) a été marqué comme obsolète et ne recevra plus de mises à jour ni de corrections de bogues à l'avenir.

Le nouveau SDK C++ Google Mobile Ads ( firebase::gma ) et l'ancien SDK Firebase AdMob C++ ( firebase::admob ) feront partie des archives de build du SDK Firebase C++ pendant la période d'obsolescence du SDK Firebase AdMob C++.

Suppression de l'ancienne API

Les API suivantes ont été entièrement supprimées du SDK Google Mobile Ads C++.

RewardedVideoAd

L'espace de noms RewardedVideoAd d'AdMob a été remplacé par la classe RewardedAd . RewardedAd se comporte de manière similaire à InterstitialAd mais inclut un RewardedAdListener supplémentaire pour recevoir une notification des récompenses d'articles.

NativeExpressAds

NativeExpressAd d'AdMob avait déjà été marqué comme obsolète dans chaque SDK Firebase AdMob C++. Par conséquent, NativeExpressAd n'est pas inclus dans le nouveau SDK C++ de Google Mobile Ads.

Modification de l'espace de noms du SDK

Le SDK a été déplacé vers un nouvel espace de noms et possède une nouvelle structure de répertoires :

Espace de noms firebase::gma

Les sources du nouveau SDK C++ de Google Mobile Ads se trouvent dans l'espace de noms firebase::gma . L'ancien espace de noms firebase::admob est obsolète, tout comme le SDK Firebase AdMob C++.

Structure du répertoire

Les fichiers d'en-tête ont été déplacés vers un nouveau répertoire dans l'archive de build :

SDK Firebase AdMob C++ obsolète Nouveau SDK C++ pour les annonces mobiles Google
include/firebase/admob include/firebase/gma

Bibliothèque

Le SDK Firebase AdMob C++ sera fourni sous forme de bibliothèque statique dans l'archive de build du SDK Firebase C++ :

IOS

SDK Firebase AdMob C++ obsolète Nouveau SDK C++ pour les annonces mobiles Google
firebase_admob.xcframework firebase_gma.xcframework

Android

SDK Firebase AdMob C++ obsolète Nouveau SDK C++ pour les annonces mobiles Google
libfirebase_admob.a libfirebase_gma.a

Migrations de classes, d'énumérations et de structures

Le tableau ci-dessous répertorie les classes, énumérations et structures spécifiques qui ont été modifiées ou supprimées. Voici un résumé :

  • BannerView est renommé AdView .
  • NativeAdExpressView est supprimé.
  • L'espace de noms RewardedVideo est remplacé par une classe RewardedAd .
  • L'énumération et les écouteurs PresentationState sont supprimés et remplacés par les écouteurs AdListener et FullScreenContent .
  • Les paramètres suivants sont supprimés en tant que paramètres de configuration par annonce dans AdRequests :

    • la configuration des identifiants des appareils de test
    • le ciblage des publicités en fonction de l'âge

    Au lieu de cela, ces paramètres peuvent désormais être configurés dans RequestConfiguration , qui est un paramètre global qui affectera tous les chargements publicitaires ultérieurs.

firebase::admob namespace obsolète Nouvel firebase::gma namespace
AdSizeType (énumération) AdSize::Type (énumération)
BannerView AdView
BannerView::Listener AdListener
AdViewBoundingBoxListener
PaidEventListener
BannerView::Position AdView::Position
BannerView::PresentationState Supprimé
ChildDirectedTreatmentState RequestConfiguration::TagForChildDirectedTreatment
Gender (énumération) Supprimé
InterstitialAd::Listener FullScreenContentListener
PaidEventListener
KeyValuePair Supprimé
NativeExpressAdView Supprimé
PollableRewardListener Supprimé
RewardItem AdReward
RewardedVideoAd (espace de noms) RewardedAd (classe)
RewardedVideoAd::Listener FullScreenContentListener
PaidEventListener
UserEarnedRewardListener
AdMobError (énumération) AdErrorCode (énumération)
RewardItem AdReward

Initialisation du SDK

Chaque fonction d'initialisation du SDK C++ Google Mobile Ads renvoie immédiatement deux indicateurs d'état :

  • Un paramètre out facultatif indique si une erreur de dépendance s'est produite avant le démarrage du processus d'initialisation.

  • Le paramètre de retour est une référence à un firebase::Future . Le Future contient les résultats de l’initialisation asynchrone des adaptateurs de médiation sur l’appareil.

Bien que le SDK C++ de Google Mobile Ads puisse être invoqué pour charger les annonces diffusées par AdMob dès le retour de la fonction d'initialisation, les autres réseaux publicitaires ne diffuseront pas d'annonces tant que leur adaptateur de médiation correspondant n'aura pas été entièrement initialisé. Ce processus se produit de manière asynchrone. Par conséquent, si vous utilisez la médiation publicitaire dans votre application, nous vous recommandons d'attendre la résolution du Future avant de tenter de charger des annonces.

Avant

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;
}

Aprè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.
}

Modifications apportées à AdSize dans AdView

AdSize contient désormais des membres statiques de tailles de bannières publicitaires courantes et prend en charge les tailles d'annonces AnchorAdaptive et InlineAdaptive qui ont une hauteur dynamique basée sur la largeur donnée et l'orientation actuelle de l'écran.

Constantes statiques AdSize ajoutées à firebase::gma::AdSize

AdSize::kBanner

Taille de la bannière publicitaire de la Mobile Marketing Association (MMA) (320 x 50 pixels indépendants de la densité)

AdSize::kFullBanner

Taille de la bannière publicitaire de l'Interactive Advertising Bureau (IAB) (468 x 60 pixels indépendants de la densité)
AdSize::kLargeBanner Version plus grande de kBanner , généralement 320 x 100

AdSize::kLeaderboard

Taille de l'annonce du classement de l'Interactive Advertising Bureau (IAB) (728 x 90 pixels indépendants de la densité)
AdSize::kMediumRectangle Taille d'annonce rectangulaire moyenne de l'Interactive Advertising Bureau (IAB) (300 x 250 pixels indépendants de la densité)
Méthodes statiques dans firebase::gma::AdSize pour aider à construire des instances d' AdSize
GetLandscapeAnchoredAdaptiveBannerAdSize Crée un AdSize avec la largeur donnée et une hauteur optimisée par Google pour créer une bannière publicitaire en mode paysage
GetPortraitAnchoredAdaptiveBannerAdSize Crée un AdSize avec la largeur donnée et une hauteur optimisée par Google pour créer une bannière publicitaire en mode portrait
GetCurrentOrientationAnchoredAdaptiveBannerAdSize Crée un AdSize avec la largeur donnée et une hauteur optimisée par Google pour créer une bannière publicitaire en fonction de l'orientation actuelle.
GetInlineAdaptiveBannerAdSize Crée une AdSize la plus adaptée aux bannières publicitaires étant donné une hauteur maximale

Cette AdSize permet aux serveurs Google de choisir une taille d'annonce optimale avec une hauteur inférieure ou égale à une hauteur maximale spécifiée.

GetLandscapeInlineAdaptiveBannerAdSize Crée un InlineAdaptive AdSize avec la largeur donnée et la hauteur du paysage de l'appareil
GetPortraitInlineAdaptiveBannerAdSize Crée un InlineAdaptive AdSize avec la largeur donnée et la hauteur portrait de l'appareil.
GetCurrentOrientationInlineAdaptiveBannerAdSize Une méthode pratique pour renvoyer InlineAdaptive AdSize étant donné l’orientation actuelle de l’interface et une largeur spécifique.

Avant

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);

Aprè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 et configuration globale

Les ID d'appareil de test, TagForChildDirectedTreatment et TagForUnderAgeOfConsent (auparavant gérés par anniversaire) ont été supprimés d' AdRequest et font désormais partie d'une RequestConfiguration globale. Les applications peuvent appeler firebase::gma::SetRequestConfiguration() dès le début du cycle de vie de l'application pour configurer ces valeurs. Toutes les opérations ultérieures de chargement d'annonces respecteront ces paramètres une fois qu'ils seront configurés.

firebase::gma::AdRequest existe toujours car il fournit des informations contextuelles pour le chargement des publicités, y compris des mots-clés et une URL de contenu facultative.

La structure de style C AdRequest d'AdMob a été remplacée par une classe avec des méthodes qui offrent une meilleure expérience utilisateur lors de la définition et de l'ajout aux différentes listes d'informations.

Voici les modifications notables AdRequest :

  • Les extras sont désormais associés à un nom de classe d’adaptateur de médiation. Les extras envoyés au service AdMob doivent utiliser le nom de classe par défaut tel que défini ci-dessous.
  • Lorsqu'elles demandent une annonce, les applications peuvent transmettre une URL du contenu qu'elles diffusent. Cela permet au ciblage par mots clés de faire correspondre l'annonce avec d'autres contenus affichés.

Avant

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.

Aprè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 renvoie désormais un Future contenant un objet AdResult pour tous les types d'annonces AdView , InterstitialAd et RewardedAd . La méthode AdResult::is_successful renvoie true si la demande d'annonce a été satisfaite avec succès, ou false dans le cas contraire.

En cas d'échec, AdResult contient un objet AdError avec des informations de niveau de service sur le problème, notamment le code d'erreur, le message d'erreur et les chaînes de domaine.

Avant

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.
    }
  }
}

Aprè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.
      }
    }
  }
}

Événements AdListener dans AdView

La classe BannerView::Listener d'AdMob a été remplacée par deux classes d'écoute distinctes dans le SDK C++ de Google Mobile Ads :

  • AdListener suit le cycle de vie des publicités et les événements d'interaction des utilisateurs.
  • AdViewBoundingBoxListener est invoqué lorsque AdView est redimensionné ou déplacé.

Rappel AdMob OnPresentationStateChanged Mappages Google Mobile Ads

Le type énuméré firebase::admob::BannerView::PresentationState et la méthode d'écoute OnPresentationStateChanged ne sont pas inclus dans le nouveau SDK C++ de Google Mobile Ads.

Voici d'autres moyens de détecter les changements d'état de présentation dans le cycle de vie d'un AdView :

événement firebase::admob::BannerView::Listener OnPresentationStateChanged firebase::gma::AdListener
kPresentationStateHidden Lorsque AdListener::OnAdClosed est invoqué ou lorsque AdView::Hide() termine son opération asynchrone avec succès
kPresentationStateVisibleWithoutAd Aucun. Tenter d'invoquer AdView::Show() un AdView déchargé entraînera une erreur.
kPresentationStateVisibleWithAd Lorsque AdListener::OnAdOpened est invoqué ou lorsque AdView::Show() termine son opération asynchrone avec succès avec une annonce
kPresentationStateOpenedPartialOverlay Interrogez le cadre de sélection après l'appel AdListener::OnAdOpened() pour déterminer la taille et la position de l'annonce affichée. Vous pouvez également interroger la position et AdSize de AdView et/ou surveiller le cadre de délimitation via AdViewBoundingBoxListener .
kPresentationStateCoveringUI Voir kPresentationStateOpenedPartialOverlay ci-dessus

RewardedAd est maintenant une classe

Le SDK Firebase AdMob C++, obsolète, facilitait les publicités avec récompense via un ensemble de fonctions dans l'espace de noms firebase::admob::rewarded_ad . Ces fonctions ont été regroupées dans une nouvelle classe RewardedAd qui diffuse des annonces avec une surface API similaire à InterstitialAd (voir section suivante).

Écouteurs InterstitialAd et RewardedAd

Les annonces interstitielles et les annonces avec récompense sont considérées comme des annonces plein écran. Un nouveau FullScreenContentListener peut être installé pour écouter les événements du cycle de vie des publicités pour ces types d'annonces, et un PaidEventListener distinct peut être installé pour suivre le moment où le service AdMob a estimé qu'un événement payant s'est produit.

RewardedAd dispose d'un auditeur supplémentaire pour surveiller les événements de récompense gagnés par l'utilisateur.

Nouvelles méthodes de rappel des annonces en plein écran

Méthodes FullScreenContentListener Méthodes PaidEventListener Méthodes UserEarnedRewardListener
OnAdClicked OnPaidEvent OnUserEarnedReward
OnAdDismissedFullScreenContent
OnAdFailedToShowFullScreenContent
OnAdImpression
OnAdShowedFullScreenContent

Méthodes modifiées/supprimées/remplacées

Le tableau ci-dessous répertorie les méthodes spécifiques modifiées dans le nouveau SDK C++ de Google Mobile Ads. Les méthodes avec les paramètres répertoriés restent mais leurs signatures ont changé.

Classe API du SDK Firebase AdMob C++ API du SDK C++ Google Mobile Ads Remarques
BannerView MoveTo AdView::SetPosition
presentation_state Supprimé Géré par les événements AdViewListener et AdView::Show et AdView::Hide futurs résultats.
SetListener AdView::SetAdListener
AdView::SetBoundingBoxListener
AdView::SetPaidEventListener
La nouvelle conception de l'écouteur augmente la fidélité de la détection des événements du cycle de vie AdView .
Listener::OnPresentationStateChanged Supprimé Voir BannerView::SetListener ci-dessus.
Listener::OnBoundingBoxChanged AdViewBoundingBoxListener::OnBoundingBoxChanged
Annonce interstitielle Initialize(AdParent parent, const char* ad_unit_id) Initialize(AdParent parent) Le paramètre ad_unit_id fait désormais partie de l'opération LoadAd .
LoadAd(const AdRequest& request) LoadAd(const char* ad_unit_id, const AdRequest& request)
presentation_state Supprimé L'énumération presentation_state a été supprimée. Utilisez FullScreenContentListener .
SetListener SetFullScreenContentListener
SetPaidEventListener
Destroy Supprimé Le nettoyage des ressources fait désormais partie du destructeur RewardedAd .
RewardedAd
(officiellement
RewardedVideoAd )
Initialize Initialize(AdParent parent) AdParent était auparavant transmis à Show , mais fait désormais partie de l'initialisation.
presentation_state Supprimé L'énumération presentation_state a été supprimée. Utilisez FullScreenContentListener .
SetListener SetFullScreenContentListener
Show SetPaidEventListener
Un écouteur UserEarnedReward est également défini lors de l'affichage d'un RewardedAd . Voir ci-dessous.
Show(AdParent parent) Show(UserEarnedRewardListener* listener)