集成AppsFlyer SDK后Google Play Console报AD_ID权限错误求助
问题原因及解决办法
核心原因
- 依赖传递注入权限:Firebase Crashlytics关联的
play-services-ads-identifier模块会自动向Manifest中注入AD_ID权限,即便手动添加tools:node="remove",若依赖合并优先级或配置细节出错,仍会导致权限残留。 - Manifest合并规则失效:
tools:node="remove"的生效需要正确配置tools命名空间,且需确保该声明的合并优先级高于其他引入AD_ID权限的依赖,否则会被覆盖。 - AppsFlyer SDK配置遗漏:6.12.2版本的AppsFlyer SDK默认可能仍尝试收集广告ID,即便Manifest移除权限,若初始化时未禁用该逻辑,可能触发Google Play的权限检测机制。
分步解决办法
1. 修正Manifest配置
确保Manifest满足以下要求:
- 根标签
manifest中包含tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="your.package.name">
- 正确添加权限移除声明:
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove" />
2. 阻断依赖传递的权限
- 打开
app/build/reports/manifest-merger/debug-report.txt(或release版本报告),搜索com.google.android.gms.permission.AD_ID,定位引入该权限的依赖。 - 若来源为Firebase相关依赖,在
build.gradle中排除对应模块:
// 以Firebase Crashlytics为例 implementation('com.google.firebase:firebase-crashlytics:xx.x.x') { exclude group: 'com.google.android.gms', module: 'play-services-ads-identifier' }
3. 禁用AppsFlyer广告ID收集
在Application类的初始化代码中,明确关闭广告ID收集逻辑:
AppsFlyerProperties.getInstance().setBoolean(AppsFlyerProperties.DISABLE_AD_ID_COLLECTION, true); AppsFlyerLib.getInstance().init(AF_DEV_KEY, null, this);
4. 验证权限移除结果
生成签名后的APK/AAB,用aapt工具检查Manifest:
aapt dump badging your-app.aab | grep "com.google.android.gms.permission.AD_ID"
若无输出,说明权限已成功移除;若仍有输出,重新检查依赖排除和Manifest配置。
5. 同步Google Play Console内容声明
在Google Play Console的应用内容→数据安全板块,明确选择「不收集广告ID」,确保内容声明与实际权限状态一致。
内容的提问来源于stack exchange,提问作者Wicaledon
相关产品推荐
相关产品推荐

