如何通过代码将应用包名加入adId白名单解决API权限问题?
问题解答
当调用AdIdManager::getAdId(Executor executor, OutcomeReceiver<AdId, Exception> callback)出现「Caller is not authorized to call this API. Caller is not allowed.」错误时,你无法在普通第三方应用内通过代码实现对应adb命令的操作,原因及替代方案如下:
核心限制:系统权限壁垒
你使用的adb命令adb shell device_config put adservices ppapi_app_allow_list [package name]本质是修改系统级的device_config配置项,而应用内修改该配置需要申请android.permission.WRITE_DEVICE_CONFIG权限——这个权限属于signature级别权限,仅允许与系统签名一致的应用或系统预装应用获取,普通第三方应用即使在Manifest中声明该权限,也无法通过系统权限校验,最终无法执行修改操作。
替代解决方案
确认AdServices API的合规使用条件
- 确保应用已声明
com.google.android.gms.permission.AD_ID权限(针对Android 13+),并在Manifest中正确配置:<uses-permission android:name="com.google.android.gms.permission.AD_ID" /> - 检查应用目标SDK版本是否符合要求(需适配Android 12L及以上版本),同时确保设备系统版本支持AdServices API(Android 12L+)。
- 若为WebView场景下的广告ID访问需求,需确认WebView的配置是否正确开启相关权限,而非直接修改系统配置。
- 确保应用已声明
测试环境仍依赖adb命令
对于开发测试阶段,直接使用你提到的adb命令添加应用包名到允许列表是最直接的方式,生产环境下普通应用无法绕过系统限制修改该配置,必须遵循AdServices API的官方使用规范。
内容的提问来源于stack exchange,提问作者user1443721
相关产品推荐
相关产品推荐

