Yeni Google Mobile Ads C++ SDK'sına geçin


Firebase C++ SDK'sının 9.1.0 sürümüyle birlikte yeni bir Google Mobile Ads C++ SDK'sı kullanıma sunuldu.

Google Mobile Ads C++ SDK'sı, 2021 ve 2022'de iOS ve Android için Firebase AdMob C++ SDK'larında yapılan önemli zarar veren değişiklikleri içeren yeni bir API yüzeyidir. Bu değişiklikler arasında, desteği sonlandırılmış API'lerin kaldırılması ve tam ekran reklam türleriyle çalışırken yeni bir akış yer alır.

Eski Firebase AdMob C++ SDK'sı (firebase::admob) desteği sonlandırılmış olarak işaretlendi ve artık güncelleme veya hata düzeltmesi almayacak.

Hem yeni Google Mobile Ads C++ SDK'sı (firebase::gma) hem de eski Firebase AdMob C++ SDK'sı (firebase::admob), Firebase AdMob C++ SDK'sının desteğinin sonlandırılma sürecinde Firebase C++ SDK'sının derleme arşivlerinde yer almaya devam edecek.

Eski API'nin kaldırılması

Aşağıdaki API'ler, Google Mobile Ads C++ SDK'sından tamamen kaldırılmıştır.

RewardedVideoAd

AdMob'un RewardedVideoAd ad alanı, RewardedAd sınıfıyla değiştirildi. RewardedAd, InterstitialAd ile benzer şekilde çalışır ancak öğe ödülleriyle ilgili bildirim almak için ek bir RewardedAdListener içerir.

NativeExpressAds

AdMob'un NativeExpressAd sınıfı, her Firebase AdMob C++ SDK'sında desteği sonlandırılmış olarak işaretlenmişti. Bu nedenle NativeExpressAd, yeni Google Mobile Ads C++ SDK'sına dahil edilmemiştir.

SDK ad alanı değişikliği

SDK yeni bir ad alanına taşındı ve yeni bir dizin yapısına sahip:

Ad alanı firebase::gma

Yeni Google Mobile Ads C++ SDK'sının kaynakları firebase::gma ad alanındadır. Eski firebase::admob ad alanı, Firebase AdMob C++ SDK'sı ile birlikte kullanımdan kaldırıldı.

Dizin yapısı

Üstbilgi dosyaları, derleme arşivindeki yeni bir dizine taşındı:

Desteği sonlandırılmış Firebase AdMob C++ SDK'sı Yeni Google Mobile Ads C++ SDK'sı
include/firebase/admob include/firebase/gma

Kitaplık

Firebase AdMob C++ SDK'sı, Firebase C++ SDK derleme arşivinde statik bir kitaplık olarak sağlanır:

iOS

Desteği sonlandırılmış Firebase AdMob C++ SDK'sı Yeni Google Mobile Ads C++ SDK'sı
firebase_admob.xcframework firebase_gma.xcframework

Android

Desteği sonlandırılmış Firebase AdMob C++ SDK'sı Yeni Google Mobile Ads C++ SDK'sı
libfirebase_admob.a libfirebase_gma.a

Sınıf, enum ve struct taşıma işlemleri

Aşağıdaki tabloda, değiştirilen veya kaldırılan belirli sınıflar, enum'lar ve yapılar listelenmiştir. Aşağıda bir özet verilmiştir:

  • BannerView, AdView olarak yeniden adlandırıldı.
  • NativeAdExpressView kaldırıldı.
  • RewardedVideo ad alanı, RewardedAd sınıfıyla değiştirildi.
  • PresentationState numaralandırması ve işleyicileri kaldırıldı ve bunların yerine AdListener ve FullScreenContent işleyicileri getirildi.
  • Aşağıdaki parametreler, AdRequests içinde reklam başına yapılandırma parametreleri olarak kaldırılır:

    • test cihazı kimliklerinin yapılandırması
    • reklamların yaşa göre hedeflenmesi

    Bu parametreler artık RequestConfiguration üzerinden yapılandırılabilir. Bu, sonraki tüm reklam yüklemelerini etkileyecek genel bir ayardır.

firebase::admob namespace kullanımdan kaldırıldı Yeni firebase::gma namespace
AdSizeType (enum) AdSize::Type (enum)
BannerView AdView
BannerView::Listener AdListener
AdViewBoundingBoxListener
PaidEventListener
BannerView::Position AdView::Position
BannerView::PresentationState Kaldırıldı
ChildDirectedTreatmentState RequestConfiguration::TagForChildDirectedTreatment
Gender (enum) Kaldırıldı
InterstitialAd::Listener FullScreenContentListener
PaidEventListener
KeyValuePair Kaldırıldı
NativeExpressAdView Kaldırıldı
PollableRewardListener Kaldırıldı
RewardItem AdReward
RewardedVideoAd (ad alanı) RewardedAd (sınıf)
RewardedVideoAd::Listener FullScreenContentListener
PaidEventListener
UserEarnedRewardListener
AdMobError (enum) AdErrorCode (enum)
RewardItem AdReward

SDK'yı başlatma

Her Google Mobile Ads C++ SDK'sı başlatma işlevi, hemen iki durum göstergesi döndürür:

  • İsteğe bağlı bir çıkış parametresi, başlatma işlemi başlamadan önce bir bağımlılık hatası oluşup oluşmadığını belirtir.

  • Döndürülen parametre, bir firebase::Future referansıdır. Future, cihazdaki uyumlulaştırma bağdaştırıcılarının eşzamansız başlatma işleminin sonuçlarını içerir.

Google Mobile Ads C++ SDK'sı, ilk kullanıma hazırlama işlevi döndürülür döndürülmez AdMob tarafından sunulan reklamları yüklemek için çağrılabilir. Ancak diğer reklam ağları, ilgili uyumlulaştırma bağdaştırıcıları tamamen ilk kullanıma hazırlanana kadar reklam yayınlamaz. Bu işlem eşzamansız olarak gerçekleşir. Bu nedenle, uygulamanızda reklam uyumlulaştırması kullanıyorsanız reklam yüklemeye çalışmadan önce Future işleminin tamamlanmasını beklemenizi öneririz.

Önce

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;
}

Sonra

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.
}

AdView içinde AdSize olarak değişir

AdSize artık yaygın banner reklam boyutlarının statik üyelerini içeriyor ve verilen genişliğe ve ekranın mevcut yönüne göre dinamik yüksekliğe sahip AnchorAdaptive ve InlineAdaptive reklam boyutlarını destekliyor.

firebase::gma::AdSize öğesine statik AdSize sabitleri eklendi

AdSize::kBanner

Mobil Pazarlama Birliği (MMA) banner reklam boyutu (320x50 yoğunluktan bağımsız piksel)

AdSize::kFullBanner

Interactive Advertising Bureau (IAB) tam banner reklam boyutu (468x60 yoğunluktan bağımsız piksel)
AdSize::kLargeBanner kBanner boyutunun daha uzun versiyonu, genellikle 320x100

AdSize::kLeaderboard

Interactive Advertising Bureau (IAB) leaderboard reklam boyutu (728x90 yoğunluktan bağımsız piksel)
AdSize::kMediumRectangle Interactive Advertising Bureau (IAB) orta boy dikdörtgen reklam boyutu (300x250 yoğunluktan bağımsız piksel)
AdSize örnekleri oluşturmaya yardımcı olan firebase::gma::AdSize içindeki statik yöntemler
GetLandscapeAnchoredAdaptiveBannerAdSize Yatay modda banner reklam oluşturmak için belirtilen genişlikte ve Google tarafından optimize edilmiş yükseklikte bir AdSize oluşturur.
GetPortraitAnchoredAdaptiveBannerAdSize Belirtilen genişlikte ve Google tarafından optimize edilmiş yükseklikte bir AdSize oluşturarak portre modunda banner reklam oluşturur.
GetCurrentOrientationAnchoredAdaptiveBannerAdSize Geçerli yönü dikkate alarak banner reklam oluşturmak için belirtilen genişlikte ve Google tarafından optimize edilmiş yükseklikte bir AdSize oluşturur.
GetInlineAdaptiveBannerAdSize Maksimum yükseklik verildiğinde banner reklamlar için en uygun AdSize değerini oluşturur.

Bu AdSize, Google sunucularının, belirtilen maksimum yüksekliğe eşit veya bu yükseklikten daha az olan optimum bir reklam boyutu seçmesine olanak tanır.

GetLandscapeInlineAdaptiveBannerAdSize Belirtilen genişlik ve cihazın yatay yüksekliğiyle bir InlineAdaptive AdSize oluşturur.
GetPortraitInlineAdaptiveBannerAdSize Belirtilen genişlik ve cihazın dikey yüksekliğiyle bir InlineAdaptive AdSize oluşturur.
GetCurrentOrientationInlineAdaptiveBannerAdSize Belirli bir genişlik için geçerli arayüz yönü verildiğinde InlineAdaptive AdSize döndüren kullanışlı bir yöntem.

Önce

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);

Sonra

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 ve genel yapılandırma

Test cihazı kimlikleri, TagForChildDirectedTreatment ve TagForUnderAgeOfConsent (daha önce doğum günü tarafından işleniyordu) AdRequest uygulamasından kaldırıldı ve artık global bir RequestConfiguration uygulamasının parçası. Uygulamalar, bu değerleri yapılandırmak için uygulama yaşam döngüsünün başlarında firebase::gma::SetRequestConfiguration() yöntemini çağırabilir. Sonraki tüm reklam yükleme işlemleri, yapılandırıldıktan sonra bu ayarları dikkate alır.

firebase::gma::AdRequest, anahtar kelimeler ve isteğe bağlı bir içerik URL'si de dahil olmak üzere reklam yüklemeyle ilgili bağlamsal bilgiler sağladığı için hâlâ mevcuttur.

AdMob'un AdRequest C stili yapısı, çeşitli bilgi listelerini tanımlarken ve bunlara ekleme yaparken daha iyi bir kullanıcı deneyimi sunan yöntemlere sahip bir sınıfla değiştirildi.

AdRequest ile ilgili önemli değişiklikler şunlardır:

  • Ekstralar artık bir uyumlulaştırma bağdaştırıcısı sınıf adıyla ilişkilendirilir. AdMob hizmetine gönderilen ekstralar, aşağıda tanımlanan varsayılan sınıf adını kullanmalıdır.
  • Uygulamalar, reklam isteğinde bulunurken sundukları içeriğin URL'sini iletebilir. Bu sayede anahtar kelime hedefleme, reklamı gösterilen diğer içeriklerle eşleştirebilir.

Önce

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.

Sonra

// 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 artık tüm AdView, InterstitialAd ve RewardedAd reklam türleri için AdResult nesnesi içeren bir Future döndürüyor. AdResult::is_successful yöntemi, reklam isteği başarıyla yerine getirildiyse true, aksi takdirde false değerini döndürür.

İşlem başarısız olursa AdResult, sorunla ilgili hizmet düzeyinde bilgiler içeren bir AdError nesnesi içerir. Bu bilgiler arasında hata kodu, hata mesajı ve alan adı dizeleri yer alır.

Önce

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.
    }
  }
}

Sonra

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.
      }
    }
  }
}

AdView içinde AdListener etkinlik

AdMob'un BannerView::Listener sınıfı, Google Mobile Ads C++ SDK'sında iki farklı dinleyici sınıfıyla değiştirildi:

  • AdListener, reklam yaşam döngüsü ve kullanıcı etkileşimi etkinliklerini izler.
  • AdViewBoundingBoxListener, AdView yeniden boyutlandırıldığında veya taşındığında çağrılır.

AdMob OnPresentationStateChanged geri çağırma Google Mobile Ads eşlemeleri

firebase::admob::BannerView::PresentationState numaralandırılmış türü ve OnPresentationStateChanged dinleyici yöntemi, yeni Google Mobile Ads C++ SDK'sına dahil edilmemiştir.

Aşağıda, bir AdView öğesinin yaşam döngüsündeki sunu durumu değişikliklerini algılamanın alternatif yolları verilmiştir:

firebase::admob::BannerView::Listener OnPresentationStateChanged etkinlik firebase::gma::AdListener muadil
kPresentationStateHidden AdListener::OnAdClosed çağrıldığında veya AdView::Hide() eşzamansız işlemini başarıyla tamamladığında
kPresentationStateVisibleWithoutAd Yok. Yüklenmemiş bir AdView için AdView::Show() çağrısı yapmaya çalışmak hataya neden olur.
kPresentationStateVisibleWithAd AdListener::OnAdOpened çağrıldığında veya AdView::Show(), eşzamansız işlemini bir reklamla başarıyla tamamladığında
kPresentationStateOpenedPartialOverlay Gösterilen reklamın boyutunu ve konumunu belirlemek için AdListener::OnAdOpened() çağrıldıktan sonra sınırlayıcı kutuyu sorgulayın. Alternatif olarak, AdView öğesinin konumunu ve AdSize değerini sorgulayın ve/veya AdViewBoundingBoxListener aracılığıyla sınırlayıcı kutuyu izleyin.
kPresentationStateCoveringUI Yukarıdaki kPresentationStateOpenedPartialOverlay bölümüne bakın.

RewardedAd artık bir sınıf

Desteği sonlandırılan Firebase AdMob C++ SDK'sı, firebase::admob::rewarded_ad ad alanındaki bir dizi işlev aracılığıyla ödüllü reklamları kolaylaştırıyordu. Bu işlevler, InterstitialAd ile benzer bir API yüzeyine sahip reklamlar sunan yeni bir RewardedAd sınıfında birleştirildi (sonraki bölüme bakın).

InterstitialAd ve RewardedAd dinleyici

Hem geçiş reklamları hem de ödüllü reklamlar tam ekran reklam olarak kabul edilir. Bu reklam türleri için reklam yaşam döngüsü etkinliklerini dinlemek üzere yeni bir FullScreenContentListener yüklenebilir ve AdMob hizmetinin ücretli bir etkinliğin gerçekleştiğini kabul ettiği zamanı izlemek için ayrı bir PaidEventListener yüklenebilir.

RewardedAd, kullanıcı tarafından kazanılan ödül etkinliklerini izlemek için ek bir dinleyiciye sahiptir.

Yeni tam ekran reklam geri çağırma yöntemleri

FullScreenContentListener yöntem PaidEventListener yöntem UserEarnedRewardListener yöntem
OnAdClicked OnPaidEvent OnUserEarnedReward
OnAdDismissedFullScreenContent
OnAdFailedToShowFullScreenContent
OnAdImpression
OnAdShowedFullScreenContent

Değiştirilen/kaldırılan/yenisiyle değiştirilen yöntemler

Aşağıdaki tabloda, yeni Google Mobile Ads C++ SDK'sında değiştirilen belirli yöntemler listelenmiştir. Parametreleri listelenen yöntemler kalır ancak imzaları değişir.

Sınıf Firebase AdMob C++ SDK API Google Mobile Ads C++ SDK API'si Notlar
BannerView MoveTo AdView::SetPosition
presentation_state Kaldırıldı AdViewListener etkinlik tarafından işlendi ve AdView::Show ve AdView::Hide gelecekteki sonuçlar.
SetListener AdView::SetAdListener
AdView::SetBoundingBoxListener
AdView::SetPaidEventListener
Yeni işleyici tasarımı, AdView yaşam döngüsü olaylarını algılama doğruluğunu artırır.
Listener::OnPresentationStateChanged Kaldırıldı Yukarıdaki BannerView::SetListener bölümüne bakın.
Listener::OnBoundingBoxChanged AdViewBoundingBoxListener::OnBoundingBoxChanged
InterstitialAd Initialize(AdParent parent, const char* ad_unit_id) Initialize(AdParent parent) ad_unit_id parametresi artık LoadAd işleminin bir parçasıdır.
LoadAd(const AdRequest& request) LoadAd(const char* ad_unit_id, const AdRequest& request)
presentation_state Kaldırıldı presentation_state numaralandırması kaldırıldı. FullScreenContentListener kullanın.
SetListener SetFullScreenContentListener
SetPaidEventListener
Destroy Kaldırıldı Kaynakları temizleme işlemi artık RewardedAd yıkıcısının bir parçasıdır.
RewardedAd
(resmi olarak
RewardedVideoAd)
Initialize Initialize(AdParent parent) AdParent daha önce Show yöntemine iletiliyordu ancak artık başlatma işleminin bir parçasıdır.
presentation_state Kaldırıldı presentation_state numaralandırması kaldırıldı. FullScreenContentListener kullanın.
SetListener SetFullScreenContentListener
SetPaidEventListener Show
RewardedAd gösterilirken bir UserEarnedReward dinleyici de tanımlanır. Aşağıdaki bilgilere bakın.
Show(AdParent parent) Show(UserEarnedRewardListener* listener)