انتشار 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 را با حداکثر ارتفاع ایجاد می کند این |
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) |