y***@outlook.com
y***@outlook.com
  • 发布:2026-06-11 19:18
  • 更新:2026-06-11 19:19
  • 阅读:69

不用安卓原生隐私政策提示框,有办法避免在同意隐私政策前获取OAID的问题吗

分类:uni-app

目前上架安卓应用市场大概率会被机审驳回,提示下面的问题,看了下应该是Uniapp的原生层在没配置安卓原生隐私政策模板时,会直接获取OAID。因为我们的隐私政策弹窗需要一些定制化控件,模板无法满足,还有其他办法可以避免这个问题吗?

场景5:APP向用户明示SDK的收集使用规则,未经用户同意,SDK存在收集IMEI、设备MAC地址和软件安装列表、通讯录和短信等信息的行为。
APP以个人信息处理规则隐私政策弹窗等形式向用户明示个人信息处理的目的、方式和范围,未经用户同意,(SDK: OPPO匿名设备标识符(OAID))存在收集(读取OAID)的行为。

2026-04-21 14:36:40.259 -> [测试动作] 启动史宾格隐私合规检测
2026-04-21 14:36:45.188 -> (SDK: OPPO匿名设备标识符(OAID)读取OAID
2026-04-21 14:37:39.010 -> 弹出隐私政策

    com.heytap.openid.IOpenID  
    at android.os.Parcel.writeInterfaceToken()  
    at com.heytap.openid.a$a$a.a(Unknown Source:10)  
    at com.heytap.openid.sdk.c.b(Unknown Source:112)  
    at com.heytap.openid.sdk.c.a(Unknown Source:88)  
    at com.heytap.openid.sdk.OpenIDSDK.c(Unknown Source:12)  
    at com.bun.miitmdid.c.i.a.getVAID(Unknown Source:4)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at io.dcloud.common.adapter.util.PlatformUtil.invokeMethod(r8-map-id-4693bad0aaa94051d701483b5008bd96bc8e944ba1f0761f87775fd00bab3ef9:37)  
    at io.dcloud.p.e3$c.invoke(r8-map-id-4693bad0aaa94051d701483b5008bd96bc8e944ba1f0761f87775fd00bab3ef9:18)  
    at java.lang.reflect.Proxy.invoke(Proxy.java:1006)  
    at $Proxy5.OnSupport(Unknown Source)  
    at com.bun.miitmdid.core.MdidSdk.OnSupport(Unknown Source:4)  
    at com.bun.miitmdid.c.i.a$a.run(Unknown Source:32)  
    at java.lang.Thread.run(Thread.java:919)
2026-06-11 19:18 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

针对你提到的“不使用安卓原生隐私政策模板,但需要避免在同意隐私政策前获取OAID”这个问题,结合你提供的检测日志和堆栈信息,核心矛盾在于:uni-app 框架层在应用启动早期就会初始化 OAID 相关的 SDK,而自定义的隐私弹窗(custom模式)无法在时间上阻塞这个初始化过程。

根据知识库中的明确说明和多个类似案例,目前有以下解决方案和现实情况需要你了解:

1. 核心原因
从你的堆栈信息 com.bun.miitmdidio.dcloud 相关调用可以看出,获取 OAID 的行为发生在 uni-app 的框架初始化阶段,这早于你用 H5 页面写的任何自定义隐私弹窗的显示时机。知识库中也有明确指出:目前设置custom模式策略,并不能完全避免在弹出隐私提示框之前,读取设备信息的情况,主要原因是自定义模式隐私提示框并不能阻塞应用的生命周期

2. 唯一可行的官方方案:使用 template 模式
目前,要彻底解决“同意隐私政策前获取OAID”的问题,唯一被市场审核认可且技术上行之有效的方法,就是使用 uni-app 提供的原生隐私政策模板(template 模式)。

  • 配置方法:在 manifest.json 文件中,切换到“App启动界面配置”,在“Android启动界面样式”中勾选“使用原生隐私政策提示框”。或者直接在源码视图中配置 privacy 节点为 template
  • 原理:此模式下的弹窗是原生组件,它会在应用启动的 Splash 阶段、系统授权框弹出之前就显示,并且会阻塞后续的应用初始化流程。只有用户点击“同意”后,uni-app 的框架和集成的各种SDK才会继续初始化,从而从根本上避免了在同意前获取 OAID。

3. 关于你的定制化需求
你提到隐私政策弹窗需要一些定制化控件,而原生模板无法满足。这是一个确实存在的限制。目前的知识库和社区讨论中,没有提供在 custom 模式下能完全阻止框架提前获取 OAID 的方法。因此,你需要在“审核通过”和“弹窗样式个性化”之间做一个权衡。

一个折中的思路是:先使用 template 模式通过应用市场的机审,确保应用能够顺利上架。对于模板弹窗的样式,它支持配置标题、内容(富文本,可包含链接)、按钮文字,你可以检查这些配置项是否能满足你的基本需求。

4. 不推荐的方案与补充建议

  • 禁用 OAID:你可以在 manifest.jsonapp-plus -> distribute -> android 节点下添加 "enableOAID": false 来禁用框架的 OAID 获取。但这会导致 plus.device.getOAID 接口返回空字符串,如果你的业务或依赖的其他SDK需要OAID,则此方案不可行。
  • 更新隐私政策文本:无论采用哪种方式,都必须确保你的《隐私政策》文本中,已经明确披露了应用会收集 OAID 以及收集的目的、方式和范围。特别是要包含为使用 DCloud uni-app 框架而收集设备唯一识别码的声明,具体可以参考文档中的隐私政策注意事项

总结:在当前的 uni-app 框架机制下,想要实现完全自定义的隐私弹窗,同时又要在用户同意前彻底阻止 OAID 的获取,是无法做到的。建议你优先配置 template 模式来解决上架审核问题。

如果你对原生模板的配置细节有疑问,可以参考官方文档:Android平台隐私与政策提示框

内容为 AI 生成,仅供参考

要回复问题请先登录注册