الانتقال إلى حزمة C++ SDK الجديدة لإعلانات Google على الأجهزة الجوّالة


يقدّم إصدار حزمة SDK Firebase C++‏ 9.1.0 حزمة SDK جديدة لإعلانات Google على الأجهزة الجوّالة مبنية على لغة C++.

حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة هي واجهة برمجة تطبيقات جديدة تتضمن التغيُّرات العميقة الرئيسية التي تم إجراؤها على حِزم تطوير البرامج (SDK) لـ Firebase AdMob C++ لنظامَي التشغيل iOS وAndroid في عامَي 2021 و2022، بما في ذلك إزالة واجهات برمجة التطبيقات المتوقّفة نهائيًا، ومسار جديد عند العمل مع أنواع الإعلانات التي تظهر على الشاشة الكاملة.

تم وضع علامة على حزمة تطوير البرامج (SDK) القديمة لـ Firebase AdMob C++ (firebase::admob) بأنّها متوقّفة نهائيًا، ولن تتلقّى أي تحديثات أو إصلاحات للأخطاء من الآن فصاعدًا.

سيظلّ كلّ من حزمة تطوير البرامج (SDK) الجديدة لإعلانات Google على الأجهزة الجوّالة (firebase::gma) وحزمة تطوير البرامج (SDK) القديمة لـ Firebase AdMob (firebase::admob) جزءًا من أرشيف عمليات إنشاء حزمة تطوير البرامج (SDK) Firebase C++ خلال فترة الإيقاف نهائيًا لـ حزمة تطوير البرامج (SDK) لـ Firebase AdMob.

إزالة واجهة برمجة التطبيقات القديمة

تمت إزالة واجهات برمجة التطبيقات التالية بالكامل من حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة باستخدام لغة C++:

RewardedVideoAd

تم استبدال مساحة الاسم RewardedVideoAd في AdMob بفئة RewardedAd. يعمل الإجراء RewardedAd بالطريقة نفسها التي يعمل بها الإجراء InterstitialAd، ولكنه يتضمّن RewardedAdListener إضافيًا لتلقّي إشعارات بشأن مكافآت العناصر.

NativeExpressAds

سبق أن تم وضع علامة على NativeExpressAd في AdMob على أنّها متوقفة نهائيًا في كلٍّ من حزمة تطوير البرامج (SDK) لـ Firebase AdMob C++. لذلك، لا يتم تضمين NativeExpressAd في حزمة تطوير البرامج (SDK) الجديدة لإعلانات Google على الأجهزة الجوّالة باستخدام لغة C++.

تغيير مساحة الاسم لحزمة SDK

تم نقل حزمة SDK إلى مساحة اسم جديدة، وهي تتضمّن بنية دليل جديدة:

مساحة الاسم firebase::gma

تقع مصادر حزمة تطوير البرامج (SDK) الجديدة لإعلانات Google على الأجهزة الجوّالة باستخدام لغة C++ في مساحة الاسم firebase::gma . تم إيقاف مساحة الاسم firebase::admob القديمة نهائيًا مع حزمة تطوير البرامج (SDK) لـ Firebase AdMob C++.

بنية الدليل

تم نقل ملفات العناوين إلى دليل جديد داخل أرشيف الإصدارات:

حزمة تطوير البرامج (SDK) لـ Firebase AdMob C++ المتوقّفة نهائيًا حزمة تطوير البرامج (SDK) الجديدة لإعلانات Google على الأجهزة الجوّالة باستخدام لغة C++
include/firebase/admob include/firebase/gma

المكتبة

سيتم توفير حزمة تطوير البرامج (SDK) الخاصة بإصدار AdMob C++ كمكتبة ثابتة ضمن أرشيف إنشاء حزمة تطوير البرامج (SDK) Firebase C++:

iOS

حزمة تطوير البرامج (SDK) لـ Firebase AdMob C++ المتوقّفة نهائيًا حزمة تطوير البرامج (SDK) الجديدة لإعلانات Google على الأجهزة الجوّالة باستخدام لغة C++
firebase_admob.xcframework firebase_gma.xcframework

Android

حزمة SDK لمنصة AdMob C++ متوقفة نهائيًا حزمة تطوير البرامج (SDK) الجديدة لإعلانات Google على الأجهزة الجوّالة باستخدام لغة C++
libfirebase_admob.a libfirebase_gma.a

عمليات نقل البيانات في الفئات والعناصر والبنى

يسرد الجدول أدناه فئات وأنواع مُحدّدة وبنى تم تغييرها أو تمّت إزالتها. في ما يلي ملخّص:

  • تمت إعادة تسمية BannerView إلى AdView.
  • تمت إزالة NativeAdExpressView.
  • يتم استبدال مساحة الاسم RewardedVideo بفئة RewardedAd.
  • تتم إزالة التعداد PresentationState وأدوات معالجته وتحلّ محلّها أدوات معالجة AdListener وFullScreenContent.
  • تتم إزالة المَعلمات التالية كمَعلمات إعداد لكلّ إعلان في AdRequests:

    • ضبط أرقام تعريف الأجهزة الاختبارية
    • استهداف الإعلانات استنادًا إلى العمر

    بدلاً من ذلك، يمكن الآن ضبط هذه المَعلمات في RequestConfiguration وهو إعداد عام سيؤثّر في جميع عمليات تحميل الإعلانات اللاحقة.

تم إيقافه نهائيًا firebase::admob namespace firebase::gma namespace جديد
AdSizeType (تعداد) AdSize::Type (تعداد)
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 (تعداد) AdErrorCode (تعداد)
RewardItem AdReward

إعداد حزمة تطوير البرامج (SDK)

تعرض كل دالة إعداد حزمة تطوير برامج (SDK) لإعلانات Google على الأجهزة الجوّالة C++ على الفور مؤشرَي حالة:

  • تنقل المَعلمة الاختيارية out ما إذا كان قد حدث خطأ في التبعية قبل بدء عملية الإعداد.

  • إنّ مَعلمة الإرجاع هي مرجع إلى firebase::Future. يحتوي Future على نتائج الإعداد غير المتزامن لمحوِّلات التوسّط على الجهاز.

على الرغم من أنّه يمكن استدعاء حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة باستخدام لغة 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) (بكسل مستقل للكثافة320×50)

AdSize::kFullBanner

الحجم الكامل لإعلان البانر التفاعلي (IAB) (468×60 بكسل مستقل للكثافة)
AdSize::kLargeBanner إصدار أطول من kBanner، يجب أن يكون عادةً 320×100

AdSize::kLeaderboard

حجم إعلان ليدربورد المقدَّم من مكتب الإعلانات التفاعلية (IAB) (728×90 بكسل مستقل للكثافة)
AdSize::kMediumRectangle حجم الإعلان على شكل مستطيل متوسط من مكتب الإعلانات التفاعلية (IAB) (300×250 بكسل مستقل الكثافة)
طرق ثابتة في firebase::gma::AdSize لمساعدة في إنشاء نُسخ من AdSize
GetLandscapeAnchoredAdaptiveBannerAdSize تنشئ AdSize بعرض محدد وارتفاع محسَّن من Google لإنشاء إعلان بانر في الوضع الأفقي
GetPortraitAnchoredAdaptiveBannerAdSize لإنشاء AdSize بالعرض المحدّد و ارتفاع محسَّن من Google لإنشاء إعلان بانر في الوضع العمودي
GetCurrentOrientationAnchoredAdaptiveBannerAdSize تُنشئ AdSize بالعرض المحدّد والارتفاع المحسَّن من Google لإنشاء إعلان بانر بما يتوافق مع الاتجاه الحالي
GetInlineAdaptiveBannerAdSize تُنشئ AdSize الأكثر ملاءمةً لإعلانات البانر مع تحديد ارتفاع أقصى

يسمح هذا العنصرAdSize لخوادم Google باختيار حجم إعلان مثالي بارتفاع أقل من أو يساوي الحد الأقصى للارتفاع المحدّد.

GetLandscapeInlineAdaptiveBannerAdSize إنشاء InlineAdaptive AdSize بالعرض المحدّد والارتفاع الأفقي للجهاز
GetPortraitInlineAdaptiveBannerAdSize لإنشاء InlineAdaptive AdSize بال العرض المحدّد وارتفاع الوضع العمودي للجهاز
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 بنية AdMob على غرار C بصفّة تتضمّن طُرقًا توفّر تجربة أفضل للمستخدم عند تحديد قائمات المعلومات المختلفة وإضافتها إليها.

في ما يلي التغييرات البارزة في 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

تم استبدال فئة BannerView::Listener في AdMob بفئتَي مستمعَين مختلفتَين في حزمة "SDK لإعلانات Google على الأجهزة الجوّالة" المكتوبة بلغة C++:

  • تتتبّع AdListener مسار الإعلان وأحداث تفاعل المستخدِمين.
  • يتمّ استدعاء AdViewBoundingBoxListener عند تغيير حجم AdView أو نقله.

عمليات ربط Google Mobile Ads لمعاودة الاتصال في AdMob OnPresentationStateChanged

لا يتضمّن الإصدار الجديد من حزمة SDK لإعلانات Google على الأجهزة الجوّالة باستخدام لغة C++‎ النوع المُدرَج firebase::admob::BannerView::PresentationState وطريقة المستمع OnPresentationStateChanged.

في ما يلي طرق بديلة لرصد تغييرات حالة العرض التقديمي في دورة حياة AdView:

عدد الأحداث: firebase::admob::BannerView::Listener OnPresentationStateChanged نظير واحد (firebase::gma::AdListener)
kPresentationStateHidden عند استدعاء AdListener::OnAdClosed أو عند إكمال AdView::Hide() لعمليته غير المتزامنة بنجاح
kPresentationStateVisibleWithoutAd بلا. ستؤدي محاولة استدعاء AdView::Show() AdView غير المحمَّل AdView إلى حدوث خطأ.
kPresentationStateVisibleWithAd عند استدعاء AdListener::OnAdOpened أو عندما يُكمل AdView::Show() عملية غير متزامنة بنجاح مع إعلان
kPresentationStateOpenedPartialOverlay اطلب مربع الإحاطة بعد استدعاء AdListener::OnAdOpened() لتحديد حجم الإعلان المعروض وموضعه. بدلاً من ذلك، يمكنك الاستعلام عن موضع AdView و AdSize و/أو تتبُّع المربّع الحدودي من خلال AdViewBoundingBoxListener.
kPresentationStateCoveringUI انظر kPresentationStateOpenedPartialOverlay أعلاه

أصبح RewardedAd الآن صفًا دراسيًا.

كانت حزمة تطوير البرامج (SDK) لـ Firebase AdMob C++ المتوقّفة نهائيًا تسهّل عرض الإعلانات التي تضم مكافأة من خلال مجموعة من الدوالّ في مساحة الاسم firebase::admob::rewarded_ad. تم دمج هذه الوظائف في فئة RewardedAd جديدة تعرِض إعلانات باستخدام واجهة برمجة تطبيقات مشابهة لواجهة 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 واجهة برمجة تطبيقات حزمة C++ SDK لإعلانات Google على الأجهزة الجوّالة ملاحظات
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
InterstitialAd 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
SetPaidEventListener Show
يتم أيضًا تحديد مستمع UserEarnedReward عند عرض RewardedAd. يُرجى مراجعة القسم أدناه.
Show(AdParent parent) Show(UserEarnedRewardListener* listener)