W wydaniu pakietu SDK Firebase C++ w wersji 9.1.0 wprowadzono nowy pakiet SDK do reklam mobilnych Google w języku C++.
Pakiet SDK do reklam mobilnych Google C++ to nowy interfejs API, który obejmuje najważniejsze zmiany wprowadzone w pakietach SDK Firebase AdMob C++ dla systemów iOS i Android w latach 2021 i 2022, w tym usunięcie przestarzałych interfejsów API i nowy sposób pracy z reklamami pełnoekranowymi typy.
Stary pakiet SDK Firebase AdMob C++ ( firebase::admob
) został oznaczony jako przestarzały i od tej pory nie będzie otrzymywać żadnych aktualizacji ani poprawek błędów.
Zarówno nowy pakiet SDK do reklam mobilnych Google C++ ( firebase::gma
), jak i stary pakiet SDK Firebase AdMob C++ ( firebase::admob
) pozostaną częścią archiwów kompilacji pakietu SDK Firebase C++ w okresie wycofywania pakietu SDK Firebase AdMob C++.
Usuwanie starszego interfejsu API
Następujące interfejsy API zostały w całości usunięte z pakietu SDK do reklam mobilnych Google C++.
RewardedVideoAd
Przestrzeń nazw RewardedVideoAd
w AdMob została zastąpiona klasą RewardedAd
. RewardedAd
zachowuje się podobnie do InterstitialAd
, ale zawiera dodatkowego RewardedAdListener
, który umożliwia otrzymywanie powiadomień o nagrodach za przedmioty.
NativeExpressAds
NativeExpressAd
AdMob została już oznaczona jako przestarzała w każdym pakiecie SDK Firebase AdMob C++. Dlatego też NativeExpressAd
nie jest uwzględniony w nowym pakiecie SDK do reklam mobilnych Google C++.
Zmiana przestrzeni nazw pakietu SDK
Zestaw SDK został przeniesiony do nowej przestrzeni nazw i ma nową strukturę katalogów:
Przestrzeń nazw firebase::gma
Źródła nowego pakietu SDK do reklam mobilnych Google C++ znajdują się w przestrzeni nazw firebase::gma
. Starsza przestrzeń nazw firebase::admob
została wycofana wraz z pakietem SDK Firebase AdMob C++.
Struktura katalogów
Pliki nagłówkowe zostały przeniesione do nowego katalogu w archiwum kompilacji:
Przestarzały pakiet SDK Firebase AdMob C++ | Nowy pakiet SDK do reklam mobilnych Google C++ |
---|---|
include/firebase/admob | include/firebase/gma |
Biblioteka
Pakiet SDK Firebase AdMob C++ będzie dostarczany jako biblioteka statyczna w archiwum kompilacji pakietu SDK Firebase C++:
iOS
Przestarzały pakiet SDK Firebase AdMob C++ | Nowy pakiet SDK do reklam mobilnych Google C++ |
---|---|
firebase_admob.xcframework | firebase_gma.xcframework |
Android
Przestarzały pakiet SDK Firebase AdMob C++ | Nowy pakiet SDK do reklam mobilnych Google C++ |
---|---|
libfirebase_admob.a | libfirebase_gma.a |
Migracje klas, wyliczeń i struktur
Poniższa tabela zawiera listę konkretnych klas, wyliczeń i struktur, które uległy zmianie lub zostały usunięte. Oto podsumowanie:
- Nazwa
BannerView
została zmieniona naAdView
. -
NativeAdExpressView
został usunięty. - Przestrzeń nazw
RewardedVideo
zostaje zastąpiona klasąRewardedAd
. - Wyliczenie i odbiorniki
PresentationState
zostaną usunięte i zastąpione odbiornikamiAdListener
iFullScreenContent
. Następujące parametry są usuwane jako parametry konfiguracyjne poszczególnych reklam w
AdRequests
:- konfiguracja identyfikatorów urządzeń testowych
- targetowanie reklam ze względu na wiek
Zamiast tego można teraz skonfigurować te parametry w
RequestConfiguration
, które jest ustawieniem globalnym, które będzie miało wpływ na wszystkie kolejne ładowania reklam.
Przestarzała firebase::admob namespace | Nowa firebase::gma namespace |
---|---|
AdSizeType (wyliczenie) | AdSize::Type (wyliczenie) |
BannerView | AdView |
BannerView::Listener | AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position | AdView::Position |
BannerView::PresentationState | REMOVED |
ChildDirectedTreatmentState | RequestConfiguration::TagForChildDirectedTreatment |
Gender (wyliczenie) | REMOVED |
InterstitialAd::Listener | FullScreenContentListener PaidEventListener |
KeyValuePair | REMOVED |
NativeExpressAdView | REMOVED |
PollableRewardListener | REMOVED |
RewardItem | AdReward |
RewardedVideoAd (przestrzeń nazw) | RewardedAd (klasa) |
RewardedVideoAd::Listener | FullScreenContentListener PaidEventListener UserEarnedRewardListener |
AdMobError (wyliczenie) | AdErrorCode (wyliczenie) |
RewardItem | AdReward |
Inicjalizacja SDK
Każda funkcja inicjalizacji pakietu SDK do reklam mobilnych Google C++ natychmiast zwraca dwa wskaźniki stanu:
Opcjonalny parametr out informuje, czy przed rozpoczęciem procesu inicjalizacji wystąpił błąd zależności.
Parametr zwracany jest odniesieniem do
firebase::Future
.Future
zawiera wyniki asynchronicznej inicjalizacji adapterów mediacji na urządzeniu.
Chociaż pakiet SDK do reklam mobilnych Google C++ może zostać wywołany w celu załadowania reklam wyświetlanych przez AdMob natychmiast po przywróceniu funkcji inicjalizacji, inne sieci reklamowe nie będą wyświetlać reklam, dopóki odpowiadający im adapter mediacji nie zostanie w pełni zainicjowany. Proces ten zachodzi asynchronicznie. Dlatego też, jeśli korzystasz z pośrednictwa reklam w swojej aplikacji, zalecamy zaczekanie na rozwiązanie problemu Future
przed próbą załadowania jakichkolwiek reklam.
Zanim
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;
}
Po
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.
}
Zmiany w AdSize
w AdView
AdSize
zawiera teraz statyczne elementy popularnych rozmiarów banerów reklamowych i obsługuje rozmiary reklam AnchorAdaptive
i InlineAdaptive
, które mają dynamiczną wysokość na podstawie danej szerokości i bieżącej orientacji ekranu.
Dodano statyczne stałe AdSize do firebase::gma::AdSize | |
---|---|
AdSize::kBanner | Rozmiar banera reklamowego Mobile Marketing Association (MMA) (320 x 50 pikseli niezależnych od gęstości) |
AdSize::kFullBanner | Pełny rozmiar reklamy banerowej Interactive Advertising Bureau (IAB) (468 x 60 pikseli niezależnych od gęstości) |
AdSize::kLargeBanner | Wyższa wersja kBanner , zazwyczaj 320x100 |
AdSize::kLeaderboard | Rozmiar reklamy w tabeli liderów Interactive Advertising Bureau (IAB) (728 x 90 pikseli niezależnych od gęstości) |
AdSize::kMediumRectangle | Średni prostokątny rozmiar reklamy Interactive Advertising Bureau (IAB) (300 x 250 pikseli niezależnych od gęstości) |
Metody statyczne w firebase::gma::AdSize pomagające konstruować instancje AdSize | |
---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize | Tworzy element AdSize o podanej szerokości i wysokości zoptymalizowanej przez Google, aby utworzyć baner reklamowy w trybie poziomym |
GetPortraitAnchoredAdaptiveBannerAdSize | Tworzy element AdSize o podanej szerokości i wysokości zoptymalizowanej przez Google, aby utworzyć baner reklamowy w trybie pionowym |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize | Tworzy element AdSize o podanej szerokości i wysokości zoptymalizowanej przez Google, aby utworzyć baner reklamowy przy aktualnej orientacji |
GetInlineAdaptiveBannerAdSize | Tworzy AdSize najbardziej odpowiedni dla reklam banerowych przy maksymalnej wysokości Ten |
GetLandscapeInlineAdaptiveBannerAdSize | Tworzy InlineAdaptive AdSize o podanej szerokości i wysokości poziomej urządzenia |
GetPortraitInlineAdaptiveBannerAdSize | Tworzy InlineAdaptive AdSize o podanej szerokości i wysokości urządzenia w pionie. |
GetCurrentOrientationInlineAdaptiveBannerAdSize | Wygodna metoda zwracania InlineAdaptive AdSize , biorąc pod uwagę bieżącą orientację interfejsu i określoną szerokość. |
Zanim
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);
Po
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
i konfiguracja globalna
Identyfikatory urządzeń testowych, TagForChildDirectedTreatment
i TagForUnderAgeOfConsent
(wcześniej obsługiwane w przypadku urodzin) zostały usunięte z AdRequest
i stanowią teraz część globalnej RequestConfiguration
. Aplikacje mogą wywoływać funkcję firebase::gma::SetRequestConfiguration()
na początku cyklu życia aplikacji w celu skonfigurowania tych wartości. Wszystkie kolejne operacje ładowania reklam będą uwzględniać te ustawienia po ich skonfigurowaniu.
firebase::gma::AdRequest
nadal istnieje, ponieważ zapewnia informacje kontekstowe do ładowania reklam, w tym słowa kluczowe i opcjonalny adres URL zawartości.
Struktura AdRequest
w stylu C w AdMob została zastąpiona klasą z metodami, które zapewniają lepszą wygodę użytkownika podczas definiowania i dołączania do różnych list informacji.
Oto godne uwagi zmiany AdRequest
:
- Dodatki są teraz powiązane z nazwą klasy adaptera mediacji. Dodatki wysyłane do usługi AdMob powinny używać domyślnej nazwy klasy określonej poniżej.
- Żądając reklamy, aplikacje mogą przekazać adres URL udostępnianych treści. Umożliwia to kierowanie na słowa kluczowe w celu dopasowania reklamy do innej wyświetlanej treści.
Zanim
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.
Po
// 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
zwraca teraz obiekt Future
zawierający obiekt AdResult
dla wszystkich typów reklam AdView
, InterstitialAd
i RewardedAd
. Metoda AdResult::is_successful
zwraca true
, jeśli żądanie reklamy zostało pomyślnie zrealizowane, lub false
, jeśli nie.
W przypadku niepowodzenia AdResult
zawiera obiekt AdError
z informacjami na poziomie usługi dotyczącymi problemu, w tym kodem błędu, komunikatem o błędzie i ciągami domeny.
Zanim
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.
}
}
}
Po
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.
}
}
}
}
Zdarzenia AdListener
w AdView
Klasa BannerView::Listener
AdMob została zastąpiona dwiema odrębnymi klasami słuchaczy w pakiecie SDK do reklam mobilnych Google C++:
-
AdListener
śledzi cykl życia reklamy i zdarzenia interakcji użytkownika. -
AdViewBoundingBoxListener
jest wywoływany po zmianie rozmiaru lub przeniesieniuAdView
.
AdMob OnPresentationStateChanged
wywołanie zwrotne mapowania reklam mobilnych Google
Typ wyliczeniowy firebase::admob::BannerView::PresentationState
i metoda odbiornika OnPresentationStateChanged
nie są uwzględnione w nowym pakiecie SDK do reklam mobilnych Google w języku C++.
Poniżej przedstawiono alternatywne sposoby wykrywania zmian stanu prezentacji w cyklu życia AdView
:
firebase::admob::BannerView::Listener OnPresentationStateChanged zdarzenie | odpowiednik firebase::gma::AdListener |
---|---|
kPresentationStateHidden | Po wywołaniu AdListener::OnAdClosed lub gdy AdView::Hide() pomyślnie zakończy operację asynchroniczną |
kPresentationStateVisibleWithoutAd | Nic. Próba wywołania AdView::Show() niezaładowanego AdView zakończy się błędem. |
kPresentationStateVisibleWithAd | Po wywołaniu AdListener::OnAdOpened lub gdy AdView::Show() pomyślnie zakończy operację asynchroniczną z reklamą |
kPresentationStateOpenedPartialOverlay | Zapytanie o ramkę ograniczającą po wywołaniu AdListener::OnAdOpened() w celu określenia rozmiaru i położenia wyświetlanej reklamy. Alternatywnie możesz zapytać o pozycję AdView i AdSize i/lub monitorować obwiednię za pomocą AdViewBoundingBoxListener . |
kPresentationStateCoveringUI | Zobacz kPresentationStateOpenedPartialOverlay powyżej |
RewardedAd
jest teraz klasą
Przestarzały pakiet SDK Firebase AdMob C++ obsługiwał reklamy z nagrodą poprzez zbiór funkcji w przestrzeni nazw firebase::admob::rewarded_ad
. Funkcje te zostały połączone w nową klasę RewardedAd
, która wyświetla reklamy z interfejsem API podobnym do InterstitialAd
(patrz następna sekcja).
Słuchacze InterstitialAd
i RewardedAd
Zarówno reklamy pełnoekranowe, jak i reklamy z nagrodą są uważane za reklamy pełnoekranowe. Można zainstalować nowy FullScreenContentListener
, aby nasłuchiwać zdarzeń cyklu życia reklam dla tych typów reklam, oraz oddzielny moduł PaidEventListener
, aby śledzić, kiedy usługa AdMob uznała, że wystąpiło zdarzenie płatne.
RewardedAd
ma dodatkowego słuchacza do monitorowania zdarzeń związanych z nagrodami zdobytymi przez użytkowników.
Nowe metody wywołania zwrotnego reklam pełnoekranowych
Metody FullScreenContentListener | Metody PaidEventListener | Metody UserEarnedRewardListener |
---|---|---|
OnAdClicked | OnPaidEvent | OnUserEarnedReward |
OnAdDismissedFullScreenContent | ||
OnAdFailedToShowFullScreenContent | ||
OnAdImpression | ||
OnAdShowedFullScreenContent |
Metody zmienione/usunięte/zastąpione
W poniższej tabeli wymieniono konkretne metody zmienione w nowym pakiecie SDK do reklam mobilnych Google C++. Metody z wymienionymi parametrami pozostały, ale ich sygnatury uległy zmianie.
Klasa | API Firebase AdMob C++ SDK | Interfejs API pakietu SDK do reklam mobilnych Google C++ | Notatki |
---|---|---|---|
BannerView | MoveTo | AdView::SetPosition | |
presentation_state | REMOVED | Obsługiwane przez zdarzenia AdViewListener oraz AdView::Show i AdView::Hide przyszłe wyniki. | |
SetListener | AdView::SetAdListener AdView::SetBoundingBoxListener AdView::SetPaidEventListener | Nowy projekt detektora zwiększa dokładność wykrywania zdarzeń cyklu życia AdView . | |
Listener::OnPresentationStateChanged | REMOVED | Zobacz BannerView::SetListener powyżej. | |
Listener::OnBoundingBoxChanged | AdViewBoundingBoxListener::OnBoundingBoxChanged | ||
Reklama pełnoekranowa | Initialize(AdParent parent, const char* ad_unit_id) | Initialize(AdParent parent) | Parametr ad_unit_id jest teraz częścią operacji LoadAd . |
LoadAd(const AdRequest& request) | LoadAd(const char* ad_unit_id, const AdRequest& request) | ||
presentation_state | REMOVED | Wyliczenie presentation_state zostało usunięte. Użyj FullScreenContentListener . | |
SetListener | SetFullScreenContentListener SetPaidEventListener | ||
Destroy | REMOVED | Czyszczenie zasobów jest teraz częścią destruktora RewardedAd . | |
RewardedAd (formalnie RewardedVideoAd ) | Initialize | Initialize(AdParent parent) | AdParent został wcześniej przekazany do Show , ale teraz jest częścią inicjalizacji. |
presentation_state | REMOVED | Wyliczenie presentation_state zostało usunięte. Użyj FullScreenContentListener . | |
SetListener | SetFullScreenContentListener Show SetPaidEventListener | Odbiornik UserEarnedReward jest również definiowany podczas wyświetlania RewardedAd . Zobacz poniżej. | |
Show(AdParent parent) | Show(UserEarnedRewardListener* listener) |