העבר ל-Google Mobile Ads C++ SDK החדש

ההפצה של Firebase C++ SDK v9.1.0 מציגה SDK חדש של Google Mobile Ads C++ SDK.

Google Mobile Ads C++ SDK הוא משטח API חדש המשלב את השינויים הפורצים הגדולים שבוצעו ב-Firebase AdMob C++ SDK עבור iOS ו-Android בשנים 2021 ו-2022, כולל הסרה של ממשקי API שהוצאו משימוש, וזרימה חדשה בעבודה עם מודעות במסך מלא סוגים.

ה-SDK הישן של Firebase AdMob C++ ( firebase::admob ) סומן שהוצא משימוש ולא יקבל עדכונים או תיקוני באגים בהמשך.

הן ה-SDK החדש של Google Mobile Ads C++ ( firebase::gma ) והן ה-SDK הישן של Firebase AdMob C++ ( firebase::admob ) יישארו חלק מארכיון ה-build עבור 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.

מבנה ספריות

קובצי כותרות הועברו לספרייה חדשה בתוך ארכיון ה-build:

הוצא משימוש Firebase AdMob C++ SDK Google Mobile Ads C++ SDK חדש
include/firebase/admob include/firebase/gma

סִפְרִיָה

ה-SDK של Firebase AdMob C++ יסופק כספרייה סטטית בתוך ארכיון ה-Build של Firebase C++ SDK:

iOS

הוצא משימוש Firebase AdMob C++ SDK Google Mobile Ads C++ SDK חדש
firebase_admob.xcframework firebase_gma.xcframework

דְמוּי אָדָם

הוצא משימוש Firebase AdMob C++ SDK Google Mobile Ads C++ SDK חדש
libfirebase_admob.a libfirebase_gma.a

הגירות מחלקות, רשימות ומבנים

הטבלה שלהלן מפרטת מחלקות, רשימות ומבנים ספציפיים שהשתנו או הוסרו. הנה תקציר:

  • שמו 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

כל פונקציית אתחול של Google Mobile Ads C++ SDK מחזירה מיד שני מחווני סטטוס:

  • פרמטר יציאה אופציונלי מעביר אם אירעה שגיאת תלות לפני תחילת תהליך האתחול.

  • פרמטר ההחזרה הוא הפניה ל- firebase::Future . Future מכיל את תוצאות האתחול האסינכרוני של מתאמי התיווך במכשיר.

בעוד ש-Google Mobile Ads C++ SDK עשויה להיות מופעלת כדי לטעון מודעות המוצגות ב-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

גודל מודעת באנר של Mobile Marketing Association (MMA) (320x50 פיקסלים בלתי תלויים בצפיפות)

AdSize::kFullBanner

Interactive Advertising Bureau (IAB) גודל מודעת באנר מלא (468x60 פיקסלים בלתי תלויים בצפיפות)
AdSize::kLargeBanner גרסה גבוהה יותר של kBanner , בדרך כלל 320x100

AdSize::kLeaderboard

גודל מודעת Leaderboard של Interactive Advertising Bureau (IAB) (728x90 פיקסלים בלתי תלויים בצפיפות)
AdSize::kMediumRectangle Interactive Advertising Bureau (IAB) גודל מודעת מלבן בינוני (300x250 פיקסלים בלתי תלויים בצפיפות)
שיטות סטטיות ב- 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 עדיין קיים מכיוון שהוא מספק מידע הקשרי לטעינת פרסומות, כולל מילות מפתח וכתובת אתר אופציונלית לתוכן.

המבנה בסגנון AdRequest C של 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

מחלקת BannerView::Listener של AdMob הוחלפה בשתי מחלקות מאזינים נפרדות ב-Google Mobile Ads C++ SDK:

  • AdListener עוקב אחר מחזור חיי המודעה ואירועי אינטראקציה של משתמשים.
  • AdViewBoundingBoxListener מופעל כאשר ה- AdView משתנה או מזיזים אותו.

AdMob OnPresentationStateChanged השתנה מיפויים של מודעות Google לנייד

הסוג המצוין firebase::admob::BannerView::PresentationState ושיטת האזנה OnPresentationStateChanged אינם כלולים ב-Google Mobile Ads C++ SDK החדש.

להלן דרכים חלופיות לזיהוי שינויים במצב מצגת במחזור החיים של 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() כדי לקבוע את הגודל והמיקום של המודעה המוצגת. לחלופין, בצע שאילתה על המיקום וה- AdSize של AdView ו/או פקח על התיבה התוחמת באמצעות AdViewBoundingBoxListener .
kPresentationStateCoveringUI ראה kPresentationStateOpenedPartialOverlay למעלה

RewardedAd היא כעת כיתה

ה-SDK של Firebase AdMob C++ שהוצא משימוש אפשרה מודעות מתגמלות באמצעות אוסף של פונקציות במרחב השמות של firebase::admob::rewarded_ad . פונקציות אלו אוחדו לכדי מחלקה חדשה RewardedAd שמגישה מודעות עם משטח API דומה לזה של InterstitialAd (ראה בסעיף הבא).

מאזיני מודעות InterstitialAd ופרסומות RewardedAd

הן מודעות ביניים והן מודעות מתגמלות נחשבות למודעות במסך מלא. ניתן להתקין FullScreenContentListener חדש כדי להאזין לאירועי מחזור חיים של פרסומות עבור סוגי מודעות אלו, וניתן להתקין PaidEventListener נפרד כדי לעקוב אחר מתי שירות AdMob חשב שהתרחש אירוע בתשלום.

RewardedAd יש מאזין נוסף למעקב אחר אירועי תגמול שנצברו על ידי המשתמש.

שיטות חדשות להתקשרות חוזרת של מודעות במסך מלא

שיטות FullScreenContentListener שיטות PaidEventListener שיטות UserEarnedRewardListener
OnAdClicked OnPaidEvent OnUserEarnedReward
OnAdDismissedFullScreenContent
OnAdFailedToShowFullScreenContent
OnAdImpression
OnAdShowedFullScreenContent

השיטות השתנו/הוסרו/הוחלפו

הטבלה שלהלן מפרטת את השיטות הספציפיות ששונו ב-Google Mobile Ads C++ SDK החדש. שיטות עם פרמטרים רשומים נותרו אך החתימות שלהן השתנו.

מעמד 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 destructor.
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)