[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698XF642BTZ5353G7AAQVEK":3,"skill-same:01M698XF642BTZ5353G7AAQVEK":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M698XF642BTZ5353G7AAQVEK","google-mobile-ads-android-migrate-to-next-gen",null,"Migrates Android applications from the old, legacy Google Mobile Ads (GMA) SDK (com.google.android.gms:play-services-ads) to the new GMA Next-Gen SDK (com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk). Provides comprehensive mapping tables for imports, classes, and method signatures to help determine migration steps. Use when migrating an existing Android codebase from the old, legacy GMA SDK to GMA Next-Gen SDK.","google\u002Fskills","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M698WR0H76ENHE587T9EJT89",24122,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-mobile-ads-android-migrate-to-next-gen\u002FSKILL.md",[],[19,20,21,22,23,24,9,25,26,27,28,29,30,31,32,33,34,35,36,37],"android","next","mobile","ads","migrate","google mobile ads android migrate to next gen","help","play","services","applications","libraries","sdk","use","Legacy","signatures","for","Existing","imports","when","2026-11-10 10:12:30",false,"---\nname: google-mobile-ads-android-migrate-to-next-gen\ndescription: Migrates Android applications from the old, legacy Google Mobile\n  Ads (GMA) SDK (com.google.android.gms:play-services-ads) to the new GMA\n  Next-Gen SDK (com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk).\n  Provides comprehensive mapping tables for imports, classes, and method\n  signatures to help determine migration steps. Use when migrating an existing\n  Android codebase from the old, legacy GMA SDK to GMA Next-Gen SDK.\nmetadata:\n  version: \"1.1.0\"\n  category: GoogleAds\n---\n# AI Migration Agent Instructions for the Google Mobile Ads SDK\n\n## Migration Workflow\n\nUse this checklist to track your migration progress:\n\n*   **Configure Gradle**:\n    -   [ ] Replace `com.google.android.gms:play-services-ads` with the latest\n        stable version of\n        `com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk`. If you\n        cannot access Maven directly, run the following command to fetch the\n        latest version. The version returned in the `latest` tag is the latest\n        version of the GMA Next-Gen SDK:\n\n        ```bash\n        curl -sS https:\u002F\u002Fdl.google.com\u002Fdl\u002Fandroid\u002Fmaven2\u002Fcom\u002Fgoogle\u002Fandroid\u002Flibraries\u002Fads\u002Fmobile\u002Fsdk\u002Fads-mobile-sdk\u002Fmaven-metadata.xml | sed -n 's\u002F.*\u003Clatest>\\(.*\\)\u003C\\\u002Flatest>.*\u002F\\1\u002Fp'\n        ```\n\n    -   [ ] Update `minSdk` (24+) and `compileSdk` (34+).\n    -   [ ] Exclude `play-services-ads` and `play-services-ads-lite` from all\n        dependencies globally in the app-level build file to avoid duplicate\n        symbol errors.\n    -   [ ] Sync Gradle before moving on to the next step.\n*   **Per-File Migration**:\n    -   [ ] Refactor the codebase following the API Mapping and Method Mapping\n        tables to migrate imports, class names, and method signature to GMA\n        Next-Gen SDK.\n*   **Verify and Build**:\n    -   [ ] Run `gradle build -x test` to confirm a successful clean build.\n        Resolve any GMA SDK related compile errors.\n\n## Core Migration Rules\n\n*   **App ID Usage**: **Always** use the value of the\n    `com.google.android.gms.ads.APPLICATION_ID` meta-data tag from\n    `AndroidManifest.xml` for the `applicationId` in `InitializationConfig`.\n    *   *Constraint*: Preserve the `\u003Cmeta-data>` tag in the manifest; it is\n        still required for publishers using the User Messaging Platform SDK.\n*   **Initialization Sequence**:\n    1.  Call `MobileAds.initialize()` on a background thread.\n    2.  Ensure `initialize()` is called **before** any other SDK methods.\n    3.  If using `RequestConfiguration`, bundle it into\n        `InitializationConfig.Builder.setRequestConfiguration()`. **Do not**\n        call `MobileAds.setRequestConfiguration()` before initialization.\n*   **UI Threading**: **MANDATORY**: Callbacks in GMA-Next Gen SDK are invoked\n    on a background thread. **ALL UI-RELATED OPERATIONS** (e.g., Toasts, View\n    updates, Fragment transactions) **MUST** be wrapped in `runOnUiThread {}` or\n    `Dispatchers.Main.launch {}` within GMA SDK callbacks. SKIPPING THIS STEP\n    WILL CAUSE THE APPLICATION TO CRASH.\n*   **Mediation**: Classes implementing\n    `com.google.android.gms.ads.mediation.Adapter` MUST continue using\n    `com.google.android.gms.ads`.\n\n## Format Specifics\n\n### Banner Ads\n\n*   Use `com.google.android.libraries.ads.mobile.sdk.banner.AdView` for loading\n    GMA Next-Gen SDK banners.\n*   The following API checks if a banner is collapsible:\n    `adView.getBannerAd().isCollapsible()`.\n\n### Native Ads\n\n*   **NativeAdLoader**: `NativeAdLoader` is abstract and cannot be instantiated.\n    It is used statically (e.g., `NativeAdLoader.load(...)`).\n*   The following APIs are now set on the `NativeAdRequest.Builder`:\n    *   `.setCustomFormatIds(customFormatIds: List\u003CString>)`\n    *   `.disableImageDownloading()`\n    *   `.setMediaAspectRatio(mediaAspectRatio: NativeMediaAspectRatio)`\n    *   `.setAdChoicesPlacement(adChoicesPlacement: AdChoicesPlacement)`\n    *   `.setVideoOptions(videoOptions: VideoOptions)`\n*   **Removal**: Delete all \"Mute This Ad\" logic; it is unsupported in GMA\n    Next-Gen SDK.\n*   **MediaView**: `NativeAd` no longer has a direct `mediaView` variable; use\n    `registerNativeAd(nativeAd, mediaView)` to associate the ad with the view.\n\n### Ad preloading\n\n*   Unless specified in the mapping table, ad preloading methods in the GMA\n    Next-Gen SDK retain the same API signatures and parameters as the Old SDK.\n\n## API Mapping\n\nThis table covers the main classes and their GMA Next-Gen SDK equivalents.\n\n| Feature                    | Old SDK Import (`com.google.android.gms.ads...`)                                     | GMA Next-Gen SDK Import (`com.google.android.libraries.ads.mobile.sdk...` )                                                                                                           |\n|:---------------------------|:-------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                   |                                                                                      |                                                                                                                                                                                       |\n| Initialization             | `MobileAds`                                                                          | `MobileAds`, `initialization.InitializationConfig`                                                                                                                                    |\n| Initialization Listener    | `initialization.OnInitializationCompleteListener`                                    | `initialization.OnAdapterInitializationCompleteListener`                                                                                                                              |\n| Ad Request                 | `AdRequest`                                                                          | *Format specific* (e.g. `common.AdRequest`, `banner.BannerAdRequest`, `nativead.NativeAdRequest`) (Ad Unit ID is declared in `Builder`. Load() no longer takes an activity)           |\n| Load Error                 | `LoadAdError`                                                                        | `common.LoadAdError` (`LoadAdError` no longer has a domain variable. REMOVE the domain variable if found.)                                                                            |\n| Full Screen Show Error     | `AdError` (within `FullScreenContentCallback`)                                       | `common.FullScreenContentError` (within format-specific `AdEventCallback`)                                                                                                            |\n| Request Configuration      | `RequestConfiguration`                                                               | `common.RequestConfiguration` (Nested Enums\u002FConstants for RequestConfiguration are now under common.RequestConfiguration.)                                                            |\n| Event Callbacks            | `FullScreenContentCallback` (for full screen formats), `AdListener` (Banner, Native) | *Format Specific* (e.g., `interstitial.InterstitialAdEventCallback`, `banner.BannerAdEventCallback`, `native.NativeAdEventCallback`). Variable on the ad format is `adEventCallback`. |\n| **Tools**                  |                                                                                      |                                                                                                                                                                                       |\n| Ad Inspector               | `MobileAds.openAdInspector()`                                                        | `MobileAds.openAdInspector()` (`openAdInspector` no longer takes an activity)                                                                                                         |\n| Ad Inspector Listener      | `OnAdInspectorClosedListener`                                                        | `common.OnAdInspectorClosedListener`                                                                                                                                                  |\n| **Formats**                |                                                                                      |                                                                                                                                                                                       |\n| App Open                   | `appopen.AppOpenAd`                                                                  | `appopen.AppOpenAd`                                                                                                                                                                   |\n| App Open Load              | `appopen.AppOpenAd.AppOpenAdLoadCallback`                                            | `common.AdLoadCallback\u003Cappopen.AppOpenAd>`                                                                                                                                            |\n| Banner                     | `AdView`, `AdSize`                                                                   | `banner.AdView`, `banner.AdSize` (`AdView` no longer has `pause()`, `resume()`, `setAdSize()`). `AdSize` is declared in `BannerAdRequest`.                                            |\n| Banner Load                | `AdListener`                                                                         | `common.AdLoadCallback\u003Cbanner.BannerAd>`                                                                                                                                              |\n| Banner Events              | `AdListener`                                                                         | `banner.BannerAdEventCallback`, `banner.BannerAdRefreshCallback`                                                                                                                      |\n| Interstitial               | `interstitial.InterstitialAd`                                                        | `interstitial.InterstitialAd`                                                                                                                                                         |\n| Interstitial Load          | `interstitial.InterstitialAd.InterstitialAdLoadCallback`                             | `common.AdLoadCallback\u003Cinterstitial.InterstitialAd>`                                                                                                                                  |\n| Ad Loader                  | `AdLoader`                                                                           | `nativead.NativeAdLoader`                                                                                                                                                             |\n| Native                     | `nativead.NativeAd`                                                                  | `nativead.NativeAd` (No longer has a `mediaView` variable)                                                                                                                            |\n| Native Custom Format Ad    | `nativead.NativeCustomFormatAd`                                                      | `nativead.CustomNativeAd`                                                                                                                                                             |\n| Native Custom Click        | `nativead.NativeCustomFormatAd.OnCustomClickListener`                                | `nativead.OnCustomClickListener` (set on the `CustomNativeAd` object (e.g., `.onCustomClickListener`)                                                                                 |\n| Native Load                | `nativead.NativeAd.OnNativeAdLoadedListener`                                         | `nativead.NativeAdLoaderCallback`                                                                                                                                                     |\n| Native Ad View             | `nativead.NativeAdView`                                                              | `nativead.NativeAdView`                                                                                                                                                               |\n| Media Content              | `MediaContent`                                                                       | `nativead.MediaContent` (hasVideoContent is declared as a `val`)                                                                                                                      |\n| Media Aspect Ratio         | `MediaAspectRatio`                                                                   | `nativead.MediaAspectRatio`                                                                                                                                                           |\n| Video Options              | `VideoOptions`                                                                       | `common.VideoOptions`                                                                                                                                                                 |\n| Video Controller           | `VideoController`                                                                    | `common.VideoController` (VideoLifecycleCallbacks is now an interface, so instantiate with `object : VideoController.VideoLifecycleCallbacks { ... }`)                                |\n| Rewarded                   | `rewarded.RewardedAd`                                                                | `rewarded.RewardedAd`                                                                                                                                                                 |\n| Rewarded Load              | `rewarded.RewardedAd.RewardedAdLoadCallback`                                         | `common.AdLoadCallback\u003Crewarded.RewardedAd>`                                                                                                                                          |\n| Rewarded Interstitial      | `rewardedinterstitial.RewardedInterstitialAd`                                        | `rewardedinterstitial.RewardedInterstitialAd`                                                                                                                                         |\n| Rewarded Interstitial Load | `rewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallback`     | `common.AdLoadCallback\u003Crewardedinterstitial.RewardedInterstitialAd>`                                                                                                                  |\n| Paid Event Listener        | `OnPaidEventListener`                                                                | `common.AdEventCallback`                                                                                                                                                              |\n| Response Info              | `ResponseInfo`                                                                       | `common.ResponseInfo`                                                                                                                                                                 |\n| Adapter Response Info      | `AdapterResponseInfo`                                                                | `common.AdSourceResponseInfo`                                                                                                                                                         |\n| **Rewards**                |                                                                                      |                                                                                                                                                                                       |\n| Reward Listener            | `OnUserEarnedRewardListener`                                                         | `rewarded.OnUserEarnedRewardListener`                                                                                                                                                 |\n| Reward Item                | `rewarded.RewardItem`                                                                | `rewarded.RewardItem` (property access on `RewardedAd` and `RewardedInterstitialAd` is now `getRewardItem()`)                                                                         |\n| Ad Value                   | `AdValue`                                                                            | `common.AdValue`                                                                                                                                                                      |\n| **Preloading**             |                                                                                      |                                                                                                                                                                                       |\n| Configuration              | `preload.PreloadConfiguration`                                                       | `common.PreloadConfiguration`                                                                                                                                                         |\n| Callback                   | `preload.PreloadCallbackV2`                                                          | `common.PreloadCallback` (Now an interface instead of an abstract class)                                                                                                              |\n| Interstitial Preloader     | `interstitial.InterstitialPreloader`                                                 | `interstitial.InterstitialAdPreloader`                                                                                                                                                |\n| **Ad Manager**             |                                                                                      |                                                                                                                                                                                       |\n| Ad Request                 | `admanager.AdManagerAdRequest`                                                       | `common.AdRequest` (Now directly implemented in the `AdRequest` class)                                                                                                                |\n| Ad View                    | `admanager.AdView`                                                                   | `banner.AdView` (No `AdManagerAdView` class)                                                                                                                                          |\n| App Event Listener         | `admanager.AppEventListener`                                                         | `common.OnAppEventListener`                                                                                                                                                           |\n\n## Method Mapping\n\nThis table covers the main methods and their GMA Next-Gen SDK equivalents.\n\n| Feature                                  | Old SDK Method Signature                                                                                                                     | GMA Next-Gen SDK Method Signature                                                                                                                                                                                                                                                          |\n|:-----------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                                 |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| MobileAds Initialization                 | `MobileAds.initialize(Context context, OnInitializationCompleteListener listener)`                                                           | `MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)`                                                                                                                                                                            |\n| InitializationConfig Builder             | N\u002FA                                                                                                                                          | `InitializationConfig.Builder(String applicationId)`                                                                                                                                                                                                                                       |\n| Ad Request Builder                       | `AdRequest.Builder().build()`                                                                                                                | `AdRequest.Builder(String adUnitId).build()` (for App Open, Interstitial, Rewarded, Rewarded Interstitial) **Banner:** `BannerAdRequest.Builder(String adUnitId, AdSize adSize).build()` **Native:** `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List\u003CNativeAdType>).build()` |\n| Add Network Extras (AdMobAdapter)        | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).setGoogleExtrasBundle(Bundle extraBundle)`                                                                                                                                                                                                             |\n| Add Network Extras (Ad Source Adapter)   | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).putAdSourceExtrasBundle(Class\u003CMediationExtrasReceiver> adapterClass, Bundle adSourceExtras)`                                                                                                                                                           |\n| Custom Targeting                         | `AdRequest.Builder().setCustomTargeting(String key, String value)`                                                                           | `AdRequest.Builder(String adUnitId).putCustomTargeting(String key, String value)`                                                                                                                                                                                                          |\n| **Formats**                              |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| App Open                                 | `AppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)`                                    | `AppOpenAd.load(AdRequest request, AdLoadCallback\u003CAppOpenAd> loadCallback)`                                                                                                                                                                                                                |\n| Banner                                   | `AdView.loadAd(AdRequest request)`                                                                                                           | `AdView.loadAd(BannerAdRequest request, AdLoadCallback\u003CBannerAd> loadCallback)`                                                                                                                                                                                                            |\n| Interstitial                             | `InterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)`                          | `InterstitialAd.load(AdRequest request, AdLoadCallback\u003CInterstitialAd> loadCallback)`                                                                                                                                                                                                      |\n| Rewarded                                 | `RewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)`                                  | `RewardedAd.load(AdRequest request, AdLoadCallback\u003CRewardedAd> loadCallback)`                                                                                                                                                                                                              |\n| Rewarded Interstitial                    | `RewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)`          | `RewardedInterstitialAd.load(AdRequest request, AdLoadCallback\u003CRewardedInterstitialAd> loadCallback)`                                                                                                                                                                                      |\n| Native Builder                           | `AdLoader.Builder(Context context, String adUnitId).forNativeAd(NativeAd.OnNativeAdLoadedListener onNativeAdLoadedListener)`                 | `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List\u003CNativeAdType>)` (Include `NativeAd.NativeAdType.NATIVE` in `nativeAdTypes`)                                                                                                                                                  |\n| Native Load                              | `AdLoader.Builder(...).build().loadAd(AdRequest request)`                                                                                    | `NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)`                                                                                                                                                                                                            |\n| Native Ad Register                       | `NativeAdView.setNativeAd(NativeAd nativeAd)`                                                                                                | `NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)`                                                                                                                                                                                                                  |\n| Set an App Event Listener (Banner)       | `AdManagerAdView.appEventListener`                                                                                                           | `BannerAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `BannerAdEventCallback`)                                                                                                                                                                          |\n| Set an App Event Listener (Interstitial) | `AdManagerInterstitialAd.appEventListener`                                                                                                   | `InterstitialAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `InterstitialAdEventCallback`)                                                                                                                                                              |\n| **Callbacks**                            |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| onAdOpened                               | `AdListener.onAdOpened()`                                                                                                                    | `AdEventCallback.onAdShowedFullScreenContent()`                                                                                                                                                                                                                                            |\n| onAdClosed                               | `AdListener.onAdClosed()`                                                                                                                    | `AdEventCallback.onAdDismissedFullScreenContent()`                                                                                                                                                                                                                                         |\n| onFailedToShowFullScreenContent          | `onAdFailedToShowFullScreenContent(adError: AdError)`                                                                                        | `onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)`                                                                                                                                                                                                        |\n| onAdLoaded                               | **AdLoadCallback**: `onAdLoaded(ad: T)` (e.g., `InterstitialAdLoadCallback`, `RewardedAdLoadCallback`, `RewardedInterstitialAdLoadCallback`) | Parameter name is always `ad` **Format specific**: `onAdLoaded(ad: InterstitialAd)`, `onAdLoaded(ad: RewardedAd)`, `onAdLoaded(ad: RewardedInterstitialAd)`                                                                                                                                |\n| onAdFailedToLoad                         | `onAdFailedToLoad(loadAdError: LoadAdError)`                                                                                                 | `onAdFailedToLoad(adError: LoadAdError)`                                                                                                                                                                                                                                                   |\n| onCustomFormatAdLoaded                   | `OnCustomFormatAdLoadedListener.onCustomFormatAdLoaded(NativeCustomFormatAd ad)`                                                             | `NativeAdLoaderCallback.onCustomNativeAdLoaded(CustomNativeAd customNativeAd)`                                                                                                                                                                                                             |\n| onPaidEventListener                      | `OnPaidEventListener.onPaidEvent(AdValue value)`                                                                                             | `AdEventCallback.onAdPaid(value: AdValue)` (Format-specific e.g., `banner.BannerAdEventCallback.onAdPaid(value: AdValue)`)                                                                                                                                                                 |\n| onVideoMute                              | `onVideoMute(muted: Boolean)`                                                                                                                | `onVideoMute(isMuted: Boolean)`                                                                                                                                                                                                                                                            |\n| onAdPreloaded                            | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo?)`                                                                              | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo)`                                                                                                                                                                                                                             |\n| **Preloading**                           |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Configuration                            | `PreloadConfiguration.Builder(String adUnitId).build()`                                                                                      | `PreloadConfiguration(AdRequest request)`                                                                                                                                                                                                                                                  |\n| **Response Info**                        |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Get Response Info                        | `ad.responseInfo`                                                                                                                            | `ad.getResponseInfo()`                                                                                                                                                                                                                                                                     |\n| Loaded Adapter Responses Info            | `responseInfo.getLoadedAdapterResponseInfo()`                                                                                                | `responseInfo.loadedAdSourceResponseInfo`                                                                                                                                                                                                                                                  |\n| Get Adapter Responses                    | `responseInfo.getAdapterResponses()`                                                                                                         | `responseInfo.adSourceResponses`                                                                                                                                                                                                                                                           |\n| Get Mediation Adapter Class              | `responseInfo.getMediationAdapterClassName()`                                                                                                | `responseInfo.adapterClassName`                                                                                                                                                                                                                                                            |\n| **Adapter Response Info**                |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Ad Source ID                             | `AdapterResponseInfo.getAdSourceId()`                                                                                                        | `AdSourceResponseInfo.id`                                                                                                                                                                                                                                                                  |\n| Ad Source Name                           | `AdapterResponseInfo.getAdSourceName()`                                                                                                      | `AdSourceResponseInfo.name`                                                                                                                                                                                                                                                                |\n| Ad Source Instance ID                    | `AdapterResponseInfo.getAdSourceInstanceId()`                                                                                                | `AdSourceResponseInfo.instanceId`                                                                                                                                                                                                                                                          |\n| Ad Source Instance Name                  | `AdapterResponseInfo.getAdSourceInstanceName()`                                                                                              | `AdSourceResponseInfo.instanceName`                                                                                                                                                                                                                                                        |\n\n","# AI Migration Agent Instructions for the Google Mobile Ads SDK\n\n## Migration Workflow\n\nUse this checklist to track your migration progress:\n\n*   **Configure Gradle**:\n    -   [ ] Replace `com.google.android.gms:play-services-ads` with the latest\n        stable version of\n        `com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk`. If you\n        cannot access Maven directly, run the following command to fetch the\n        latest version. The version returned in the `latest` tag is the latest\n        version of the GMA Next-Gen SDK:\n\n        ```bash\n        curl -sS https:\u002F\u002Fdl.google.com\u002Fdl\u002Fandroid\u002Fmaven2\u002Fcom\u002Fgoogle\u002Fandroid\u002Flibraries\u002Fads\u002Fmobile\u002Fsdk\u002Fads-mobile-sdk\u002Fmaven-metadata.xml | sed -n 's\u002F.*\u003Clatest>\\(.*\\)\u003C\\\u002Flatest>.*\u002F\\1\u002Fp'\n        ```\n\n    -   [ ] Update `minSdk` (24+) and `compileSdk` (34+).\n    -   [ ] Exclude `play-services-ads` and `play-services-ads-lite` from all\n        dependencies globally in the app-level build file to avoid duplicate\n        symbol errors.\n    -   [ ] Sync Gradle before moving on to the next step.\n*   **Per-File Migration**:\n    -   [ ] Refactor the codebase following the API Mapping and Method Mapping\n        tables to migrate imports, class names, and method signature to GMA\n        Next-Gen SDK.\n*   **Verify and Build**:\n    -   [ ] Run `gradle build -x test` to confirm a successful clean build.\n        Resolve any GMA SDK related compile errors.\n\n## Core Migration Rules\n\n*   **App ID Usage**: **Always** use the value of the\n    `com.google.android.gms.ads.APPLICATION_ID` meta-data tag from\n    `AndroidManifest.xml` for the `applicationId` in `InitializationConfig`.\n    *   *Constraint*: Preserve the `\u003Cmeta-data>` tag in the manifest; it is\n        still required for publishers using the User Messaging Platform SDK.\n*   **Initialization Sequence**:\n    1.  Call `MobileAds.initialize()` on a background thread.\n    2.  Ensure `initialize()` is called **before** any other SDK methods.\n    3.  If using `RequestConfiguration`, bundle it into\n        `InitializationConfig.Builder.setRequestConfiguration()`. **Do not**\n        call `MobileAds.setRequestConfiguration()` before initialization.\n*   **UI Threading**: **MANDATORY**: Callbacks in GMA-Next Gen SDK are invoked\n    on a background thread. **ALL UI-RELATED OPERATIONS** (e.g., Toasts, View\n    updates, Fragment transactions) **MUST** be wrapped in `runOnUiThread {}` or\n    `Dispatchers.Main.launch {}` within GMA SDK callbacks. SKIPPING THIS STEP\n    WILL CAUSE THE APPLICATION TO CRASH.\n*   **Mediation**: Classes implementing\n    `com.google.android.gms.ads.mediation.Adapter` MUST continue using\n    `com.google.android.gms.ads`.\n\n## Format Specifics\n\n### Banner Ads\n\n*   Use `com.google.android.libraries.ads.mobile.sdk.banner.AdView` for loading\n    GMA Next-Gen SDK banners.\n*   The following API checks if a banner is collapsible:\n    `adView.getBannerAd().isCollapsible()`.\n\n### Native Ads\n\n*   **NativeAdLoader**: `NativeAdLoader` is abstract and cannot be instantiated.\n    It is used statically (e.g., `NativeAdLoader.load(...)`).\n*   The following APIs are now set on the `NativeAdRequest.Builder`:\n    *   `.setCustomFormatIds(customFormatIds: List\u003CString>)`\n    *   `.disableImageDownloading()`\n    *   `.setMediaAspectRatio(mediaAspectRatio: NativeMediaAspectRatio)`\n    *   `.setAdChoicesPlacement(adChoicesPlacement: AdChoicesPlacement)`\n    *   `.setVideoOptions(videoOptions: VideoOptions)`\n*   **Removal**: Delete all \"Mute This Ad\" logic; it is unsupported in GMA\n    Next-Gen SDK.\n*   **MediaView**: `NativeAd` no longer has a direct `mediaView` variable; use\n    `registerNativeAd(nativeAd, mediaView)` to associate the ad with the view.\n\n### Ad preloading\n\n*   Unless specified in the mapping table, ad preloading methods in the GMA\n    Next-Gen SDK retain the same API signatures and parameters as the Old SDK.\n\n## API Mapping\n\nThis table covers the main classes and their GMA Next-Gen SDK equivalents.\n\n| Feature                    | Old SDK Import (`com.google.android.gms.ads...`)                                     | GMA Next-Gen SDK Import (`com.google.android.libraries.ads.mobile.sdk...` )                                                                                                           |\n|:---------------------------|:-------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                   |                                                                                      |                                                                                                                                                                                       |\n| Initialization             | `MobileAds`                                                                          | `MobileAds`, `initialization.InitializationConfig`                                                                                                                                    |\n| Initialization Listener    | `initialization.OnInitializationCompleteListener`                                    | `initialization.OnAdapterInitializationCompleteListener`                                                                                                                              |\n| Ad Request                 | `AdRequest`                                                                          | *Format specific* (e.g. `common.AdRequest`, `banner.BannerAdRequest`, `nativead.NativeAdRequest`) (Ad Unit ID is declared in `Builder`. Load() no longer takes an activity)           |\n| Load Error                 | `LoadAdError`                                                                        | `common.LoadAdError` (`LoadAdError` no longer has a domain variable. REMOVE the domain variable if found.)                                                                            |\n| Full Screen Show Error     | `AdError` (within `FullScreenContentCallback`)                                       | `common.FullScreenContentError` (within format-specific `AdEventCallback`)                                                                                                            |\n| Request Configuration      | `RequestConfiguration`                                                               | `common.RequestConfiguration` (Nested Enums\u002FConstants for RequestConfiguration are now under common.RequestConfiguration.)                                                            |\n| Event Callbacks            | `FullScreenContentCallback` (for full screen formats), `AdListener` (Banner, Native) | *Format Specific* (e.g., `interstitial.InterstitialAdEventCallback`, `banner.BannerAdEventCallback`, `native.NativeAdEventCallback`). Variable on the ad format is `adEventCallback`. |\n| **Tools**                  |                                                                                      |                                                                                                                                                                                       |\n| Ad Inspector               | `MobileAds.openAdInspector()`                                                        | `MobileAds.openAdInspector()` (`openAdInspector` no longer takes an activity)                                                                                                         |\n| Ad Inspector Listener      | `OnAdInspectorClosedListener`                                                        | `common.OnAdInspectorClosedListener`                                                                                                                                                  |\n| **Formats**                |                                                                                      |                                                                                                                                                                                       |\n| App Open                   | `appopen.AppOpenAd`                                                                  | `appopen.AppOpenAd`                                                                                                                                                                   |\n| App Open Load              | `appopen.AppOpenAd.AppOpenAdLoadCallback`                                            | `common.AdLoadCallback\u003Cappopen.AppOpenAd>`                                                                                                                                            |\n| Banner                     | `AdView`, `AdSize`                                                                   | `banner.AdView`, `banner.AdSize` (`AdView` no longer has `pause()`, `resume()`, `setAdSize()`). `AdSize` is declared in `BannerAdRequest`.                                            |\n| Banner Load                | `AdListener`                                                                         | `common.AdLoadCallback\u003Cbanner.BannerAd>`                                                                                                                                              |\n| Banner Events              | `AdListener`                                                                         | `banner.BannerAdEventCallback`, `banner.BannerAdRefreshCallback`                                                                                                                      |\n| Interstitial               | `interstitial.InterstitialAd`                                                        | `interstitial.InterstitialAd`                                                                                                                                                         |\n| Interstitial Load          | `interstitial.InterstitialAd.InterstitialAdLoadCallback`                             | `common.AdLoadCallback\u003Cinterstitial.InterstitialAd>`                                                                                                                                  |\n| Ad Loader                  | `AdLoader`                                                                           | `nativead.NativeAdLoader`                                                                                                                                                             |\n| Native                     | `nativead.NativeAd`                                                                  | `nativead.NativeAd` (No longer has a `mediaView` variable)                                                                                                                            |\n| Native Custom Format Ad    | `nativead.NativeCustomFormatAd`                                                      | `nativead.CustomNativeAd`                                                                                                                                                             |\n| Native Custom Click        | `nativead.NativeCustomFormatAd.OnCustomClickListener`                                | `nativead.OnCustomClickListener` (set on the `CustomNativeAd` object (e.g., `.onCustomClickListener`)                                                                                 |\n| Native Load                | `nativead.NativeAd.OnNativeAdLoadedListener`                                         | `nativead.NativeAdLoaderCallback`                                                                                                                                                     |\n| Native Ad View             | `nativead.NativeAdView`                                                              | `nativead.NativeAdView`                                                                                                                                                               |\n| Media Content              | `MediaContent`                                                                       | `nativead.MediaContent` (hasVideoContent is declared as a `val`)                                                                                                                      |\n| Media Aspect Ratio         | `MediaAspectRatio`                                                                   | `nativead.MediaAspectRatio`                                                                                                                                                           |\n| Video Options              | `VideoOptions`                                                                       | `common.VideoOptions`                                                                                                                                                                 |\n| Video Controller           | `VideoController`                                                                    | `common.VideoController` (VideoLifecycleCallbacks is now an interface, so instantiate with `object : VideoController.VideoLifecycleCallbacks { ... }`)                                |\n| Rewarded                   | `rewarded.RewardedAd`                                                                | `rewarded.RewardedAd`                                                                                                                                                                 |\n| Rewarded Load              | `rewarded.RewardedAd.RewardedAdLoadCallback`                                         | `common.AdLoadCallback\u003Crewarded.RewardedAd>`                                                                                                                                          |\n| Rewarded Interstitial      | `rewardedinterstitial.RewardedInterstitialAd`                                        | `rewardedinterstitial.RewardedInterstitialAd`                                                                                                                                         |\n| Rewarded Interstitial Load | `rewardedinterstitial.RewardedInterstitialAd.RewardedInterstitialAdLoadCallback`     | `common.AdLoadCallback\u003Crewardedinterstitial.RewardedInterstitialAd>`                                                                                                                  |\n| Paid Event Listener        | `OnPaidEventListener`                                                                | `common.AdEventCallback`                                                                                                                                                              |\n| Response Info              | `ResponseInfo`                                                                       | `common.ResponseInfo`                                                                                                                                                                 |\n| Adapter Response Info      | `AdapterResponseInfo`                                                                | `common.AdSourceResponseInfo`                                                                                                                                                         |\n| **Rewards**                |                                                                                      |                                                                                                                                                                                       |\n| Reward Listener            | `OnUserEarnedRewardListener`                                                         | `rewarded.OnUserEarnedRewardListener`                                                                                                                                                 |\n| Reward Item                | `rewarded.RewardItem`                                                                | `rewarded.RewardItem` (property access on `RewardedAd` and `RewardedInterstitialAd` is now `getRewardItem()`)                                                                         |\n| Ad Value                   | `AdValue`                                                                            | `common.AdValue`                                                                                                                                                                      |\n| **Preloading**             |                                                                                      |                                                                                                                                                                                       |\n| Configuration              | `preload.PreloadConfiguration`                                                       | `common.PreloadConfiguration`                                                                                                                                                         |\n| Callback                   | `preload.PreloadCallbackV2`                                                          | `common.PreloadCallback` (Now an interface instead of an abstract class)                                                                                                              |\n| Interstitial Preloader     | `interstitial.InterstitialPreloader`                                                 | `interstitial.InterstitialAdPreloader`                                                                                                                                                |\n| **Ad Manager**             |                                                                                      |                                                                                                                                                                                       |\n| Ad Request                 | `admanager.AdManagerAdRequest`                                                       | `common.AdRequest` (Now directly implemented in the `AdRequest` class)                                                                                                                |\n| Ad View                    | `admanager.AdView`                                                                   | `banner.AdView` (No `AdManagerAdView` class)                                                                                                                                          |\n| App Event Listener         | `admanager.AppEventListener`                                                         | `common.OnAppEventListener`                                                                                                                                                           |\n\n## Method Mapping\n\nThis table covers the main methods and their GMA Next-Gen SDK equivalents.\n\n| Feature                                  | Old SDK Method Signature                                                                                                                     | GMA Next-Gen SDK Method Signature                                                                                                                                                                                                                                                          |\n|:-----------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Core**                                 |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| MobileAds Initialization                 | `MobileAds.initialize(Context context, OnInitializationCompleteListener listener)`                                                           | `MobileAds.initialize(Context context, InitializationConfig config, OnInitializationCompleteListener listener)`                                                                                                                                                                            |\n| InitializationConfig Builder             | N\u002FA                                                                                                                                          | `InitializationConfig.Builder(String applicationId)`                                                                                                                                                                                                                                       |\n| Ad Request Builder                       | `AdRequest.Builder().build()`                                                                                                                | `AdRequest.Builder(String adUnitId).build()` (for App Open, Interstitial, Rewarded, Rewarded Interstitial) **Banner:** `BannerAdRequest.Builder(String adUnitId, AdSize adSize).build()` **Native:** `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List\u003CNativeAdType>).build()` |\n| Add Network Extras (AdMobAdapter)        | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).setGoogleExtrasBundle(Bundle extraBundle)`                                                                                                                                                                                                             |\n| Add Network Extras (Ad Source Adapter)   | `AdRequest.Builder().addNetworkExtrasBundle(Class\u003CMediationExtrasReceiver>, Bundle networkExtras)`                                           | `AdRequest.Builder(String adUnitId).putAdSourceExtrasBundle(Class\u003CMediationExtrasReceiver> adapterClass, Bundle adSourceExtras)`                                                                                                                                                           |\n| Custom Targeting                         | `AdRequest.Builder().setCustomTargeting(String key, String value)`                                                                           | `AdRequest.Builder(String adUnitId).putCustomTargeting(String key, String value)`                                                                                                                                                                                                          |\n| **Formats**                              |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| App Open                                 | `AppOpenAd.load(Context context, String adUnitId, AdRequest request, AppOpenAdLoadCallback loadCallback)`                                    | `AppOpenAd.load(AdRequest request, AdLoadCallback\u003CAppOpenAd> loadCallback)`                                                                                                                                                                                                                |\n| Banner                                   | `AdView.loadAd(AdRequest request)`                                                                                                           | `AdView.loadAd(BannerAdRequest request, AdLoadCallback\u003CBannerAd> loadCallback)`                                                                                                                                                                                                            |\n| Interstitial                             | `InterstitialAd.load(Context context, String adUnitId, AdRequest request, InterstitialAdLoadCallback loadCallback)`                          | `InterstitialAd.load(AdRequest request, AdLoadCallback\u003CInterstitialAd> loadCallback)`                                                                                                                                                                                                      |\n| Rewarded                                 | `RewardedAd.load(Context context, String adUnitId, AdRequest request, RewardedAdLoadCallback loadCallback)`                                  | `RewardedAd.load(AdRequest request, AdLoadCallback\u003CRewardedAd> loadCallback)`                                                                                                                                                                                                              |\n| Rewarded Interstitial                    | `RewardedInterstitialAd.load(Context context, String adUnitId, AdRequest request, RewardedInterstitialAdLoadCallback loadCallback)`          | `RewardedInterstitialAd.load(AdRequest request, AdLoadCallback\u003CRewardedInterstitialAd> loadCallback)`                                                                                                                                                                                      |\n| Native Builder                           | `AdLoader.Builder(Context context, String adUnitId).forNativeAd(NativeAd.OnNativeAdLoadedListener onNativeAdLoadedListener)`                 | `NativeAdRequest.Builder(String adUnitId, nativeAdTypes: List\u003CNativeAdType>)` (Include `NativeAd.NativeAdType.NATIVE` in `nativeAdTypes`)                                                                                                                                                  |\n| Native Load                              | `AdLoader.Builder(...).build().loadAd(AdRequest request)`                                                                                    | `NativeAdLoader.load(NativeAdRequest request, NativeAdLoaderCallback callback)`                                                                                                                                                                                                            |\n| Native Ad Register                       | `NativeAdView.setNativeAd(NativeAd nativeAd)`                                                                                                | `NativeAdView.registerNativeAd(NativeAd nativeAd, mediaView: MediaView?)`                                                                                                                                                                                                                  |\n| Set an App Event Listener (Banner)       | `AdManagerAdView.appEventListener`                                                                                                           | `BannerAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `BannerAdEventCallback`)                                                                                                                                                                          |\n| Set an App Event Listener (Interstitial) | `AdManagerInterstitialAd.appEventListener`                                                                                                   | `InterstitialAd.adEventCallback` (`onAppEvent(name: String, data: String?)` is now part of the `InterstitialAdEventCallback`)                                                                                                                                                              |\n| **Callbacks**                            |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| onAdOpened                               | `AdListener.onAdOpened()`                                                                                                                    | `AdEventCallback.onAdShowedFullScreenContent()`                                                                                                                                                                                                                                            |\n| onAdClosed                               | `AdListener.onAdClosed()`                                                                                                                    | `AdEventCallback.onAdDismissedFullScreenContent()`                                                                                                                                                                                                                                         |\n| onFailedToShowFullScreenContent          | `onAdFailedToShowFullScreenContent(adError: AdError)`                                                                                        | `onAdFailedToShowFullScreenContent(fullScreenContentError: FullScreenContentError)`                                                                                                                                                                                                        |\n| onAdLoaded                               | **AdLoadCallback**: `onAdLoaded(ad: T)` (e.g., `InterstitialAdLoadCallback`, `RewardedAdLoadCallback`, `RewardedInterstitialAdLoadCallback`) | Parameter name is always `ad` **Format specific**: `onAdLoaded(ad: InterstitialAd)`, `onAdLoaded(ad: RewardedAd)`, `onAdLoaded(ad: RewardedInterstitialAd)`                                                                                                                                |\n| onAdFailedToLoad                         | `onAdFailedToLoad(loadAdError: LoadAdError)`                                                                                                 | `onAdFailedToLoad(adError: LoadAdError)`                                                                                                                                                                                                                                                   |\n| onCustomFormatAdLoaded                   | `OnCustomFormatAdLoadedListener.onCustomFormatAdLoaded(NativeCustomFormatAd ad)`                                                             | `NativeAdLoaderCallback.onCustomNativeAdLoaded(CustomNativeAd customNativeAd)`                                                                                                                                                                                                             |\n| onPaidEventListener                      | `OnPaidEventListener.onPaidEvent(AdValue value)`                                                                                             | `AdEventCallback.onAdPaid(value: AdValue)` (Format-specific e.g., `banner.BannerAdEventCallback.onAdPaid(value: AdValue)`)                                                                                                                                                                 |\n| onVideoMute                              | `onVideoMute(muted: Boolean)`                                                                                                                | `onVideoMute(isMuted: Boolean)`                                                                                                                                                                                                                                                            |\n| onAdPreloaded                            | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo?)`                                                                              | `onAdPreloaded(preloadId: String, responseInfo: ResponseInfo)`                                                                                                                                                                                                                             |\n| **Preloading**                           |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Configuration                            | `PreloadConfiguration.Builder(String adUnitId).build()`                                                                                      | `PreloadConfiguration(AdRequest request)`                                                                                                                                                                                                                                                  |\n| **Response Info**                        |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Get Response Info                        | `ad.responseInfo`                                                                                                                            | `ad.getResponseInfo()`                                                                                                                                                                                                                                                                     |\n| Loaded Adapter Responses Info            | `responseInfo.getLoadedAdapterResponseInfo()`                                                                                                | `responseInfo.loadedAdSourceResponseInfo`                                                                                                                                                                                                                                                  |\n| Get Adapter Responses                    | `responseInfo.getAdapterResponses()`                                                                                                         | `responseInfo.adSourceResponses`                                                                                                                                                                                                                                                           |\n| Get Mediation Adapter Class              | `responseInfo.getMediationAdapterClassName()`                                                                                                | `responseInfo.adapterClassName`                                                                                                                                                                                                                                                            |\n| **Adapter Response Info**                |                                                                                                                                              |                                                                                                                                                                                                                                                                                            |\n| Ad Source ID                             | `AdapterResponseInfo.getAdSourceId()`                                                                                                        | `AdSourceResponseInfo.id`                                                                                                                                                                                                                                                                  |\n| Ad Source Name                           | `AdapterResponseInfo.getAdSourceName()`                                                                                                      | `AdSourceResponseInfo.name`                                                                                                                                                                                                                                                                |\n| Ad Source Instance ID                    | `AdapterResponseInfo.getAdSourceInstanceId()`                                                                                                | `AdSourceResponseInfo.instanceId`                                                                                                                                                                                                                                                          |\n| Ad Source Instance Name                  | `AdapterResponseInfo.getAdSourceInstanceName()`                                                                                              | `AdSourceResponseInfo.instanceName`                                                                                                                                                                                                                                                        |\n\n",{"name":5,"metadata":43,"description":7},{"version":44,"category":45},"1.1.0","GoogleAds","main","bb9b3f464aae37af360d079c1d863524955b0363","skills\u002Fads\u002Fgoogle-mobile-ads-android-migrate-to-next-gen",2005,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-14 01:51:35",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add google\u002Fskills --skill google-mobile-ads-android-migrate-to-next-gen",{"tool":61,"command":62},"bunx","bunx skills add google\u002Fskills --skill google-mobile-ads-android-migrate-to-next-gen",{"tool":64,"command":65},"pnpm","pnpm dlx skills add google\u002Fskills --skill google-mobile-ads-android-migrate-to-next-gen","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-mobile-ads-android-migrate-to-next-gen\u002FSKILL.md",true,[],[70,107,138,167,193,217],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":84,"publishedAt":38},"01M6998S2EZKD3GEJ7F943RZTE","sign-in-with-google-web","Implement, configure, and secure Sign In With Google (SiwG) using Google Identity Services (GIS \u002F `https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fclient`) across web architectures. Use when creating Google sign-in buttons, implementing Google One Tap with FedCM, integrating GIS in React\u002FNext.js\u002FAngular\u002FHTML, verifying ID tokens on backend runtimes (Python\u002FNode.js\u002FGo\u002FJava), enforcing Google Workspace domain restrictions (`hd`), securing client-side ID tokens via WebCrypto nonces or encrypted IndexedDB, embedding in cross-origin iframes via the Intermediate Iframe API (`https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fintermediate`), configuring Content Security Policy (CSP), COOP, and Permissions Policy (`identity-credentials-get`) headers, or handling sign-out and revocation. Don't use for legacy Google Sign-In (`gapi.auth2`), Google Cloud IAM service accounts, or Android\u002FiOS native Credential Manager.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fsign-in-with-google-web\u002FSKILL.md",[76,81],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000010","后端与接口",[9,85,86,87,88,19,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106],"sign in with google web","sign","with","web","go","security","google workspace","google cloud","implement","policy","python","implementing","react","iam","permissions","buttons","secure","manager","identity","architectures","domain","runtimes",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":122,"publishedAt":38},"01M6998PHPDCAD684VW5WRG83D","dpop-adoption","Implement and debug OAuth 2.0 DPoP (RFC 9449) refresh token sender-constraining for WebCrypto, Node.js ES6, and browser runtimes integrating with Google's OAuth platform. Use when configuring non-extractable asymmetric key pairs (P-256), generating DPoP Proof JWTs for authorization code exchange and token refresh, or handling 400 use_dpop_nonce challenge retry loops at oauth2.googleapis.com\u002Ftoken. Don't use for unconstrained OAuth 2.0 flows (where refresh tokens are not bound to a client key pair), or for Google Cloud IAM \u002F service account authentication.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fdpop-adoption\u002FSKILL.md",[113,114,117],{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":115,"categoryName":116,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[123,124,9,92,125,126,127,128,129,130,98,131,132,133,134,135,136,103,106,137,37],"dpop adoption","adoption","es6","retry","authentication","flows","challenge","code","browser","loops","at","node","token","pair","platform",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":150,"publishedAt":38},"01M6998M72TC73EEAQH4XC7EXW","retrieving-developer-knowledge","Searches, retrieves, and synthesizes official Google developer documentation across Google Cloud, AI\u002FGemini, Android, Chrome, Web, Flutter, Go, Firebase, and other Google developer platforms. Integrates with the Developer Knowledge MCP server (search_documents, get_documents, answer_query) or the Developer Knowledge REST API fallback. Use when searching for gcloud CLI commands, API syntax, IAM permissions, official documentation, architectural comparisons, or product choice overviews. Don't use for local filesystem lookups or non-Google documentation.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fretrieving-developer-knowledge\u002FSKILL.md",[144,145,148,149],{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":146,"categoryName":147,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":115,"categoryName":116,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},[151,152,153,154,92,155,156,157,158,159,160,161,162,37,163,164,165,98,166,99],"retrieving developer knowledge","knowledge","developer","MCP","mcp server","official","developer documentation","get","search","local","choice","documents","query","api","across","documentation",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":38},"01M6998J2CZEXS9BES9S3WWFKC","migrate-to-rust","Clones, analyzes, plans, and migrates legacy codebases (C++, Fortran, Java, Python, C, Shell) from a GitHub URL or local directory to a modern, high-performance, deterministic, 100% Safe Rust architecture, tracking live telemetry across every task bucket, test failure\u002Ffix cycle, and Profile-Guided Optimization (PGO) stage, and producing a first-person AI storytelling report and interactive HTML infographic. Use when migrating a GitHub repository or local codebase to Rust, porting legacy C++, Fortran, Python, or Java workloads to memory-safe Rust, designing Struct-of-Arrays (SoA) or SIMD Rust architectures, or optimizing Rust ports with LLVM PGO. Don't use for unrelated non-Rust refactoring or single-line syntax questions.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fmigrate-to-rust\u002FSKILL.md",[],[174,175,23,176,177,178,179,180,95,181,182,183,184,185,186,160,187,188,189,37,190,191,165,192],"migrate to rust","rust","github","memory","performance","directory","safe","ports","llvm","soa","cycle","porting","fix","arrays","infographic","high-performance","URL","architecture","unrelated",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":202,"publishedAt":38},"01M6998GCC3K29WZ82KXMB9E02","finding-google-skills","Google platform decision and setup guidance, loaded on demand from Google's skill catalog. Use when a developer is choosing or setting up part of their stack, such as where to run a service, a database, storage, messaging, authentication, analytics, ads, or AI model serving, and a Google product is a reasonable candidate - whether or not a vendor is named - or when a request names a Google product or API. Brings in the matching Google skill so the answer can weigh Google options, their trade-offs, and when they are not the right fit. Skip when the stack is already settled on another provider and no Google product is named, or the task involves no platform choice.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Ffinding-google-skills\u002FSKILL.md",[199,200,201],{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":115,"categoryName":116,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},[9,203,204,205,206,137,207,208,209,210,211,127,212,213,214,161,31,215,37,216,164],"finding google skills","storage","as","messaging","model","trade-offs","provider","answer","fit","catalog","up","decision","database","candidate",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":221,"categories":222,"keywords":225,"publishedAt":38},"01M6998DWNHTH0BS6W1CY8ZXMP","workload-manager-basics","Use this skill to manage Google Cloud Workload Manager evaluations, rules, scanned resources, and validation results by using public client libraries and the REST API. Use when you need to inspect workload best-practice rules, create and run evaluations for Google Cloud general best practices, SAP, SQL Server, or custom organizational rules, review violations, export results to BigQuery, or automate Workload Manager through client libraries because no service-specific public CLI or MCP server is available. Don't use for general Google Compute Engine instance management, VPC configuration, or standard IAM auditing.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fworkload-manager-basics\u002FSKILL.md",[223,224],{"categoryNo":82,"categoryName":83,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":115,"categoryName":116,"taxonomyType":79,"taxonomyTypeDesc":80},[226,227,102,228,9,154,229,92,155,230,231,232,233,37,234,164,98,235,29,236,237],"workload manager basics","workload","basics","cli","review","vpc","resources","inspect","you","create","server","run"]