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 udostępniono nowy pakiet SDK do reklam mobilnych Google w C++.

Pakiet SDK do reklam mobilnych Google w C++ to nowa wersja interfejsu API, która zawiera istotne zmiany wprowadzone w pakietach SDK Firebase AdMob w C++ na iOS i Androida w latach 2021 i 2022, m.in. usunięcie przestarzałych interfejsów API oraz nowy schemat działania w przypadku typów 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

Z pakietu SDK do reklam mobilnych Google w języku C++ zostały całkowicie usunięte te interfejsy API:

RewardedVideoAd

Przestrzeń nazw RewardedVideoAd w AdMob została zastąpiona klasą RewardedAd. RewardedAd działa podobnie do InterstitialAd, ale zawiera dodatkowy parametr RewardedAdListener, aby otrzymywać powiadomienia o nagrodach w postaci przedmiotów.

NativeExpressAds

W pakiecie Firebase AdMob C++ SDK funkcja NativeExpressAd została już oznaczona jako wycofana. 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 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 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 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.
  • Element NativeAdExpressView został usunięty.
  • Przestrzeń nazw RewardedVideo jest zastępowana klasą RewardedAd.
  • Wyliczenie PresentationState i odpowiadające mu detektory zostały usunięte i zastąpione detektorami AdListenerFullScreenContent.
  • W ustawieniach konfiguracji reklamy AdRequests usunęliśmy te parametry:

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

    Zamiast tego te parametry 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ę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 (klasa)
RewardedVideoAd::Listener FullScreenContentListener
PaidEventListener
UserEarnedRewardListener
AdMobError (wyliczenie) AdErrorCode (wyliczenie)
RewardItem AdReward

Inicjowanie pakietu SDK

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

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

  • Parametr return to odwołanie do firebase::Future. Wartość Future zawiera wyniki asynchronicznej inicjalizacji adapterów pośrednictwa 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 zwróci on funkcję inicjowania, ale inne sieci reklamowe nie będą wyświetlać reklam, dopóki nie zostanie w pełni zainicjowany odpowiedni adapter zapośredniczenia. Ten proces odbywa się asynchronicznie. Jeśli więc w swojej aplikacji korzystasz z pośrednictwa reklam, przed próbą załadowania reklam zaczekaj, aż Future zostanie rozwiązany.

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 parametry AdSize w ramach 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 Mobile Marketing Association (MMA) (320 x 50 pikseli niezależnych od rozdzielczości)

AdSize::kFullBanner

Rozmiar reklamy typu pełny baner według Interactive Advertising Bureau (IAB) (468 x 60 pikseli niezależnych od gęstości)
AdSize::kLargeBanner Wyższa wersja zasobu kBanner, zwykle 320 x 100

AdSize::kLeaderboard

Rozmiar reklamy typu długi baner zgodny ze standardem IAB (728 x 90 pikseli niezależnych od gęstości)
AdSize::kMediumRectangle Rozmiar reklamy ś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, aby utworzyć baner reklamowy w orientacji poziomej
GetPortraitAnchoredAdaptiveBannerAdSize Tworzy AdSize o podanej szerokości i optymalnej dla Google wysokości, aby utworzyć baner reklamowy w orientacji pionowej
GetCurrentOrientationAnchoredAdaptiveBannerAdSize Tworzy AdSize o określonej szerokości i wysokości zoptymalizowanej przez Google, aby utworzyć baner reklamowy w zgodnie z bieżącym
GetInlineAdaptiveBannerAdSize Tworzy AdSize, który jest najbardziej odpowiedni dla banerów reklamowych z zadaną maksymalną wysokością

Ta AdSize pozwala serwerom Google wybrać optymalny rozmiar reklamy o wysokości nieprzekraczającej określonej maksymalnej wysokości.

GetLandscapeInlineAdaptiveBannerAdSize Tworzy InlineAdaptive AdSize o zadanej szerokości i wysokości w orientacji poziomej urządzenia.
GetPortraitInlineAdaptiveBannerAdSize Tworzy InlineAdaptive AdSize o zadanej szerokości i wysokości w orientacji pionowej urządzenia.
GetCurrentOrientationInlineAdaptiveBannerAdSize Wygodna metoda zwracania 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 TagForChildDirectedTreatmentTagForUnderAgeOfConsent (wcześniej obsługiwane przez datę urodzenia) zostały usunięte z poziomów AdRequest i są teraz częścią globalnego poziomu RequestConfiguration. Aplikacje mogą wywoływać firebase::gma::SetRequestConfiguration() na początku 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ż zawiera informacje kontekstowe dotyczące wczytywania reklam, w tym słowa kluczowe i opcjonalny adres URL treści.

Struktura AdRequest 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.
  • Aplikacje mogą przekazywać adres URL treści, które wyświetlają, gdy wysyłają żądanie reklamy. 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 spełnione, lub false, jeśli nie.

W przypadku niepowodzenia obiekt 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 zdarzeń w AdView

Klasa BannerView::Listener w pakiecie AdMob została zastąpiona w pakiecie SDK do reklam mobilnych Google w C++ przez 2 różne klasy listenera:

  • 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 on przeniesiony.

Mapowania wywołań zwrotnych OnPresentationStateChanged AdMob Google Mobile Ads

Typ enumeracji firebase::admob::BannerView::PresentationState i metoda odbiornika OnPresentationStateChanged nie są uwzględnione w nowym pakiecie SDK do reklam mobilnych Google w języku 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 Gdy wywoływana jest funkcja AdListener::OnAdOpened lub gdy funkcja AdView::Show() zakończyła asynchroniczną operację z reklamą
kPresentationStateOpenedPartialOverlay Aby określić rozmiar i położenie wyświetlanej reklamy, prześlij zapytanie do elementu ograniczającego po wywołaniu AdListener::OnAdOpened(). Możesz też zapytać o pozycję AdViewAdSize lub monitorować prostokąt ograniczający za pomocą AdViewBoundingBoxListener.
kPresentationStateCoveringUI Zobacz kPresentationStateOpenedPartialOverlay powyżej

RewardedAd jest teraz zajęciem

Wycofany pakiet SDK Firebase AdMob C++ 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).

InterstitialAdRewardedAd

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łania zwrotnego reklam pełnoekranowych

FullScreenContentListener metody 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 Pakiet Firebase AdMob C++ SDK API 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ę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) Argument AdParent był wcześniej przekazywany do funkcji Show, ale teraz jest częścią inicjalizacji.
presentation_state Usunięto Wyliczenie presentation_state zostało usunięte. Użyj 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)