新しい Google Mobile Ads C++ SDK に移行する

Firebase C++ SDK v9.1.0 リリースでは、新しい Google Mobile Ads C++ SDK が導入されています。

Google Mobile Ads C++ SDK は新しい API サーフェスです。2021 年と 2022 年に iOS および Android 向け Firebase AdMob C++ SDK に対して行われた、互換性を破る大きな変更(非推奨の API の削除、全画面広告を使用する際の新しいフローなど)が組み込まれています。

古い Firebase AdMob C++ SDK(firebase::admob)は非推奨としてマークされており、今後、アップデートやバグの修正は提供されません。

Firebase AdMob C++ SDK が非推奨としてマークされている間は、新しい Google Mobile Ads C++ SDK(firebase::gma)と古い Firebase AdMob C++ SDK(firebase::admob)が引き続き Firebase C++ SDK のビルド アーカイブに含まれます。

以前の API の削除

次の API は Google Mobile Ads C++ SDK から完全に削除されました。

RewardedVideoAd

AdMob の RewardedVideoAd 名前空間は RewardedAd クラスに置き換えられました。RewardedAdInterstitialAd と同じように動作しますが、アイテムの報酬に関する通知を受け取るための追加の RewardedAdListener が含まれます。

NativeExpressAds

AdMob の NativeExpressAd は、それぞれの 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 新しい Google Mobile Ads C++ SDK
include/firebase/admob include/firebase/gma

ライブラリ

Firebase AdMob C++ SDK は、Firebase C++ SDK ビルド アーカイブ内で静的ライブラリとして提供されます。

iOS

非推奨の Firebase AdMob C++ SDK 新しい Google Mobile Ads C++ SDK
firebase_admob.xcframework firebase_gma.xcframework

Android

非推奨の Firebase AdMob C++ SDK 新しい Google Mobile Ads C++ SDK
libfirebase_admob.a libfirebase_gma.a

クラス、列挙型、構造体の移行

変更または削除されたクラス、列挙型、構造体について詳しくは、以下の表をご覧ください。概要を次に示します。

  • BannerView の名前を AdView に変更しました。
  • NativeAdExpressView を削除しました。
  • RewardedVideo 名前空間を RewardedAd クラスに置き換えました。
  • PresentationState 列挙型とリスナーを削除し、AdListener リスナーと FullScreenContent リスナーに置き換えました。
  • 広告ごとの構成パラメータである以下のパラメータを AdRequests から削除しました。

    • テストデバイス ID の構成
    • 年齢に基づく広告のターゲティング

    代わりに、後続のすべての広告掲載数に影響するグローバル設定である 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 の初期化

Google Mobile Ads C++ SDK の各初期化関数は、直ちに次の 2 つのステータス インジケーターを返します。

  • オプションの out パラメータは、初期化プロセスの開始前に依存関係エラーが発生したかどうかを示します。

  • return パラメータは 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.
}

AdView 内の AdSize の変更点

一般的なバナー広告サイズの静的メンバーが AdSize に含まれるようになりました。これにより、指定した幅と画面の現在の向きに基づいて高さが動的に設定される AnchorAdaptive および InlineAdaptive の広告サイズがサポートされます。

静的な AdSize 定数を firebase::gma::AdSize に追加しました

AdSize::kBanner

Mobile Marketing Association(MMA)バナー広告サイズ(320x50 密度非依存ピクセル)

AdSize::kFullBanner

Interactive Advertising Bureau(IAB)フルバナー広告サイズ(468x60 密度非依存ピクセル)
AdSize::kLargeBanner 縦長バージョンの kBanner(通常 320×100)

AdSize::kLeaderboard

Interactive Advertising Bureau(IAB)リーダーボード広告サイズ(728x90 密度非依存ピクセル)
AdSize::kMediumRectangle Interactive Advertising Bureau(IAB)レクタングル(中)広告サイズ(300x250 密度非依存ピクセル)
AdSize のインスタンス作成に役立つ firebase::gma::AdSize の静的メソッド
GetLandscapeAnchoredAdaptiveBannerAdSize 指定した幅と Google によって最適化された高さで AdSize を作成し、横向きでバナー広告を作成します。
GetPortraitAnchoredAdaptiveBannerAdSize 指定した幅と Google によって最適化された高さで AdSize を作成し、縦向きでバナー広告を作成します。
GetCurrentOrientationAnchoredAdaptiveBannerAdSize 指定した幅と Google によって最適化された高さで AdSize を作成し、現在の画面の向きでバナー広告を作成します
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 とグローバル構成

テストデバイス ID、TagForChildDirectedTreatmentTagForUnderAgeOfConsent(以前は誕生日で処理)が AdRequest から削除され、グローバル RequestConfiguration の一部になりました。アプリケーションは、アプリケーションのライフサイクルの早い段階で firebase::gma::SetRequestConfiguration() を呼び出して、これらの値を構成できます。一度構成された値の設定は、その後のすべての広告読み込みオペレーションで使用されます。

firebase::gma::AdRequest は、キーワードやオプションのコンテンツ URL など、広告を読み込むためのコンテキスト情報を提供するため、そのまま残ります。

AdMob の AdRequest 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 は、AdViewInterstitialAdRewardedAd のすべての広告タイプについて、AdResult オブジェクトを含む Future を返すようになりました。AdResult::is_successful メソッドは、広告リクエストが正常に実行された場合は true を返し、そうでない場合は false を返します。

障害が発生すると、エラーコード、エラー メッセージ、ドメイン文字列など、問題に関するサービスレベル情報を持つ AdError オブジェクトが AdResult に含まれます。

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

AdView 内の AdListener イベント

AdMob の BannerView::Listener クラスを Google Mobile Ads C++ SDK の 2 つのリスナークラスに置き換えました。

  • AdListener は、広告ライフサイクルとユーザー インタラクション イベントを追跡します。
  • AdView がサイズ変更または移動されると、AdViewBoundingBoxListener が呼び出されます。

AdMob OnPresentationStateChanged コールバックの Google Mobile Ads マッピング

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() が呼び出された後で境界ボックスをクエリして、表示される広告のサイズと位置を決定します。 または、AdView の位置と AdSize をクエリするか、AdViewBoundingBoxListener を使用して境界ボックスをモニタリングします。
kPresentationStateCoveringUI 上記の kPresentationStateOpenedPartialOverlay をご覧ください。

RewardedAd がクラスになりました

非推奨の Firebase AdMob C++ SDK では、firebase::admob::rewarded_ad 名前空間内の関数のコレクションを通じてリワード広告を簡単に利用できました。これらの関数は、InterstitialAd と類似する API サーフェスを使って広告を配信する新しい RewardedAd クラスに統合されました(次のセクションをご覧ください)。

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
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) 以前は Show に渡されていた AdParent が初期化に組み込まれました。
presentation_state 削除済み presentation_state 列挙型が削除されました。FullScreenContentListener を使用してください。
SetListener SetFullScreenContentListener
SetPaidEventListener Show
UserEarnedReward リスナーは、RewardedAd を表示するときにも定義されます。以下をご覧ください。
Show(AdParent parent) Show(UserEarnedRewardListener* listener)