mcpField
G
google-mobile-ads-android-migrate-to-next-gen

google-mobile-ads-android-migrate-to-next-gen

github.com/google開発21.6k6.3k 回インストール今日更新
リポジトリ

google-mobile-ads-android-migrate-to-next-gen について

Android アプリを Google Mobile Ads SDK から Next-Gen SDK へ移行する開発者向けスキルです。依存関係、API、スレッド処理、ビルド検証の手順をまとめています。

主な機能

  1. 01Gradle 依存関係と SDK レベルの更新
  2. 02新旧 API の対応表
  3. 03初期化とコールバックの規則
  4. 04広告形式の移行ガイド
  5. 05ビルド検証チェックリスト

活用シーン

  1. 01Android アプリの Next-Gen SDK への移行
  2. 02置き換え対象のクラスやメソッドの確認
  3. 03コールバック内の UI スレッド処理の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/google/skills --skill google-mobile-ads-android-migrate-to-next-gen

インストール後、Claude Code で/google-mobile-ads-android-migrate-to-next-genを入力して読み込まれたか確認します。

詳細

Google Mobile Ads SDK の AI 移行エージェント向け手順

移行ワークフロー

このチェックリストで移行の進捗を管理します。

  • Gradle の設定:
    • com.google.android.gms:play-services-ads を、最新の安定版 com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk に置き換えます。Maven に直接アクセスできない場合は、次のコマンドを実行して最新バージョンを取得します。latest タグで返されるバージョンが、GMA Next-Gen SDK の最新バージョンです。

      curl -sS https://dl.google.com/dl/android/maven2/com/google/android/libraries/ads/mobile/sdk/ads-mobile-sdk/maven-metadata.xml | sed -n 's/.*<latest>\(.*\)<\/latest>.*/\1/p'
      
    • minSdk(24 以上)と compileSdk(34 以上)を更新します。

    • シンボルの重複エラーを避けるため、アプリレベルのビルドファイルで、すべての依存関係から play-services-ads と play-services-ads-lite をグローバルに除外します。

    • 次の手順に進む前に、Gradle を同期します。

  • ファイル単位の移行:
    • API マッピングとメソッドマッピングの表に従ってコードベースをリファクタリングし、インポート、クラス名、メソッドシグネチャを GMA Next-Gen SDK に移行します。
  • 検証とビルド:
    • gradle build -x test を実行して、クリーンビルドが成功することを確認します。GMA SDK 関連のコンパイルエラーを解決します。

移行の基本ルール

  • アプリ ID の使用:InitializationConfig の applicationId には、AndroidManifest.xml の com.google.android.gms.ads.APPLICATION_ID メタデータタグの値を必ず使用します。
    • 制約:マニフェスト内の <meta-data> タグは保持してください。User Messaging Platform SDK を使用するパブリッシャーには引き続き必要です。
  • 初期化の順序:
    1. バックグラウンドスレッドで MobileAds.initialize() を呼び出します。
    2. 他の SDK メソッドを呼び出す前に initialize() が呼び出されるようにします。
    3. RequestConfiguration を使用する場合は、InitializationConfig.Builder.setRequestConfiguration() に渡します。初期化前に MobileAds.setRequestConfiguration() を呼び出してはいけません。
  • UI スレッド処理:必須:GMA Next-Gen SDK のコールバックはバックグラウンドスレッドで呼び出されます。GMA SDK のコールバック内で、UI に関するすべての操作(Toast、View の更新、Fragment トランザクションなど)は、runOnUiThread {} または Dispatchers.Main.launch {} でラップする必要があります。この手順を省略すると、アプリケーションがクラッシュします。
  • メディエーション:com.google.android.gms.ads.mediation.Adapter を実装するクラスでは、引き続き com.google.android.gms.ads を使用する必要があります。

形式ごとの詳細

バナー広告
  • GMA Next-Gen SDK のバナーを読み込むには、com.google.android.libraries.ads.mobile.sdk.banner.AdView を使用します。
  • バナーが折りたたみ可能かどうかを確認するには、次の API を使用します。 adView.getBannerAd().isCollapsible()。
ネイティブ広告
  • NativeAdLoader:NativeAdLoader は抽象クラスであり、インスタンス化できません。静的に使用します(例:NativeAdLoader.load(...))。
  • 次の API は NativeAdRequest.Builder で設定するようになりました。
    • .setCustomFormatIds(customFormatIds: List<String>)
    • .disableImageDownloading()
    • .setMediaAspectRatio(mediaAspectRatio: NativeMediaAspectRatio)
    • .setAdChoicesPlacement(adChoicesPlacement: AdChoicesPlacement)
    • .setVideoOptions(videoOptions: VideoOptions)
  • 削除:「この広告をミュート」するすべてのロジックを削除します。GMA Next-Gen SDK ではサポートされていません。
  • MediaView:NativeAd には mediaView 変数が直接ありません。registerNativeAd(nativeAd, mediaView) を使用して、広告をビューに関連付けます。
広告のプリロード
  • マッピング表に特記がない限り、GMA Next-Gen SDK の広告プリロードメソッドは、Old SDK と同じ API シグネチャとパラメーターを維持しています。

API マッピング

この表では、主要なクラスと、GMA Next-Gen SDK における対応クラスを示します。

機能旧 SDK のインポート(com.google.android.gms.ads...)GMA 次世代 SDK のインポート(com.google.android.libraries.ads.mobile.sdk... )
コア
初期化MobileAdsMobileAds, initialization.InitializationConfig
初期化リスナーinitialization.OnInitializationCompleteListenerinitialization.OnAdapterInitializationCompleteListener
広告リクエストAdRequestフォーマット固有(例:common.AdRequest、banner.BannerAdRequest、nativead.NativeAdRequest)(広告ユニット ID は Builder で宣言します。Load() でアクティビティを渡す必要はなくなりました)
読み込みエラーLoadAdErrorcommon.LoadAdError(LoadAdError に domain 変数はなくなりました。見つかった場合は domain 変数を削除してください。)
全画面表示エラーAdError(FullScreenContentCallback 内)common.FullScreenContentError(フォーマット固有の AdEventCallback 内)
リクエスト設定RequestConfigurationcommon.RequestConfiguration(RequestConfiguration のネストされた列挙型/定数は、common.RequestConfiguration の下に配置されるようになりました。)
イベントコールバックFullScreenContentCallback(全画面フォーマット用)、AdListener(バナー、ネイティブ)フォーマット固有(例:interstitial.InterstitialAdEventCallback、banner.BannerAdEventCallback、native.NativeAdEventCallback)。広告フォーマット上の変数名は adEventCallback です。
ツール
広告インスペクターMobileAds.openAdInspector()MobileAds.openAdInspector()(openAdInspector でアクティビティを渡す必要はなくなりました)
広告インスペクターリスナーOnAdInspectorClosedListenercommon.OnAdInspectorClosedListener
フォーマット
アプリ起動時広告appopen.AppOpenAdappopen.AppOpenAd
アプリ起動時広告の読み込みappopen.AppOpenAd.AppOpenAdLoadCallbackcommon.AdLoadCallback<appopen.AppOpenAd>
バナーAdView、AdSizebanner.AdView、banner.AdSize(AdView に pause()、resume()、setAdSize() はなくなりました)。AdSize は BannerAdRequest で宣言します。
バナーの読み込みAdListenercommon.AdLoadCallback<banner.BannerAd>
バナーイベントAdListenerbanner.BannerAdEventCallback、banner.BannerAdRefreshCallback
インタースティシャルinterstitial.InterstitialAdinterstitial.InterstitialAd
インタースティシャルの読み込みinterstitial.InterstitialAd.InterstitialAdLoadCallbackcommon.AdLoadCallback<interstitial.InterstitialAd>
広告ローダーAdLoadernativead.NativeAdLoader
ネイティブnativead.NativeAdnativead.NativeAd(mediaView 変数はなくなりました)
ネイティブカスタムフォーマット広告nativead.NativeCustomFormatAdnativead.CustomNativeAd
ネイティブカスタムクリックnativead.NativeCustomFormatAd.OnCustomClickListenernativead.OnCustomClickListener(CustomNativeAd オブジェクトに設定します(例:.onCustomClickListener)
ネイティブの読み込みnativead.NativeAd.OnNativeAdLoadedListenernativead.NativeAdLoaderCallback
ネイティブ広告ビューnativead.NativeAdViewnativead.NativeAdView
メディアコンテンツMediaContentnativead.MediaContent(hasVideoContent は val として宣言されています)
メディアのアスペクト比MediaAspectRationativead.MediaAspectRatio
動画オプションVideoOptionscommon.VideoOptions
動画コントローラーVideoControllercommon.VideoController(VideoLifecycleCallbacks はインターフェースになりました。そのため、object : VideoController.VideoLifecycleCallbacks { ... } としてインスタンス化します)
リワードrewarded.RewardedAdrewarded.RewardedAd
リワード広告の読み込みrewarded.RewardedAd.RewardedAdLoadCallbackcommon.AdLoadCallback<rewarded.RewardedAd>
リワード付きインタースティシャルrewardedinterstitial.RewardedInterstitialAdrewardedinterstitial.RewardedInterstitialAd
リワード付きインタースティシャルの読み込みrewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallbackcommon.AdLoadCallback<rewardedinterstitial.RewardedInterstitialAd>
有料イベントリスナーOnPaidEventListenercommon.AdEventCallback
レスポンス情報ResponseInfocommon.ResponseInfo
アダプターレスポンス情報AdapterResponseInfocommon.AdSourceResponseInfo
リワード
リワードリスナーOnUserEarnedRewardListenerrewarded.OnUserEarnedRewardListener
リワードアイテムrewarded.RewardItemrewarded.RewardItem(RewardedAd および RewardedInterstitialAd のプロパティアクセスは getRewardItem() になりました)
広告価値AdValuecommon.AdValue
事前読み込み
設定preload.PreloadConfigurationcommon.PreloadConfiguration
コールバックpreload.PreloadCallbackV2common.PreloadCallback(抽象クラスではなくインターフェースになりました)
インタースティシャルの事前読み込みinterstitial.InterstitialPreloaderinterstitial.InterstitialAdPreloader
Ad Manager
広告リクエストadmanager.AdManagerAdRequestcommon.AdRequest(AdRequest クラスに直接実装されるようになりました)
広告ビューadmanager.AdViewbanner.AdView(AdManagerAdView クラスはありません)
アプリイベントリスナーadmanager.AppEventListenercommon.OnAppEventListener

メソッドの対応付け

この表では、主なメソッドと、それに対応する GMA Next-Gen SDK のメソッドをまとめています。

機能旧 SDK のメソッドシグネチャGMA Next-Gen SDK のメソッドシグネチャ
コア
MobileAds の初期化MobileAds.initialize(Context context, OnInitializationCompleteListener listener)MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)
InitializationConfig ビルダー該当なしInitializationConfig.Builder(String applicationId)
広告リクエストビルダーAdRequest.Builder().build()AdRequest.Builder(String adUnitId).build()(アプリ起動時、インタースティシャル、リワード、リワードインタースティシャルの場合) バナー: BannerAdRequest.Builder(String adUnitId, AdSize adSize).build() ネイティブ: NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List<NativeAdType>).build()
ネットワークエクストラの追加(AdMobAdapter)AdRequest.Builder().addNetworkExtrasBundle(Class<MediationExtrasReceiver>, Bundle networkExtras)AdRequest.Builder(String adUnitId).setGoogleExtrasBundle(Bundle extraBundle)
ネットワークエクストラの追加(広告ソースアダプター)AdRequest.Builder().addNetworkExtrasBundle(Class<MediationExtrasReceiver>, Bundle networkExtras)AdRequest.Builder(String adUnitId).putAdSourceExtrasBundle(Class<MediationExtrasReceiver> adapterClass, Bundle adSourceExtras)
カスタムターゲティングAdRequest.Builder().setCustomTargeting(String key, String value)AdRequest.Builder(String adUnitId).putCustomTargeting(String key, String value)
フォーマット
アプリ起動時AppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)AppOpenAd.load(AdRequest request, AdLoadCallback<AppOpenAd> loadCallback)
バナーAdView.loadAd(AdRequest request)AdView.loadAd(BannerAdRequest request, AdLoadCallback<BannerAd> loadCallback)
インタースティシャルInterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)InterstitialAd.load(AdRequest request, AdLoadCallback<InterstitialAd> loadCallback)
リワードRewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)RewardedAd.load(AdRequest request, AdLoadCallback<RewardedAd> loadCallback)
リワードインタースティシャルRewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)RewardedInterstitialAd.load(AdRequest request, AdLoadCallback<RewardedInterstitialAd> loadCallback)
ネイティブビルダーAdLoader.Builder(Context context, String adUnitId).forNativeAd(NativeAd.OnNativeAdLoadedListener onNativeAdLoadedListener)NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List<NativeAdType>)(nativeAdTypes に NativeAd.NativeAdType.NATIVE を含めます)
ネイティブの読み込みAdLoader.Builder(...).build().loadAd(AdRequest request)NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)
ネイティブ広告の登録NativeAdView.setNativeAd(NativeAd nativeAd)NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)
アプリイベントリスナーの設定(バナー)AdManagerAdView.appEventListenerBannerAd.adEventCallback(onAppEvent(name: String, data: String?) は BannerAdEventCallback の一部になりました)
アプリイベントリスナーの設定(インタースティシャル)AdManagerInterstitialAd.appEventListenerInterstitialAd.adEventCallback(onAppEvent(name: String, data: String?) は InterstitialAdEventCallback の一部になりました)
コールバック
onAdOpenedAdListener.onAdOpened()AdEventCallback.onAdShowedFullScreenContent()
onAdClosedAdListener.onAdClosed()AdEventCallback.onAdDismissedFullScreenContent()
onFailedToShowFullScreenContentonAdFailedToShowFullScreenContent(adError: AdError)onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)
onAdLoadedAdLoadCallback:onAdLoaded(ad: T)(例:InterstitialAdLoadCallback、RewardedAdLoadCallback、RewardedInterstitialAdLoadCallback)パラメーター名は常に ad です。フォーマット固有: onAdLoaded(ad: InterstitialAd)、onAdLoaded(ad: RewardedAd)、onAdLoaded(ad: RewardedInterstitialAd)
onAdFailedToLoadonAdFailedToLoad(loadAdError: LoadAdError)onAdFailedToLoad(adError: LoadAdError)
onCustomFormatAdLoadedOnCustomFormatAdLoadedListener.onCustomFormatAdLoaded(NativeCustomFormatAd ad)NativeAdLoaderCallback.onCustomNativeAdLoaded(CustomNativeAd customNativeAd)
onPaidEventListenerOnPaidEventListener.onPaidEvent(AdValue value)AdEventCallback.onAdPaid(value: AdValue)(フォーマット固有。例:banner.BannerAdEventCallback.onAdPaid(value: AdValue))
onVideoMuteonVideoMute(muted: Boolean)onVideoMute(isMuted: Boolean)
onAdPreloadedonAdPreloaded(preloadId: String, responseInfo: ResponseInfo?)onAdPreloaded(preloadId: String, responseInfo: ResponseInfo)
プリロード
設定PreloadConfiguration.Builder(String adUnitId).build()PreloadConfiguration(AdRequest request)
レスポンス情報
レスポンス情報の取得ad.responseInfoad.getResponseInfo()
読み込み済みアダプターのレスポンス情報responseInfo.getLoadedAdapterResponseInfo()responseInfo.loadedAdSourceResponseInfo
アダプターのレスポンスの取得responseInfo.getAdapterResponses()responseInfo.adSourceResponses
メディエーションアダプタークラスの取得responseInfo.getMediationAdapterClassName()responseInfo.adapterClassName
アダプターのレスポンス情報
広告ソース IDAdapterResponseInfo.getAdSourceId()AdSourceResponseInfo.id
広告ソース名AdapterResponseInfo.getAdSourceName()AdSourceResponseInfo.name
広告ソースのインスタンス IDAdapterResponseInfo.getAdSourceInstanceId()AdSourceResponseInfo.instanceId
広告ソースのインスタンス名AdapterResponseInfo.getAdSourceInstanceName()AdSourceResponseInfo.instanceName

コメント