به Google Mobile Ads C++ SDK جدید مهاجرت کنید

انتشار Firebase C++ SDK v9.1.0 یک کیت توسعه نرم افزاری جدید Google Mobile Ads C++ را معرفی می کند.

Google Mobile Ads C++ SDK یک سطح API جدید است که تغییرات اساسی ایجاد شده در Firebase AdMob C++ SDK برای iOS و Android در سال‌های 2021 و 2022 را شامل می‌شود، از جمله حذف APIهای منسوخ شده، و یک جریان جدید هنگام کار با تبلیغات تمام صفحه. انواع

Firebase AdMob C++ SDK ( firebase::admob ) قدیمی علامت‌گذاری شده است و هیچ به‌روزرسانی یا رفع اشکالی در آینده دریافت نخواهد کرد.

هر دو SDK جدید Google Mobile Ads C++ ( firebase::gma ) و قدیمی Firebase AdMob C++ SDK ( firebase::admob ) بخشی از بایگانی ساخت برای Firebase C++ SDK در طول پنجره منسوخ شدن Firebase AdMob C++ SDK باقی خواهند ماند.

حذف API قدیمی

API های زیر به طور کامل از Google Mobile Ads C++ SDK حذف شده اند.

RewardedVideoAd

فضای نام RewardedVideoAd AdMob با کلاس RewardedAd جایگزین شده است. RewardedAd مشابه InterstitialAd رفتار می کند، اما شامل یک RewardedAdListener اضافی برای دریافت اعلان پاداش های مورد است.

NativeExpressAds

NativeExpressAd AdMob قبلاً در هر Firebase AdMob C++ SDK به‌عنوان منسوخ علامت‌گذاری شده بود. بنابراین NativeExpressAd در Google Mobile Ads C++ SDK جدید گنجانده نشده است.

تغییر فضای نام SDK

SDK به یک فضای نام جدید منتقل شده است، و دارای یک ساختار دایرکتوری جدید است:

فضای نام firebase::gma

منابع جدید Google Mobile Ads C++ SDK در فضای نام firebase::gma هستند. فضای نام firebase::admob همراه با Firebase AdMob C++ SDK منسوخ شده است.

ساختار دایرکتوری

فایل‌های هدر به دایرکتوری جدیدی در داخل آرشیو ساخت منتقل شده‌اند:

Firebase AdMob C++ SDK منسوخ شده است SDK جدید تبلیغات موبایل Google C++
include/firebase/admob include/firebase/gma

کتابخانه

Firebase AdMob C++ SDK به عنوان یک کتابخانه ثابت در بایگانی ساخت Firebase C++ SDK ارائه می‌شود:

iOS

Firebase AdMob C++ SDK منسوخ شده است SDK جدید تبلیغات موبایل Google C++
firebase_admob.xcframework firebase_gma.xcframework

اندروید

Firebase AdMob C++ SDK منسوخ شده است SDK جدید تبلیغات موبایل Google C++
libfirebase_admob.a libfirebase_gma.a

مهاجرت های کلاس، enum و ساختار

جدول زیر کلاس ها، enum ها و ساختارهای خاصی را که تغییر کرده یا حذف شده اند فهرست می کند. در اینجا خلاصه ای وجود دارد:

  • BannerView به AdView تغییر نام داد.
  • NativeAdExpressView حذف شده است.
  • فضای نام RewardedVideo با یک کلاس RewardedAd جایگزین شده است.
  • شمارش PresentationState و شنوندگان حذف شده و با AdListener و FullScreenContent شنوندگان جایگزین می شوند.
  • پارامترهای زیر به عنوان پارامترهای پیکربندی هر تبلیغ در AdRequests حذف می شوند:

    • پیکربندی شناسه های دستگاه تست
    • هدف گذاری تبلیغات بر اساس سن

    در عوض، اکنون می‌توان این پارامترها را در RequestConfiguration پیکربندی کرد که یک تنظیم کلی است که بر همه بارهای تبلیغات بعدی تأثیر می‌گذارد.

firebase::admob namespace firebase::gma namespace
AdSizeType (enum) AdSize::Type (enum)
BannerView AdView
BannerView::Listener AdListener
AdViewBoundingBoxListener
PaidEventListener
BannerView::Position AdView::Position
BannerView::PresentationState حذف شده
ChildDirectedTreatmentState RequestConfiguration::TagForChildDirectedTreatment
Gender (تعدادی) حذف شده
InterstitialAd::Listener FullScreenContentListener
PaidEventListener
KeyValuePair حذف شده
NativeExpressAdView حذف شده
PollableRewardListener حذف شده
RewardItem AdReward
RewardedVideoAd (فضای نام) RewardedAd (کلاس)
RewardedVideoAd::Listener FullScreenContentListener
PaidEventListener
UserEarnedRewardListener
AdMobError (enum) AdErrorCode (enum)
RewardItem AdReward

مقداردهی اولیه SDK

هر تابع تنظیم اولیه SDK Ads C++ Google Mobile بلافاصله دو نشانگر وضعیت را برمی‌گرداند:

  • یک پارامتر خروجی اختیاری نشان می دهد که آیا یک خطای وابستگی قبل از شروع فرآیند اولیه رخ داده است یا خیر.

  • پارامتر بازگشت ارجاع به firebase::Future است. Future حاوی نتایج اولیه سازی ناهمزمان آداپتورهای میانجی روی دستگاه است.

در حالی که ممکن است به محض بازگشت عملکرد اولیه، از Google Mobile Ads C++ برای بارگیری آگهی‌های ارائه‌شده توسط AdMob فراخوانی شود، سایر شبکه‌های تبلیغاتی تا زمانی که آداپتور مدیشن مربوطه آنها به طور کامل مقداردهی نشده باشد، تبلیغات را ارائه نمی‌کنند. این فرآیند به صورت ناهمزمان رخ می دهد. بنابراین، اگر از میانجی‌گری تبلیغات در برنامه خود استفاده می‌کنید، توصیه می‌کنیم قبل از بارگیری هر گونه تبلیغاتی منتظر بمانید تا Future حل شود.

قبل از

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

بعد از

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

تغییرات AdSize در AdView

AdSize اکنون شامل اعضای ثابت اندازه های تبلیغات بنری رایج است و از اندازه های تبلیغاتی AnchorAdaptive و InlineAdaptive که دارای ارتفاع پویا بر اساس عرض داده شده و جهت فعلی صفحه هستند، پشتیبانی می کند.

ثابت های استاتیک AdSize به firebase::gma::AdSize

AdSize::kBanner

اندازه بنر تبلیغاتی انجمن بازاریابی تلفن همراه (MMA) (320x50 پیکسل مستقل از تراکم)

AdSize::kFullBanner

دفتر تبلیغات تعاملی (IAB) اندازه تبلیغات بنر کامل (468x60 پیکسل مستقل از تراکم)
AdSize::kLargeBanner نسخه بلندتر kBanner ، معمولاً 320x100

AdSize::kLeaderboard

اندازه آگهی تابلوی امتیازات دفتر تبلیغات تعاملی (IAB) (728x90 پیکسل مستقل از تراکم)
AdSize::kMediumRectangle دفتر تبلیغات تعاملی (IAB) اندازه آگهی مستطیلی متوسط ​​(300x250 پیکسل مستقل از تراکم)
روش های استاتیک در firebase::gma::AdSize برای کمک به ساخت نمونه های AdSize
GetLandscapeAnchoredAdaptiveBannerAdSize یک AdSize با عرض معین و ارتفاع بهینه سازی شده توسط گوگل برای ایجاد بنر تبلیغاتی در حالت افقی ایجاد می کند.
GetPortraitAnchoredAdaptiveBannerAdSize یک AdSize با عرض معین و ارتفاع بهینه سازی شده توسط گوگل برای ایجاد یک بنر تبلیغاتی در حالت عمودی ایجاد می کند.
GetCurrentOrientationAnchoredAdaptiveBannerAdSize یک AdSize با عرض معین و ارتفاع بهینه شده توسط Google برای ایجاد یک آگهی بنری با توجه به جهت فعلی ایجاد می کند.
GetInlineAdaptiveBannerAdSize برای تبلیغات بنری مناسب ترین AdSize با حداکثر ارتفاع ایجاد می کند

این AdSize به سرورهای Google اجازه می دهد تا اندازه تبلیغاتی بهینه را با ارتفاع کمتر یا مساوی حداکثر ارتفاع مشخص شده انتخاب کنند.

GetLandscapeInlineAdaptiveBannerAdSize یک AdSize InlineAdaptive با عرض داده شده و ارتفاع افقی دستگاه ایجاد می کند
GetPortraitInlineAdaptiveBannerAdSize یک AdSize InlineAdaptive با عرض داده شده و ارتفاع پرتره دستگاه ایجاد می کند.
GetCurrentOrientationInlineAdaptiveBannerAdSize یک روش راحت برای برگرداندن InlineAdaptive AdSize با توجه به جهت گیری رابط فعلی با عرض خاص.

قبل از

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

بعد از

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 و پیکربندی جهانی

شناسه‌های دستگاه آزمایشی، TagForChildDirectedTreatment و TagForUnderAgeOfConsent (که قبلاً تا تاریخ تولد مدیریت می‌شد) از AdRequest حذف شده‌اند و اکنون بخشی از یک RequestConfiguration جهانی هستند. برنامه‌ها ممکن است در اوایل چرخه حیات برنامه firebase::gma::SetRequestConfiguration() برای پیکربندی این مقادیر فراخوانی کنند. همه عملیات بارگیری آگهی بعدی پس از پیکربندی، این تنظیمات را رعایت می کنند.

firebase::gma::AdRequest همچنان وجود دارد زیرا اطلاعات متنی را برای بارگیری تبلیغات، از جمله کلمات کلیدی و URL محتوای اختیاری ارائه می‌کند.

ساختار AdRequest C-style AdMob با کلاسی با روش هایی جایگزین شده است که تجربه کاربری بهتری را هنگام تعریف و الحاق به لیست های مختلف اطلاعات ارائه می دهد.

در اینجا تغییرات قابل توجه AdRequest وجود دارد:

  • اکنون موارد اضافی با نام کلاس آداپتور میانجی مرتبط هستند. موارد اضافی ارسال شده به سرویس AdMob باید از نام کلاس پیش فرض همانطور که در زیر تعریف شده است استفاده کنند.
  • هنگام درخواست تبلیغ، برنامه‌ها ممکن است URL محتوایی را که ارائه می‌کنند ارسال کنند. این امکان را می‌دهد تا هدف‌یابی کلمه کلیدی، آگهی را با محتوای دیگر نمایش داده شده مطابقت دهد.

قبل از

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.

بعد از

// 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 اکنون یک Future حاوی یک شی AdResult برای همه انواع تبلیغات AdView ، InterstitialAd و RewardedAd برمی گرداند. متد AdResult::is_successful اگر درخواست تبلیغ با موفقیت انجام شده باشد true و در غیر این صورت false برمی گرداند.

در صورت خرابی، AdResult حاوی یک شی AdError با اطلاعات سطح سرویس در مورد مشکل، از جمله کد خطا، پیام خطا و رشته های دامنه است.

قبل از

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

بعد از

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 در AdView

AdMob's BannerView::Listener کلاس با دو کلاس شنونده مجزا در Google Mobile Ads C++ SDK جایگزین شده است:

  • AdListener چرخه عمر تبلیغات و رویدادهای تعامل کاربر را ردیابی می کند.
  • AdViewBoundingBoxListener هنگام تغییر اندازه یا جابجایی AdView فراخوانی می شود.

AdMob OnPresentationStateChanged نگاشت‌های Google Mobile Ads را تغییر داد

firebase::admob::BannerView::PresentationState نوع برشماری شده و روش شنونده OnPresentationStateChanged در SDK جدید Google Mobile Ads C++ گنجانده نشده است.

روش‌های زیر روش‌های جایگزین برای تشخیص تغییرات وضعیت ارائه در چرخه عمر AdView هستند:

firebase::admob::BannerView::Listener OnPresentationStateChanged رویداد firebase::gma::AdListener
kPresentationStateHidden هنگامی که AdListener::OnAdClosed فراخوانی می شود، یا زمانی که AdView::Hide() عملیات ناهمزمان خود را با موفقیت کامل می کند
kPresentationStateVisibleWithoutAd هیچ یک. تلاش برای فراخوانی AdView::Show() یک AdView بارگیری نشده منجر به خطا می شود.
kPresentationStateVisibleWithAd هنگامی که AdListener::OnAdOpened فراخوانی می شود، یا زمانی که AdView::Show() عملیات ناهمزمان خود را با موفقیت با یک تبلیغ تکمیل می کند.
kPresentationStateOpenedPartialOverlay پس از AdListener::OnAdOpened() کادر محدود را پرس و جو کنید تا اندازه و موقعیت تبلیغ نمایش داده شده را تعیین کنید. از طرف دیگر، از طریق AdViewBoundingBoxListener ، موقعیت AdView و AdSize را پرس و جو کنید و/یا کادر محدودکننده را کنترل کنید.
kPresentationStateCoveringUI kPresentationStateOpenedPartialOverlay در بالا ببینید

RewardedAd اکنون یک کلاس است

Firebase AdMob C++ SDK منسوخ شده تبلیغات پاداش را از طریق مجموعه ای از توابع در فضای نام firebase::admob::rewarded_ad تسهیل می کرد. این توابع در یک کلاس RewardedAd جدید ادغام شده‌اند که تبلیغات با سطح API مشابه InterstitialAd را ارائه می‌کند (به بخش بعدی مراجعه کنید).

شنوندگان InterstitialAd و RewardedAd

هم تبلیغات بینابینی و هم تبلیغات پاداش به عنوان تبلیغات تمام صفحه در نظر گرفته می شوند. یک FullScreenContentListener جدید را می توان برای گوش دادن به رویدادهای چرخه عمر تبلیغات برای این نوع تبلیغات نصب کرد، و یک PaidEventListener جداگانه را می توان برای ردیابی زمانی که سرویس AdMob تشخیص داده است که یک رویداد پولی رخ داده است، نصب کرد.

RewardedAd یک شنونده اضافی برای نظارت بر رویدادهای پاداش به دست آمده توسط کاربر دارد.

روش های جدید پاسخ به تماس تبلیغات تمام صفحه

روش های FullScreenContentListener روش های PaidEventListener روش های UserEarnedRewardListener
OnAdClicked OnPaidEvent OnUserEarnedReward
OnAdDismissedFullScreenContent
OnAdFailedToShowFullScreenContent
OnAdImpression
OnAdShowedFullScreenContent

روش ها تغییر/حذف/جایگزین شدند

جدول زیر روش‌های خاص تغییر یافته در SDK جدید Google Mobile Ads C++ را فهرست می‌کند. روش‌هایی با پارامترهای فهرست‌شده باقی مانده‌اند اما امضای آنها تغییر کرده است.

کلاس Firebase AdMob C++ SDK API Google Mobile Ads C++ SDK API یادداشت
BannerView MoveTo AdView::SetPosition
presentation_state حذف شده توسط رویدادهای AdViewListener و AdView::Show و AdView::Hide نتایج آینده مدیریت می شود.
SetListener AdView::SetAdListener
AdView::SetBoundingBoxListener
AdView::SetPaidEventListener
طراحی شنونده جدید وفاداری تشخیص رویدادهای چرخه عمر AdView را افزایش می دهد.
Listener::OnPresentationStateChanged حذف شده BannerView::SetListener ، بالا را ببینید.
Listener::OnBoundingBoxChanged AdViewBoundingBoxListener::OnBoundingBoxChanged
تبلیغات بینابینی Initialize(AdParent parent, const char* ad_unit_id) Initialize(AdParent parent) پارامتر ad_unit_id اکنون بخشی از عملیات LoadAd است.
LoadAd(const AdRequest& request) LoadAd(const char* ad_unit_id, const AdRequest& request)
presentation_state حذف شده شمارش presentation_state حذف شده است. از FullScreenContentListener استفاده کنید.
SetListener SetFullScreenContentListener
SetPaidEventListener
Destroy حذف شده پاکسازی منابع اکنون بخشی از مخرب RewardedAd است.
RewardedAd
(به طور رسمی
RewardedVideoAd )
Initialize Initialize(AdParent parent) AdParent قبلاً به Show داده شده بود، اما اکنون بخشی از مقداردهی اولیه است.
presentation_state حذف شده شمارش presentation_state حذف شده است. از FullScreenContentListener استفاده کنید.
SetListener SetFullScreenContentListener
Show SetPaidEventListener
هنگام نمایش RewardedAd ، شنونده UserEarnedReward نیز تعریف می شود. زیر را ببینید.
Show(AdParent parent) Show(UserEarnedRewardListener* listener)