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


Wraz z wersją 9.1.0 pakietu SDK Firebase C++ wprowadzamy nowy pakiet SDK do reklam mobilnych Google w C++.

Pakiet SDK do reklam mobilnych Google w C++ to nowy interfejs API, który uwzględnia główne zmiany powodujące niezgodność wsteczną wprowadzone w 2021 i 2022 r. w pakietach SDK Firebase AdMob w C++ na iOS i Androida. Obejmują one usunięcie wycofanych interfejsów API oraz nowy proces pracy z reklamami pełnoekranowymi.

Stary pakiet Firebase AdMob C++ SDK (firebase::admob) został oznaczony jako wycofany i nie będzie już aktualizowany ani poprawiany.

Nowy pakiet Google Mobile Ads C++ SDK (firebase::gma) i stary pakiet Firebase AdMob C++ SDK (firebase::admob) pozostaną częścią archiwów kompilacji Firebase C++ SDK w okresie wycofywania pakietu Firebase AdMob C++ SDK.

Usunięcie starszej wersji interfejsu API

Te interfejsy API zostały całkowicie usunięte z pakietu SDK do reklam mobilnych Google w C++.

RewardedVideoAd

Przestrzeń nazw RewardedVideoAd w AdMob została zastąpiona klasą RewardedAd. RewardedAd działa podobnie do InterstitialAd, ale zawiera dodatkowy element RewardedAdListener, który umożliwia otrzymywanie powiadomień o nagrodach za produkty.

NativeExpressAds

Funkcja NativeExpressAd w AdMob została już oznaczona jako wycofana w każdym pakiecie Firebase AdMob C++ SDK. Dlatego NativeExpressAd nie jest uwzględniony w nowym pakiecie SDK do reklam mobilnych Google w 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 C++ znajdują się w firebase::gmaprzestrzeni nazw. Starsza przestrzeń nazw firebase::admob została wycofana wraz z pakietem Firebase AdMob C++ SDK.

Struktura katalogu

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

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

Biblioteka

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

iOS

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

Android

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

Migracje klas, wyliczeń i struktur

W tabeli poniżej znajdziesz listę konkretnych klas, wyliczeń i struktur, które zostały zmienione lub usunięte. Oto podsumowanie:

  • Nazwa BannerView została zmieniona na AdView.
  • Element NativeAdExpressView został usunięty.
  • Przestrzeń nazw RewardedVideo jest zastępowana klasą RewardedAd.
  • Wyliczenie PresentationState i detektory zostały usunięte i zastąpione detektorami AdListenerFullScreenContent.
  • Te parametry są usuwane jako parametry konfiguracji poszczególnych reklam w AdRequests:

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

    Te parametry można teraz skonfigurować w RequestConfiguration, które jest ustawieniem globalnym wpływającym na wszystkie kolejne wczytania reklam.

Wycofano 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ęto
ChildDirectedTreatmentState RequestConfiguration::TagForChildDirectedTreatment
Gender (wyliczenie) Usunięto
InterstitialAd::Listener FullScreenContentListener
PaidEventListener
KeyValuePair Usunięto
NativeExpressAdView Usunięto
PollableRewardListener Usunięto
RewardItem AdReward
RewardedVideoAd (przestrzeń nazw) RewardedAd (zajęcia)
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 C++ natychmiast zwraca 2 wskaźniki stanu:

  • Opcjonalny parametr wyjściowy informuje, czy przed rozpoczęciem procesu inicjowania wystąpił błąd zależności.

  • Parametr zwracany jest odwołaniem do firebase::Future. Pole Future zawiera wyniki asynchronicznej inicjalizacji na urządzeniu adapterów mediacji.

Pakiet SDK do reklam mobilnych Google w C++ może być wywoływany w celu wczytywania reklam wyświetlanych przez AdMob, gdy tylko funkcja inicjowania zwróci wartość. Inne sieci reklamowe nie będą jednak wyświetlać reklam, dopóki nie zostanie w pełni zainicjowany odpowiedni adapter zapośredniczenia. Ten proces odbywa się asynchronicznie. Dlatego jeśli w aplikacji używasz zapośredniczenia reklam, zalecamy poczekanie na rozwiązanie problemu Future, 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 w AdSize w ramach AdView

AdSize zawiera teraz statyczne elementy członkowskie popularnych 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.

Dodano stałe AdSize do grupy plików firebase::gma::AdSize

AdSize::kBanner

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

AdSize::kFullBanner

Rozmiar pełnego banera IAB (Interactive Advertising Bureau) (468 x 60 pikseli niezależnych od gęstości)
AdSize::kLargeBanner Wyższa wersja formatu kBanner, zwykle 320 x 100

AdSize::kLeaderboard

Rozmiar reklamy typu długi baner zgodny ze standardem IAB (Interactive Advertising Bureau) (728 x 90 pikseli niezależnych od gęstości)
AdSize::kMediumRectangle Rozmiar reklamy w formie średniego prostokąta zgodny ze standardem IAB (Interactive Advertising Bureau) (300 x 250 pikseli niezależnych od gęstości)
Metody statyczne w klasie firebase::gma::AdSize, które pomagają tworzyć instancje klasy AdSize
GetLandscapeAnchoredAdaptiveBannerAdSize Tworzy AdSize o podanej szerokości i zoptymalizowanej przez Google wysokości, aby utworzyć baner reklamowy w orientacji poziomej.
GetPortraitAnchoredAdaptiveBannerAdSize Tworzy AdSize o podanej szerokości i zoptymalizowanej przez Google wysokości, aby utworzyć baner reklamowy w trybie pionowym.
GetCurrentOrientationAnchoredAdaptiveBannerAdSize Tworzy AdSize o podanej szerokości i zoptymalizowanej przez Google wysokości, aby utworzyć baner reklamowy o bieżącej orientacji.
GetInlineAdaptiveBannerAdSize Tworzy AdSize najbardziej odpowiedni dla banerów reklamowych, biorąc pod uwagę maksymalną wysokość.

Ten parametr AdSize umożliwia serwerom Google wybór optymalnego rozmiaru reklamy o wysokości mniejszej lub równej określonej maksymalnej wysokości.

GetLandscapeInlineAdaptiveBannerAdSize Tworzy element InlineAdaptive AdSize o podanej szerokości i wysokości urządzenia w orientacji poziomej.
GetPortraitInlineAdaptiveBannerAdSize Tworzy element InlineAdaptive AdSize o podanej szerokości i wysokości urządzenia w trybie pionowym.
GetCurrentOrientationInlineAdaptiveBannerAdSize Metoda pomocnicza zwracająca InlineAdaptive AdSize w przypadku 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, TagForChildDirectedTreatmentTagForUnderAgeOfConsent (wcześniej obsługiwane przez datę urodzenia) zostały usunięte z AdRequest i są teraz częścią globalnego RequestConfiguration. Aplikacje mogą wywoływać tę funkcję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 do wczytywania reklam, w tym słów kluczowych i opcjonalnego adresu URL treści.

Struktura w stylu języka C w AdMob została zastąpiona klasą z metodami, które zapewniają większy komfort użytkownikom podczas definiowania i dołączania informacji do różnych list.AdRequest

Oto najważniejsze AdRequest zmiany:

  • Dodatki są teraz powiązane z nazwą klasy adaptera mediacji. Dodatki wysyłane do usługi AdMob powinny używać domyślnej nazwy klasy zdefiniowanej poniżej.
  • Podczas wysyłania żądania reklamy aplikacje mogą przekazywać adres URL treści, które wyświetlają. Umożliwia to kierowanie na słowa kluczowe, aby 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

LoadAd zwraca teraz Future zawierający obiekt AdResult dla 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 niepowodzenia element AdResult zawiera obiekt AdError z informacjami o problemie na poziomie usługi, w tym kod błędu, komunikat o błędzie i ciągi 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.
      }
    }
  }
}

AdListener wydarzenia w AdView

Klasa BannerView::Listener w AdMob została zastąpiona w pakiecie SDK do reklam mobilnych Google w C++ 2 osobnymi klasami odbiorników:

  • AdListener śledzi zdarzenia związane z cyklem życia reklamy i interakcjami użytkowników.
  • AdViewBoundingBoxListener jest wywoływana, gdy rozmiar elementu AdView ulegnie zmianie lub gdy zostanie on przeniesiony.

Mapowania OnPresentationStateChangedwywołań zwrotnychGoogle Mobile Ads AdMob

firebase::admob::BannerView::PresentationStateTyp wyliczeniowy iOnPresentationStateChanged metoda odbiornika 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 odpowiednik
kPresentationStateHidden Gdy wywoływana jest funkcja AdListener::OnAdClosed lub gdy funkcja AdView::Hide() zakończy działanie asynchroniczne.
kPresentationStateVisibleWithoutAd Brak. Próba wywołania AdView::Show() niezaładowanego AdView spowoduje błąd.
kPresentationStateVisibleWithAd Gdy wywoływana jest funkcja AdListener::OnAdOpened lub gdy funkcja AdView::Show() zakończy działanie asynchroniczne z reklamą.
kPresentationStateOpenedPartialOverlay Po wywołaniu funkcji AdListener::OnAdOpened() możesz wysłać zapytanie o ramkę ograniczającą, aby określić rozmiar i położenie wyświetlanej reklamy. Możesz też wysłać zapytanie o pozycję AdViewAdSize lub monitorować pole ograniczające za pomocą AdViewBoundingBoxListener.
kPresentationStateCoveringUI Patrz kPresentationStateOpenedPartialOverlay powyżej

RewardedAd jest teraz zajęciami

Wycofany pakiet Firebase AdMob C++ SDK ułatwiał wyświetlanie reklam z nagrodą za pomocą zbioru funkcji w przestrzeni nazw firebase::admob::rewarded_ad. Te funkcje 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żesz zainstalować nowy FullScreenContentListener, aby nasłuchiwać zdarzeń związanych z cyklem życia reklamy w przypadku tych typów reklam, a także zainstalować osobny PaidEventListener, aby śledzić, kiedy usługa AdMob uzna, że nastąpiło płatne zdarzenie.

RewardedAd ma dodatkowy detektor do monitorowania zdarzeń związanych z nagrodami uzyskanymi przez użytkowników.

Nowe metody wywołania zwrotnego reklam pełnoekranowych

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

Metody zmienione, usunięte lub zastąpione

W tabeli poniżej znajdziesz listę konkretnych metod, które zostały zmienione w nowym pakiecie SDK do reklam mobilnych Google w C++. Metody z wymienionymi parametrami pozostają, ale ich sygnatury uległy zmianie.

Klasa Firebase AdMob C++ SDK API Interfejs API pakietu SDK do reklam mobilnych Google w C++ Notes
BannerView MoveTo AdView::SetPosition
presentation_state Usunięto Obsługiwane przez zdarzenia AdViewListener oraz AdView::ShowAdView::Hide w przyszłości.
SetListener AdView::SetAdListener
AdView::SetBoundingBoxListener
AdView::SetPaidEventListener
Nowa konstrukcja detektora zwiększa dokładność wykrywania zdarzeń cyklu życiaAdView.
Listener::OnPresentationStateChanged Usunięto Patrz 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ęto Wyliczenie presentation_state zostało usunięte. Użyj FullScreenContentListener.
SetListener SetFullScreenContentListener
SetPaidEventListener
Destroy Usunięto Czyszczenie zasobów jest teraz częścią destruktora RewardedAd.
RewardedAd
(formalnie
RewardedVideoAd)
Initialize Initialize(AdParent parent) Wcześniej wartość AdParent była przekazywana do Show, ale teraz jest częścią inicjowania.
presentation_state Usunięto Wyliczenie presentation_state zostało usunięte. Użyj FullScreenContentListener.
SetListener SetFullScreenContentListener
SetPaidEventListener Show
UserEarnedReward słuchacza definiuje się również podczas wyświetlania RewardedAd. Szczegółowe informacje znajdziesz poniżej.
Show(AdParent parent) Show(UserEarnedRewardListener* listener)