Flutter and the Play Advertising ID: Do You Need the AD_ID Permission and Declaration? (2026)

By · Published 2026-11-09 · Last verified 2026-11-09

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.

Grid of the 5-step Flutter advertising ID check: build a release and read the merged manifest, decide if you use the ID, match the manifest, answer the Play declaration and keep Data safety consistent
The 5-step Advertising ID check.

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.

  1. Build a release and read the merged manifest. Run flutter build apk --release, then aapt2 dump permissions build/app/outputs/flutter-apk/app-release.apk from the Android SDK build-tools, or open the manifest merger report under build/app/outputs/logs/. Search for AD_ID. Android's manifest documentation also describes the Merged Manifest view in Android Studio for this.
  2. 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.
  3. 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 with tools:node="remove" and the xmlns:tools namespace, 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.
  4. 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.
  5. 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.
Two columns showing that a Yes declaration needs AD_ID kept in the manifest while a No declaration needs it removed or absent from the merged manifest
Manifest and declaration must agree.

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 appManifestPlay Console declaration
Shows ads (for example Google Mobile Ads)Keep AD_ID; the SDK usually adds itYes, advertising or marketing
Analytics only (for example firebase_analytics)Keep AD_ID, or remove it and turn off ad ID collection in the SDKYes with the analytics purpose, or No if removed
No ads and no analytics SDKConfirm AD_ID is absentNo

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.

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.

Two columns showing which Advertising ID answer fits an app with ads or analytics and which fits an app with neither
Which answer fits your app.

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.

Vertical Pinterest graphic with five points on the Flutter AD_ID permission and Play Advertising ID declaration
Pinterest pin: Flutter AD_ID.

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