Flutter and the Play Advertising ID: Do You Need the AD_ID Permission and Declaration? (2026)
Do you need the AD_ID permission and the Advertising ID declaration in a Flutter app?
You need both only if your app, or an SDK inside it, uses the advertising ID. Google Play says apps that use the advertising ID and target Android 13 (API 33) or higher must declare the normal permission com.google.android.gms.permission.AD_ID in the manifest, and Play Console asks you to answer an Advertising ID declaration for the same reason. For a Flutter app the practical question is what your merged manifest contains after plugins such as ads or analytics are added, not what your own AndroidManifest.xml says. This guide gives a 5-step check, checked against Google's Play Console Help on 2026-11-09.
GSPTeck is giosaia's indie studio building mobile and web apps with Flutter and Firebase. The steps below are the ones that remove the "advertising ID" warning without guessing.
What is the advertising ID, and why does Play ask about it?
The advertising ID is a unique, user-resettable and user-deletable ID for advertising, provided by Google Play services. Google's Advertising ID help page says that when a user deletes it in Android Settings, any app that asks for it receives a string of zeros instead, and that for essential non-advertising uses such as analytics and fraud prevention you should use the App Set ID instead.
That is why the permission matters. On a device running Android 13 or later, an app that targets Android 13 without declaring AD_ID gets zeros even when the user has not deleted the ID, which can break ad and analytics use cases. Play's own help page also says its policy requires apps to use the advertising ID, when available, in place of other device identifiers for advertising purposes.
The 5-step Advertising ID check for a Flutter app
Run the check on a release build: find out whether the permission is in the merged manifest, decide whether you really use the advertising ID, set the manifest to match, answer the Play Console declaration the same way, and keep your Data safety form consistent.
- Build a release and read the merged manifest. Run
flutter build apk --release, thenaapt2 dump permissions build/app/outputs/flutter-apk/app-release.apkfrom the Android SDK build-tools, or open the manifest merger report underbuild/app/outputs/logs/. Search forAD_ID. Android's manifest documentation also describes the Merged Manifest view in Android Studio for this. - Decide whether you use the advertising ID. Ads SDKs such as Google Mobile Ads use it. Google says some SDKs, such as play-services-ads, already declare the permission in their library manifest, and it is then merged into your app's manifest by default even if you never wrote it.
- Make the manifest match. If you use the ID, the permission must be present:
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>. If you do not use it and a library adds it, remove it withtools:node="remove"and thexmlns:toolsnamespace, which Android's documentation describes as the way to drop an element a library adds that you do not need. Check afterwards that no feature you rely on needed it. - Answer the Play Console declaration the same way. In Play Console, App content has an Advertising ID declaration. Say Yes if the merged manifest keeps the permission and your app or SDK uses the ID, and No if you removed it. The form also asks for the purposes; choose the ones that really apply.
- Re-check Data safety. The Data safety form describes what the app collects and shares, so an advertising ID answer and a "no data collected" answer cannot both be true. Our Play Console Data safety refresh guide covers the SDK pass.
Which answer fits which kind of Flutter app?
If your app shows ads, keep the permission and declare Yes for advertising. If it only uses analytics, you can keep it and declare the analytics purpose, or remove it and declare No if you also stop the SDK from using the ID. If it uses neither, declare No and confirm the permission is absent from the merged manifest.
| Your app | Manifest | Play Console declaration |
|---|---|---|
| Shows ads (for example Google Mobile Ads) | Keep AD_ID; the SDK usually adds it | Yes, advertising or marketing |
| Analytics only (for example firebase_analytics) | Keep AD_ID, or remove it and turn off ad ID collection in the SDK | Yes with the analytics purpose, or No if removed |
| No ads and no analytics SDK | Confirm AD_ID is absent | No |
A developer who added firebase_analytics reported the warning "A manifest file in one of your active artifacts doesn't include the com.google.android.gms.permission.AD_ID permission" in Flutter issue 169454. The issue was closed as belonging in the FlutterFire repository, which is the useful part: the permission usually comes from a plugin, so the answer is in the plugin's documentation and your merged manifest, not in Flutter itself.
How do you fix the common AD_ID release warnings?
The warning text tells you which half is out of sync: either the declaration says the app uses the advertising ID and the manifest lacks the permission, or the other way round. Fix the side that is wrong, then upload a new bundle.
- "You must complete the advertising ID declaration": Play Console blocks releases that target Android 13 until the form is filled in, as developers describe in this Stack Overflow question. Answer it in App content.
- "A manifest file doesn't include the AD_ID permission": your declaration says Yes but an artifact lacks the permission. Add it back, or answer No if you really do not use it.
- Permission present but you answered No: a library added it. Remove it with
tools:node="remove"or answer Yes.
These checks sit best next to the other pre-release steps in our Flutter Firebase release checklist for Google Play, and they matter again when you raise the target API, as covered in the Play target API 36 guide for Flutter.
What do GSPTeck's own apps show?
As one real example, the Swappr listing on Google Play says the app contains ads and its Data safety section declares that no data is collected while device or other IDs may be shared with third parties (checked 2026-11-09). That is a coherent public answer for an ad-supported app, and it is the reason the Advertising ID declaration and Data safety should be filled in together. For the studio and its apps, see who GSPTeck is and where its official apps live.
FAQ
Does every Flutter app need the AD_ID permission?
No. It is only needed if the app or an SDK in it uses the advertising ID and targets Android 13 or higher. An app with no ads and no analytics SDK should not need it, but check the merged manifest because a plugin can add it.
What happens if I target Android 13 without the AD_ID permission?
If you do use the advertising ID, Google says it will be zeroed out, which can affect advertising and analytics. If you do not use it, nothing breaks, but the Play Console declaration must still be answered.
How do I see which plugin added AD_ID?
Open the manifest merger report under build/app/outputs/logs/ or use Android Studio's Merged Manifest view and search for AD_ID. Both show which manifest the permission came from.
What should I use instead of the advertising ID for analytics?
Google's Advertising ID help page points to the App Set ID for essential non-advertising use cases such as analytics and fraud prevention. Whether your analytics SDK uses it is a setting in that SDK, so read its documentation.
Sources
- Play Console Help: Advertising ID (checked 2026-11-09)
- Android Developers: Merge multiple manifest files (checked 2026-11-09)
- flutter/flutter issue 169454: Firebase Analytics AD_ID manifest permission (checked 2026-11-09)
- Swappr on Google Play: Data safety (checked 2026-11-09)