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 classeRewardedAd
. - L'énumération et les écouteurs
PresentationState
sont supprimés et remplacés par les écouteursAdListener
etFullScreenContent
. 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
. LeFuture
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 |
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é lorsqueAdView
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) |