В выпуске Firebase C++ SDK v9.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
Следующие API были полностью удалены из Google Mobile Ads C++ SDK.
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 | Новый C++ SDK для Google Mobile Ads |
---|---|
include/firebase/admob | include/firebase/gma |
Библиотека
Firebase AdMob C++ SDK будет предоставлен как статическая библиотека в архиве сборки Firebase C++ SDK:
iOS
Устаревший Firebase AdMob C++ SDK | Новый C++ SDK для Google Mobile Ads |
---|---|
firebase_admob.xcframework | firebase_gma.xcframework |
Андроид
Устаревший Firebase AdMob C++ SDK | Новый C++ SDK для Google Mobile Ads |
---|---|
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 | AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position | AdView::Position |
BannerView::PresentationState | Удаленный |
ChildDirectedTreatmentState | RequestConfiguration::TagForChildDirectedTreatment |
Gender (перечисление) | Удаленный |
InterstitialAd::Listener | FullScreenContentListener PaidEventListener |
KeyValuePair | Удаленный |
NativeExpressAdView | Удаленный |
PollableRewardListener | Удаленный |
RewardItem | AdReward |
RewardedVideoAd (пространство имен) | RewardedAd (класс) |
RewardedVideoAd::Listener | FullScreenContentListener PaidEventListener UserEarnedRewardListener |
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) (320x50 пикселей, не зависящих от плотности) |
AdSize::kFullBanner | Полный размер баннера Бюро интерактивной рекламы (IAB) (468x60 пикселей, не зависящих от плотности) |
AdSize::kLargeBanner | Более высокая версия kBanner , обычно 320x100 |
AdSize::kLeaderboard | Размер рекламного баннера Interactive Advertising Bureau (IAB) (728x90 пикселей, не зависящих от плотности) |
AdSize::kMediumRectangle | Средний размер прямоугольной рекламы Interactive Advertising Bureau (IAB) (300x250 пикселей, не зависящих от плотности) |
Статические методы в 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
(ранее обрабатывавшиеся по дате рождения) удалены из AdRequest
и теперь являются частью глобального RequestConfiguration
. Приложения могут вызывать firebase::gma::SetRequestConfiguration()
на ранних этапах жизненного цикла приложения для настройки этих значений. Все последующие операции загрузки рекламы будут учитывать эти настройки после их настройки.
firebase::gma::AdRequest
все еще существует, поскольку он предоставляет контекстную информацию для загрузки рекламы, включая ключевые слова и необязательный URL-адрес контента.
Структура AdRequest
в стиле C от AdMob была заменена классом с методами, которые обеспечивают лучший пользовательский интерфейс при определении и добавлении в различные списки информации.
Вот примечательные изменения 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
.
Сопоставления Google Mobile Ads с обратным вызовом AdMob OnPresentationStateChanged
Перечислимый тип firebase::admob::BannerView::PresentationState
и метод прослушивателя OnPresentationStateChanged
не включены в новый Google Mobile Ads C++ SDK.
Ниже приведены альтернативные способы обнаружения изменений состояния презентации в жизненном цикле AdView
:
firebase::admob::BannerView::Listener OnPresentationStateChanged | firebase::gma::AdListener аналог |
---|---|
kPresentationStateHidden | При вызове AdListener::OnAdClosed или при успешном завершении асинхронной операции AdView::Hide() |
kPresentationStateVisibleWithoutAd | Нет. Попытка вызвать AdView::Show() для незагруженного AdView приведёт к ошибке. |
kPresentationStateVisibleWithAd | Когда вызывается AdListener::OnAdOpened или когда AdView::Show() успешно завершает свою асинхронную операцию с рекламой |
kPresentationStateOpenedPartialOverlay | Запросите ограничивающий блок после AdListener::OnAdOpened() чтобы определить размер и положение показываемого объявления. В качестве альтернативы, запросите положение и AdSize AdView и/или отслеживайте ограничивающий блок с помощью 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 |
Методы изменены/удалены/заменены
В таблице ниже перечислены методы, изменённые в новом C++ SDK Google Mobile Ads. Методы с перечисленными параметрами остались, но их сигнатуры изменились.
Сорт | API Firebase AdMob C++ SDK | API C++ SDK для мобильных объявлений Google | Примечания |
---|---|---|---|
BannerView | MoveTo | AdView::SetPosition | |
presentation_state | Удаленный | Обрабатывается событиями AdViewListener и будущими результатами AdView::Show и AdView::Hide . | |
SetListener | AdView::SetAdListener AdView::SetBoundingBoxListener AdView::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 | SetFullScreenContentListener SetPaidEventListener | ||
Destroy | Удаленный | Очистка ресурсов теперь является частью деструктора RewardedAd . | |
RewardedAd (формально RewardedVideoAd ) | Initialize | Initialize(AdParent parent) | AdParent ранее передавался в Show , но теперь является частью инициализации. |
presentation_state | Удаленный | Перечисление presentation_state удалено. Используйте FullScreenContentListener . | |
SetListener | SetFullScreenContentListener SetPaidEventListener Show | При показе RewardedAd также определяется прослушиватель UserEarnedReward . См. ниже. | |
Show(AdParent parent) | Show(UserEarnedRewardListener* listener) |