Przejdź na nowy pakiet SDK do reklam mobilnych Google w języku C++


Wraz z wydaniem pakietu SDK Firebase C++ w wersji 9.1.0 wprowadzono nowy pakiet SDK do reklam mobilnych Google w C++.

Pakiet SDK do reklam mobilnych Google w języku C++ to nowy interfejs API, który uwzględnia najważniejsze zmiany wprowadzone w pakietach SDK Firebase w wersji C++ w wersji C++ na iOS i Androida w latach 2021–2022, w tym usunięcie wycofanych interfejsów API i nowy proces obsługi reklam pełnoekranowych.

Stary pakiet Firebase AdMob C++ SDK (firebase::admob) został oznaczony jako wycofany i nie będzie już otrzymywać żadnych aktualizacji ani poprawek błędów.

W okresie wycofywania pakietu Firebase AdMob C++ SDK nowy pakiet SDK do reklam mobilnych Google (firebase::gma) i stary pakiet SDK do reklam mobilnych Google (firebase::admob) pozostaną w archiwach kompilacji pakietu SDK Firebase C++.

Usunięcie starszej wersji interfejsu API

Poniższe interfejsy API zostały usunięte z pakietu SDK C++ do reklam mobilnych Google w całości.

RewardedVideoAd

Przestrzeń nazw RewardedVideoAd w AdMob została zastąpiona klasą RewardedAd. RewardedAd działa podobnie jak InterstitialAd, ale zawiera dodatkowe RewardedAdListener do otrzymywania powiadomień o nagrodach.

NativeExpressAds

Pakiet NativeExpressAd AdMob został już oznaczony jako wycofany w każdym pakiecie Firebase AdMob C++ SDK. Dlatego usługa NativeExpressAd nie została uwzględniona w nowym pakiecie SDK do reklam mobilnych Google w języku C++.

Zmiana przestrzeni nazw pakietu SDK

Pakiet 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 w języku C++ znajdują się w przestrzeni nazw firebase::gma. Starsza przestrzeń nazw firebase::admob została wycofana wraz z pakietem Firebase AdMob C++ SDK.

Struktura katalogów

Pliki nagłówka zostały przeniesione do nowego katalogu w archiwum kompilacji:

Wycofany pakiet Firebase AdMob C++ SDK Nowy pakiet SDK do reklam mobilnych Google w języku C++
include/firebase/admob include/firebase/gma

Biblioteka

Pakiet SDK Firebase AdMob C++ będzie udostępniany jako biblioteka statyczna w archiwum pakietu SDK Firebase C++:

iOS

Wycofany pakiet Firebase AdMob C++ SDK Nowy pakiet SDK do reklam mobilnych Google w języku C++
firebase_admob.xcframework firebase_gma.xcframework

Android

Wycofany pakiet Firebase AdMob C++ SDK Nowy pakiet SDK do reklam mobilnych Google w C++
libfirebase_admob.a libfirebase_gma.a

Migracje klas, typów wyliczeń i struktur

Tabela poniżej zawiera listę konkretnych klas, typów wyliczenia i struktur, które uległy zmianie lub zostały usunięte. Oto podsumowanie:

  • Nazwa BannerView została zmieniona na AdView.
  • Usunięto NativeAdExpressView.
  • Przestrzeń nazw RewardedVideo została zastąpiona klasą RewardedAd.
  • Wyliczenie i detektory PresentationState zostaną usunięte i zastąpione detektorami AdListener i FullScreenContent.
  • Te parametry są usuwane jako parametry konfiguracji poszczególnych reklam w narzędziu AdRequests:

    • konfiguracja identyfikatorów urządzeń testowych.
    • kierowanie reklam na podstawie wieku.

    Zamiast tego parametry te można teraz skonfigurować w sekcji RequestConfiguration, która jest ustawieniem globalnym wpływającym na wszystkie kolejne wczytywanie reklam.

Wycofane firebase::admob namespace Nowy firebase::gma namespace
AdSizeType (wyliczenie) AdSize::Type (wyliczenie)
BannerView AdView
BannerView::Listener AdListener
AdViewBoundingBoxListener
PaidEventListener
BannerView::Position AdView::Position
BannerView::PresentationState Usunięta
ChildDirectedTreatmentState RequestConfiguration::TagForChildDirectedTreatment
Gender (wyliczenie) Usunięta
InterstitialAd::Listener FullScreenContentListener
PaidEventListener
KeyValuePair Usunięto
NativeExpressAdView Usunięto
PollableRewardListener Usunięto
RewardItem AdReward
RewardedVideoAd (przestrzeń nazw) RewardedAd (klasa)
RewardedVideoAd::Listener FullScreenContentListener
PaidEventListener
UserEarnedRewardListener
AdMobError (wyliczenie) AdErrorCode (wyliczenie)
RewardItem AdReward

Inicjowanie pakietu SDK

Każda funkcja inicjowania pakietu SDK do reklam mobilnych Google w języku C++ od razu zwraca 2 wskaźniki stanu:

  • Opcjonalny parametr out określa, czy przed rozpoczęciem procesu inicjowania wystąpił błąd zależności.

  • Parametr return to odwołanie do firebase::Future. Futurezawiera wyniki asynchronicznej inicjalizacji pośredników mediów na urządzeniu.

Pakiet SDK do reklam mobilnych Google w języku C++ może być wywoływany w celu wczytania reklam obsługiwanych przez AdMob, gdy tylko funkcja inicjowania zwróci wartość. Inne sieci reklamowe nie będą jednak wyświetlać reklam, dopóki odpowiedni adapter zapośredniczenia nie zostanie w pełni zainicjowany. Ten proces odbywa się asynchronicznie. Jeśli korzystasz w swojej aplikacji z zapośredniczenia reklam, poczekaj, aż Future zakończy działanie, zanim spróbujesz wczytać jakiekolwiek reklamy.

Przed

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 wartości AdSize w sprawie AdView

AdSize zawiera teraz statyczne elementy typowych rozmiarów banerów reklamowych i obsługuje rozmiary reklam AnchorAdaptiveInlineAdaptive, które mają dynamiczną wysokość zależną od podanej szerokości i bieżącej orientacji ekranu.

Do firebase::gma::AdSize dodano statyczne stałe AdSize

AdSize::kBanner

Rozmiar banera reklamowego MMA (Mobile Marketing Association) (320 x 50 pikseli niezależnych od gęstości)

AdSize::kFullBanner

Pełny rozmiar banera reklamowego organizacji Interactive Advertising Bureau (IAB) (468 x 60 pikseli niezależnych od gęstości)
AdSize::kLargeBanner Wyższa wersja atrybutu kBanner, zwykle 320 x 100

AdSize::kLeaderboard

Rozmiar reklamy typu długi baner zgodny ze standardem Interactive Advertising Bureau (IAB) (728 x 90 pikseli niezależnych od gęstości)
AdSize::kMediumRectangle Rozmiar reklamy typu średni prostokąt zgodny ze standardem Interactive Advertising Bureau (IAB) (300 x 250 pikseli niezależnie od gęstości pikseli)
Metody statyczne w firebase::gma::AdSize, które pomagają tworzyć instancje AdSize
GetLandscapeAnchoredAdaptiveBannerAdSize Tworzy AdSize o podanej szerokości i wysokości zoptymalizowanej przez Google w celu utworzenia banera reklamowego w orientacji poziomej.
GetPortraitAnchoredAdaptiveBannerAdSize Tworzy AdSize o podanej szerokości i optymalnej wysokości zoptymalizowanej przez Google, aby utworzyć baner reklamowy w trybie pionowym
GetCurrentOrientationAnchoredAdaptiveBannerAdSize Tworzy AdSize o określonej szerokości i wysokości zoptymalizowanej przez Google, aby utworzyć baner reklamowy w zgodnie z bieżącą orientacją
GetInlineAdaptiveBannerAdSize Tworzy AdSize najlepiej dopasowane do banerów reklamowych przy maksymalnej wysokości

Ta wartość AdSize umożliwia serwerom Google wybranie optymalnego rozmiaru reklamy o wysokości mniejszej od określonej maksymalnej wysokości lub jej równej.

GetLandscapeInlineAdaptiveBannerAdSize Tworzy element AdSize (InlineAdaptive) o podanej szerokości i wysokości urządzenia w orientacji poziomej
GetPortraitInlineAdaptiveBannerAdSize Tworzy InlineAdaptive AdSize o zadanej szerokości i wysokości w orientacji pionowej urządzenia.
GetCurrentOrientationInlineAdaptiveBannerAdSize Metoda ułatwiająca zwracanie wartości InlineAdaptive AdSize w zależności od bieżącej orientacji interfejsu przy określonej szerokości.

Przed

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 przez datę urodzenia) zostały usunięte z usługi AdRequest i są teraz częścią globalnego systemu RequestConfiguration. Aplikacje mogą wywoływać firebase::gma::SetRequestConfiguration() na wczesnym etapie cyklu życia aplikacji, aby skonfigurować te wartości. Wszystkie kolejne operacje wczytywania reklam będą uwzględniać te ustawienia po ich skonfigurowaniu.

firebase::gma::AdRequest nadal istnieje, ponieważ dostarcza informacji kontekstowych dotyczących wczytywania reklam, w tym słów kluczowych i opcjonalnych adresów URL treści.

Struktura AdRequest w stylu C w AdMob została zastąpiona klasą z metodami, które zapewniają większą wygodę podczas definiowania i dodawania różnych list informacji.

Oto najważniejsze zmiany:AdRequest

  • Elementy dodatkowe są teraz powiązane z nazwą klasy pośrednika do mediów. Dodatkowe dane wysyłane do usługi AdMob powinny używać domyślnej nazwy klasy zdefiniowanej poniżej.
  • Żądając reklamy, aplikacje mogą przekazać adres URL treści, którą wyświetlają. Dzięki temu kierowanie na słowa kluczowe może dopasowywać reklamę do innych wyświetlanych treści.

Przed

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

Funkcja LoadAd zwraca teraz obiekt Future zawierający obiekt AdResult w przypadku wszystkich typów reklam: AdView, InterstitialAdRewardedAd. Metoda AdResult::is_successful zwraca wartość true, jeśli żądanie reklamy zostało zrealizowane, lub false, jeśli nie.

W przypadku błędu AdResult zawiera obiekt AdError z informacjami o poziomie usługi dotyczącymi problemu, w tym kodem błędu, komunikatem o błędzie i ciągami znaków domeny.

Przed

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 w pakiecie SDK do reklam mobilnych Google w języku C++ dwiema osobnymi klasami detektorów:

  • AdListener śledzi cykl życia reklamy i zdarzenia związane z interakcją z użytkownikiem.
  • AdViewBoundingBoxListener jest wywoływany, gdy rozmiar elementu AdView ulegnie zmianie lub zostanie przeniesiony.

Mapowania OnPresentationStateChanged wywołania zwrotnego Google Mobile Ads AdMob

Typ enumeracji firebase::admob::BannerView::PresentationState i metoda listenera OnPresentationStateChanged nie są uwzględnione w nowym pakiecie SDK do reklam mobilnych Google w C++.

Oto alternatywne sposoby wykrywania zmian stanu prezentacji w cyklu życia AdView:

firebase::admob::BannerView::Listener OnPresentationStateChanged zdarzenie firebase::gma::AdListener partner
kPresentationStateHidden Gdy wywoływana jest funkcja AdListener::OnAdClosed lub gdy asynchroniczna operacja AdView::Hide() zakończy się pomyślnie.
kPresentationStateVisibleWithoutAd Brak. Próba wywołania AdView::Show() niewczytanego AdView spowoduje błąd.
kPresentationStateVisibleWithAd Po wywołaniu funkcji AdListener::OnAdOpened lub po pomyślnym zakończeniu operacji asynchronicznej AdView::Show() z reklamą
kPresentationStateOpenedPartialOverlay Wyślij zapytanie do ramki ograniczającej po wywołaniu funkcji AdListener::OnAdOpened(), aby określić rozmiar i pozycję wyświetlanej reklamy. Możesz też sprawdzić pozycję AdViewAdSize lub monitorować prostokąt ograniczający za pomocą funkcji AdViewBoundingBoxListener.
kPresentationStateCoveringUI Zobacz kPresentationStateOpenedPartialOverlay powyżej

RewardedAd to teraz zajęcia

Wycofany pakiet Firebase AdMob C++ SDK umożliwiał wyświetlanie reklam z nagrodą za pomocą zbioru funkcji w przestrzeni nazw firebase::admob::rewarded_ad. Te funkcje zostały połączone w nowej klasie RewardedAd, która wyświetla reklamy z interfejsem API podobnym do interfejsu InterstitialAd (patrz następna sekcja).

Detektory: InterstitialAd i RewardedAd

Zarówno reklamy pełnoekranowe, jak i reklamy z nagrodą są uważane za reklamy pełnoekranowe. Możesz zainstalować nowy tag FullScreenContentListener, który będzie wykrywać zdarzenia związane z cyklem życia reklamy w przypadku tych typów reklam, oraz oddzielny tag PaidEventListener, który będzie śledzić, kiedy usługa AdMob uznała, że nastąpiło zdarzenie płatne.

RewardedAd ma dodatkowy detektor, który monitoruje zdarzenia związane z nagrodami zdobytymi przez użytkowników.

Nowe metody wywołań zwrotnych reklam pełnoekranowych

FullScreenContentListener metod PaidEventListener metody UserEarnedRewardListener metody
OnAdClicked OnPaidEvent OnUserEarnedReward
OnAdDismissedFullScreenContent
OnAdFailedToShowFullScreenContent
OnAdImpression
OnAdShowedFullScreenContent

Metody zostały zmienione/usunięte/zastąpione

Tabela poniżej zawiera listę metod, które zostały zmienione w nowym pakiecie Google Mobile Ads C++ SDK. Metody z wymienionymi parametrami pozostają, ale ich podpisy uległy zmianie.

Klasa Interfejs API Firebase AdMob C++ SDK Interfejs Google Mobile Ads C++ SDK API Uwagi
BannerView MoveTo AdView::SetPosition
presentation_state Usunięto Obsługiwane przez zdarzenia AdViewListener oraz przyszłe wyniki AdView::Show i AdView::Hide.
SetListener AdView::SetAdListener
AdView::SetBoundingBoxListener
AdView::SetPaidEventListener
Nowy projekt detektorów zwiększa dokładność wykrywania zdarzeń cyklu życia.AdView
Listener::OnPresentationStateChanged Usunięto Zobacz BannerView::SetListener powyżej.
Listener::OnBoundingBoxChanged AdViewBoundingBoxListener::OnBoundingBoxChanged
InterstitialAd 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 Usunięta Wyliczenie presentation_state zostało usunięte. Użyj formatu FullScreenContentListener.
SetListener SetFullScreenContentListener
SetPaidEventListener
Destroy Usunięto Czyszczenie zasobów jest teraz częścią destruktora RewardedAd.
RewardedAd
(formalnie
RewardedVideoAd)
Initialize Initialize(AdParent parent) Argument AdParent był wcześniej przekazywany do funkcji Show, ale teraz jest częścią funkcji inicjalizacji.
presentation_state Usunięto Usunięto wyliczenie presentation_state. Użyj formatu FullScreenContentListener.
SetListener SetFullScreenContentListener
SetPaidEventListener Show
Słuchacz UserEarnedReward jest również definiowany podczas wyświetlania RewardedAd. Szczegółowe informacje znajdziesz poniżej.
Show(AdParent parent) Show(UserEarnedRewardListener* listener)