FirebaseC++ SDK версии 9.1.0 включает новый Google Mobile Ads C++ SDK.
Google Mobile Ads C++ SDK – это новый API, в котором учтены основные критические изменения, внесенные в Firebase AdMob C++ SDK для iOS и Android в 2021 и 2022 годах, включая удаление устаревших API и новый процесс работы с полноэкранными типами объявлений.
Старый Firebase AdMob C++ SDK (firebase::admob) больше не поддерживается и не будет получать обновления и исправления ошибок.
Новый Google Mobile Ads C++ SDK (firebase::gma) и старый Firebase AdMob C++ SDK (firebase::admob) останутся частью архивов сборки для Firebase C++ SDK в течение периода прекращения поддержки Firebase AdMob C++ SDK.
Удаление устаревших API
Из Google Mobile Ads C++ SDK полностью удалены следующие API:
RewardedVideoAd
Пространство имен RewardedVideoAd AdMob заменено классом RewardedAd. RewardedAd работает так же, как и InterstitialAd, но включает дополнительный RewardedAdListener для получения уведомлений о вознаграждениях.
NativeExpressAds
Класс NativeExpressAd AdMob уже был помечен как устаревший в каждом Firebase AdMob C++ SDK. Поэтому NativeExpressAd не включен в новый Google Mobile Ads C++ SDK.
Изменение пространства имен SDK
SDK перемещен в новое пространство имен и имеет новую структуру каталогов:
Пространство имен firebase::gma
Источники нового Google Mobile Ads C++ SDK находятся в пространстве имен firebase::gma. Пространство имен firebase::admob устарело вместе с Firebase AdMob C++ SDK.
Структура каталога
Заголовочные файлы перемещены в новый каталог в архиве сборки:
| Прекращение поддержки Firebase AdMob C++ SDK | Новый Google Mobile Ads C++ SDK |
|---|---|
include/firebase/admob |
include/firebase/gma |
Библиотека
Firebase AdMob C++ SDK будет предоставляться в виде статической библиотеки в архиве сборки SDK Firebase C++:
iOS
| Прекращение поддержки Firebase AdMob C++ SDK | Новый Google Mobile Ads C++ SDK |
|---|---|
firebase_admob.xcframework |
firebase_gma.xcframework |
Android
| Прекращение поддержки Firebase AdMob C++ SDK | Новый Google Mobile Ads C++ SDK |
|---|---|
libfirebase_admob.a |
libfirebase_gma.a |
Перенос классов, перечислений и структур
В таблице ниже перечислены классы, перечисления и структуры, которые были изменены или удалены. Вот краткий пересказ:
BannerViewпереименован вAdView.NativeAdExpressViewудален.- Пространство имен
RewardedVideoзаменено классомRewardedAd. - Перечисление
PresentationStateи прослушиватели удалены и заменены на прослушивателиAdListenerиFullScreenContent. Следующие параметры больше не используются для настройки отдельных объявлений в
AdRequests:- настройка идентификаторов тестовых устройств;
- таргетинг рекламы по возрасту
Теперь эти параметры можно задать в
RequestConfiguration. Это глобальная настройка, которая будет влиять на все последующие загрузки объявлений.
Прекращена поддержка функции firebase::admob namespace. |
Новое firebase::gma namespace |
|---|---|
AdSizeType (перечисление) |
AdSize::Type (перечисление) |
BannerView |
AdView |
BannerView::Listener |
AdListenerAdViewBoundingBoxListenerPaidEventListener |
BannerView::Position |
AdView::Position |
BannerView::PresentationState |
Удалено |
ChildDirectedTreatmentState |
RequestConfiguration::TagForChildDirectedTreatment |
Gender (перечисление) |
Удалено |
InterstitialAd::Listener |
FullScreenContentListenerPaidEventListener |
KeyValuePair |
Удалено |
NativeExpressAdView |
Удалено |
PollableRewardListener |
Удалено |
RewardItem |
AdReward |
RewardedVideoAd (пространство имен) |
RewardedAd (курс) |
RewardedVideoAd::Listener |
FullScreenContentListenerPaidEventListenerUserEarnedRewardListener |
AdMobError (перечисление) |
AdErrorCode (перечисление) |
RewardItem |
AdReward |
Инициализация SDK
Каждая функция инициализации Google Mobile Ads C++ SDK сразу возвращает два индикатора статуса:
Необязательный параметр out сообщает, произошла ли ошибка зависимости до начала процесса инициализации.
Возвращаемый параметр – это ссылка на
firebase::Future.Futureсодержит результаты асинхронной инициализации адаптеров медиации на устройстве.
Хотя Google Mobile Ads C++ SDK может вызываться для загрузки объявлений, размещаемых AdMob, сразу после возврата функции инициализации, другие рекламные сети не будут показывать объявления, пока не будет полностью инициализирован соответствующий адаптер медиации. Этот процесс происходит асинхронно. Поэтому если вы используете медиацию рекламы в своем приложении, рекомендуем дождаться разрешения Future, прежде чем пытаться загрузить какие-либо объявления.
До
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;
}
После
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.
}
Изменения в AdSize в течение AdView
AdSize теперь содержит статические элементы стандартных размеров баннеров и поддерживает размеры объявлений AnchorAdaptive и InlineAdaptive, высота которых динамически меняется в зависимости от заданной ширины и текущей ориентации экрана.
Добавлено статических констант (AdSize): firebase::gma::AdSize. |
|
|---|---|
AdSize::kBanner |
Размер баннера, рекомендованный Ассоциацией мобильной рекламы (MMA): 320 x 50 пикселей, не зависящих от плотности экрана. |
AdSize::kFullBanner |
Полноразмерный баннер по стандартам Бюро интерактивной рекламы (IAB) (468 x 60 пикселей, не зависящих от плотности экрана). |
AdSize::kLargeBanner |
Более высокий вариант kBanner, обычно 320 x 100. |
AdSize::kLeaderboard |
Полноразмерный баннер, соответствующий стандартам Бюро интерактивной рекламы (IAB) (728 x 90 пикселей, не зависящих от плотности экрана). |
AdSize::kMediumRectangle |
Средний прямоугольник по стандартам Бюро интерактивной рекламы (IAB) (300 x 250 пикселей, не зависящих от плотности экрана). |
Статические методы в firebase::gma::AdSize, помогающие создавать экземпляры AdSize. |
|
|---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize |
Создает объект AdSize с заданной шириной и оптимизированной Google высотой для создания баннера в горизонтальной ориентации. |
GetPortraitAnchoredAdaptiveBannerAdSize |
Создает объект AdSize с заданной шириной и высотой, оптимизированной Google, для создания баннера в портретном режиме. |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize |
Создает объект AdSize с заданной шириной и оптимизированной Google высотой для создания баннера с учетом текущей ориентации. |
GetInlineAdaptiveBannerAdSize |
Создает объект AdSize, наиболее подходящий для баннеров заданной максимальной высоты.
Этот |
GetLandscapeInlineAdaptiveBannerAdSize |
Создает объект InlineAdaptive AdSize с заданной шириной и высотой, соответствующей высоте экрана устройства в горизонтальной ориентации. |
GetPortraitInlineAdaptiveBannerAdSize |
Создает объект InlineAdaptive AdSize с заданной шириной и высотой, соответствующей вертикальной ориентации устройства. |
GetCurrentOrientationInlineAdaptiveBannerAdSize |
Удобный метод, который возвращает InlineAdaptive AdSize с учетом текущей ориентации интерфейса и заданной ширины. |
До
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);
После
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 и глобальные настройки
Идентификаторы тестовых устройств, TagForChildDirectedTreatment и TagForUnderAgeOfConsent (ранее обрабатывались с помощью birthday) были удалены из AdRequest и теперь являются частью глобального RequestConfiguration. Приложения могут вызывать firebase::gma::SetRequestConfiguration() на ранних этапах своего жизненного цикла, чтобы задавать эти значения. После этого все последующие операции по загрузке объявлений будут выполняться с учетом заданных настроек.
firebase::gma::AdRequest по-прежнему существует, поскольку предоставляет контекстную информацию для загрузки объявлений, включая ключевые слова и необязательный URL контента.
Структура AdRequest в стиле C была заменена классом с методами, которые упрощают определение и добавление различных списков информации.
Вот основные изменения в AdRequest:
- Дополнительные параметры теперь связаны с названием класса адаптера медиации. Дополнительные данные, отправляемые в сервис AdMob, должны использовать название класса по умолчанию, как описано ниже.
- При запросе объявления приложения могут передавать URL контента, который они показывают. Это позволяет использовать таргетинг по ключевым словам для сопоставления объявления с другим контентом на странице.
До
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.
После
// 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 возвращает Future, содержащий объект AdResult для всех типов объявлений AdView, InterstitialAd и RewardedAd. Метод AdResult::is_successful возвращает true, если запрос объявления был успешно выполнен, и false, если нет.
В случае сбоя AdResult содержит объект AdError с информацией об ошибке на уровне сервиса, включая код ошибки, сообщение об ошибке и строки домена.
До
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.
}
}
}
После
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.
}
}
}
}
AdListener событий в группе "AdView"
Класс BannerView::Listener в AdMob заменен двумя разными классами прослушивателей в Google Mobile Ads C++ SDK:
AdListenerотслеживает жизненный цикл объявлений и события взаимодействия с пользователями.AdViewBoundingBoxListenerвызывается, когда размер или положениеAdViewизменяется.
Сопоставления обратных вызовов OnPresentationStateChanged в AdMob Google Mobile Ads
Перечисляемый тип firebase::admob::BannerView::PresentationState и метод прослушивателя OnPresentationStateChanged не включены в новый Google Mobile Ads C++ SDK.
Ниже приведены альтернативные способы обнаружения изменений состояния показа в жизненном цикле AdView.
firebase::admob::BannerView::Listener
OnPresentationStateChanged событие |
firebase::gma::AdListener counterpart |
|---|---|
kPresentationStateHidden |
При вызове AdListener::OnAdClosed или успешном завершении асинхронной операции AdView::Hide(). |
kPresentationStateVisibleWithoutAd |
Нет. Попытка вызвать AdView::Show() незагруженного AdView приведет к ошибке. |
kPresentationStateVisibleWithAd |
При вызове AdListener::OnAdOpened или когда AdView::Show() успешно завершает асинхронную операцию с объявлением. |
kPresentationStateOpenedPartialOverlay |
Запросите граничную рамку после вызова AdListener::OnAdOpened(), чтобы определить размер и положение показываемого объявления.
Также можно запросить положение AdView и AdSize и/или отслеживать граничную рамку с помощью AdViewBoundingBoxListener. |
kPresentationStateCoveringUI |
См. раздел kPresentationStateOpenedPartialOverlay выше. |
RewardedAd теперь является курсом.
Устаревший Firebase AdMob C++ SDK поддерживал объявления с вознаграждением через набор функций в пространстве имен firebase::admob::rewarded_ad. Эти функции были объединены в новый класс RewardedAd, который показывает объявления с помощью API, аналогичного InterstitialAd (см. следующий раздел).
InterstitialAd и RewardedAd слушателей
К полноэкранным относятся межстраничные объявления и объявления с вознаграждением. Чтобы отслеживать события жизненного цикла объявлений этих типов, можно установить новый FullScreenContentListener, а чтобы отслеживать, когда сервис AdMob регистрирует платное событие, – отдельный PaidEventListener.
В RewardedAd есть дополнительный прослушиватель для отслеживания событий получения вознаграждения.
Новые методы обратного вызова для полноэкранных объявлений
FullScreenContentListener способов |
PaidEventListener способов |
UserEarnedRewardListener способов |
|---|---|---|
OnAdClicked |
OnPaidEvent |
OnUserEarnedReward |
OnAdDismissedFullScreenContent |
||
OnAdFailedToShowFullScreenContent |
||
OnAdImpression |
||
OnAdShowedFullScreenContent |
Измененные, удаленные или замененные методы
В таблице ниже перечислены методы, которые были изменены в новой версии Google Mobile Ads C++ SDK. Методы с перечисленными параметрами остаются, но их подписи изменены.
| Класс | Firebase AdMob C++ SDK API | Google Mobile Ads C++ SDK API | Примечания |
|---|---|---|---|
BannerView
|
MoveTo
|
AdView::SetPosition
|
|
presentation_state
|
Удалено | Обработано событий: AdViewListener. Будущих результатов: AdView::Show и AdView::Hide.
|
|
SetListener
|
AdView::SetAdListenerAdView::SetBoundingBoxListenerAdView::SetPaidEventListener |
Новый дизайн прослушивателя повышает точность обнаружения событий жизненного цикла AdView.
|
|
Listener::OnPresentationStateChanged
|
Удалено | См. раздел BannerView::SetListener выше.
|
|
Listener::OnBoundingBoxChanged
|
AdViewBoundingBoxListener::OnBoundingBoxChanged
|
||
| InterstitialAd | Initialize(AdParent parent, const char* ad_unit_id)
|
Initialize(AdParent parent)
|
Параметр ad_unit_id теперь является частью операции LoadAd.
|
LoadAd(const AdRequest& request)
|
LoadAd(const char* ad_unit_id, const AdRequest& request)
|
||
presentation_state
|
Удалено | Перечисление presentation_state удалено. Используйте FullScreenContentListener.
|
|
SetListener
|
SetFullScreenContentListenerSetPaidEventListener
|
||
Destroy
|
Удалено | Очистка ресурсов теперь выполняется деструктором RewardedAd.
|
|
RewardedAd(официально RewardedVideoAd)
|
Initialize
|
Initialize(AdParent parent)
|
AdParent ранее передавался в Show, но теперь является частью инициализации.
|
presentation_state
|
Удалено | Перечисление presentation_state удалено. Используйте FullScreenContentListener.
|
|
SetListener
|
SetFullScreenContentListenerSetPaidEventListener
Show
|
При показе RewardedAd также определяется прослушиватель UserEarnedReward. Инструкции приводятся ниже.
|
|
Show(AdParent parent)
|
Show(UserEarnedRewardListener* listener)
|