3***@qq.com
3***@qq.com
  • 发布:2026-10-15 23:03
  • 更新:2026-10-15 23:03
  • 阅读:36

【报Bug】云打包正式版:隐私弹窗前基座内置 uni-ad 模块触发 MSA 采集 OAID,vivo 云测引擎二不通过(附堆栈与反编译证据)

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 22H2(10.0.19045)

HBuilderX类型: 正式

HBuilderX版本号: 5.26

手机系统: Android

手机系统版本号: Android 14

手机厂商: vivo

手机机型: vivo 云测真机(vivo 设备)

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
com.heytap.openid.IOpenID  
at android.os.Parcel.writeInterfaceToken()  
at com.heytap.openid.a$a$a.a(UnknownSource:10)  
at com.heytap.openid.sdk.c.b(UnknownSource:112)  
at com.heytap.openid.sdk.c.a(UnknownSource:76)  
atcom.heytap.openid.sdk.OpenIDSDK.b(UnknownSource:12)  
at com.bun.miitmdid.c.i.a.getOAID(UnknownSource:4)  
at java.lang.reflect.Method.invoke(NativeMethod)  
atio.dcloud.common.adapter.util.PlatformUtil.invokeMethod(r8-map-id-88b31a2baf8f8710a0a1c7e0038da6d8f97e7b88c05ed585fde27f42362ed8fc:37)  
atio.dcloud.p.g3$c.invoke(r8-map-id-88b31a2baf8f8710a0a1c7e0038da6d8f97e7b88c05ed585fde27f42362ed8fc:17)  
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)  
at $Proxy5.OnSupport(Unknown Source)  
atcom.bun.miitmdid.core.MdidSdk.OnSupport(Unknown Source:4)  
at com.bun.miitmdid.c.i.a$a.run(UnknownSource:32)  
at java.lang.Thread.run(Thread.java:919)

操作步骤:
1. HBuilderX 5.26.2026091802 打开 uni-app 工程(AppID __UNI__550AEB8,包名com.zhihuitun.paigongbao,  
app-plus.modules 仅 Push +Barcode;sdkConfigs 仅 push.unipush),  
androidPrivacy.json 配置 template 模式隐私弹窗;  
2. 菜单「发行」→「原生App-云打包」→ Android→ 正式版(使用自有证书);  
3. 打包完成后,将 APK 上传至 vivo 开放平台(dev.vivo.com.cn)→ 应用管理 → 云测 →  
创建自动化测试任务 → 勾选「隐私测试」→ 提交;  
4. 等待检测完成,查看「隐私测试 → 引擎二」结果;  
5. 结果:判定不通过,风险信息为「未经用户同意,(SDK: OPPO匿名设备标识符(OAID))存在收集(读取OAID)的行为」,  
时间线显示读取 OAID 早于隐私政策弹窗。  
(注:连续打包 1.1.6 / 1.1.7 / 1.1.8 三个版本,均在同一环节复现)

预期结果:
用户点击隐私政策弹窗「同意」之前,应用与所集成SDK 均不产生任何设备标识(OAID/IMEI/IMSI 等)读取行为;  
vivo 云测隐私测试引擎二通过。

实际结果:
应用启动后约 42 秒(隐私政策弹窗弹出之前)即读取 OAID,vivo 云测引擎二判定不通过。  
堆栈显示发起方为 io.dcloud.* 基座代码,且 APK 内确实内置了 uni-ad 模块  
(AolFeature / ADHandler / ba_pull /DCloudAOLManager),而本工程并未配置任何广告能力。

bug描述:

现象:Android 云打包正式版提交 vivo 开放平台「云测-隐私测试」,引擎二判定不通过:

APP 以个人信息处理规则隐私政策弹窗等形式向用户明示个人信息处理的目的、方式和范围,
未经用户同意,(SDK: OPPO 匿名设备标识符(OAID)) 存在收集(读取 OAID) 的行为。
vivo 报告给出的时间线:

  • 18:50:21 启动隐私合规检测
  • 18:51:03 读取 OAID(早于隐私弹窗)
  • 18:52:26 弹出隐私政策
    同一问题连续 3 个版本复现(1.1.6 / 1.1.7 /1.1.8),启动到读取 OAID 的间隔稳定在约 42 秒。
    调用堆栈(vivo 报告原文):
    atcom.heytap.openid.sdk.OpenIDSDK.b(UnknownSource:12)  
    at com.bun.miitmdid.c.i.a.getOAID(UnknownSource:4)  
    at java.lang.reflect.Method.invoke(NativeMethod)  
    atio.dcloud.common.adapter.util.PlatformUtil.invokeMethod(...)  
    at io.dcloud.p.g3$c.invoke(...)  
    at java.lang.reflect.Proxy.invoke(Proxy.java:1006)  
    at $Proxy5.OnSupport(Unknown Source)  
    atcom.bun.miitmdid.core.MdidSdk.OnSupport(Unknown Source:4)  
    at com.bun.miitmdid.c.i.a$a.run(UnknownSource:32)  
    at java.lang.Thread.run(Thread.java:919)

    即:调用方为 io.dcloud.* 基座代码(io.dcloud.p.g3$c →PlatformUtil.invokeMethod),在 MSA
    (com.bun.miitmdid)初始化的 OnSupport 回调中主动调用 getOAID。
    APK 反编译证据——包内内置了 uni-ad 广告模块(而本项目完全没有广告配置):

    classes2.dex : AolFeature×16, ADHandler×45,DCloudAOLManager×5,  
    ba_pull×1, dcloud-ads×1, adpid×5, uniad×2,AOLManager×5  
    classes.dex : ba_pull×1, DCloudAOLManager×1,aol×4  
    assets/apps/__UNI__550AEB8/www/view.umd.min.js : adpid×6, uni-ad×4  
    resources.arsc : adpid×6

    本工程 manifest.json 中:

  • app-plus.modules 仅 { "Push": {}, "Barcode": {}}(无 Ad)
  • app-plus.distribute.sdkConfigs 仅push.unipush(version 2, offline true)
  • 全文检索 "ad" / uniad / adpid / 广告 计数均为 0
    ⇒ uni-ad 模块系基座(lib.5plus.base)默认内置,并非本项目引入。
    社区已有同类反馈(ask.dcloud.net.cn/question/221425):
    「uni-ad 模块 ba_pull 在隐私弹窗前即触发 MSAInitSdk 采集 OAID,早于用户同意」,
    且 OAID 会被写入 dcloud-ads.xml / pdr.xml。与本例现象一致。
    已尝试且无效的整改(均已解包/真机验证):
    1. androidPrivacy.json 配 prompt:"template" +二次确认 + 拒绝退出 —— 弹窗时序正常,
      但只拦 JS 层,拦不住基座原生层(本次堆栈发生在原生层);
    2. manifest 关闭 uniStatistics(enable:false),解包确认 app-service.js 中
      tongji.dcloud.io 计数为 0 —— 无效;
    3. 配置app-plus.distribute.android.pushRegisterMode= "manual",并改造业务代码:
      仅在页面加载后调用 uni.getPushClientId(),且增加 plus.runtime.isAgreePrivacy() 判定 —— 无效;
    4. 隐私政策已按官方模板完整声明(SDK 清单第 1 项):
      「DCloud uni-app 应用引擎……应用运行期间引擎会收集设备唯一识别码(Android ID、OAID,
      在可获取时可能包括 IMEI、IDFA、SIM 卡 IMSI 信息)……详情请访问《DCloud App引擎隐私政策》」—— 检测结果未变化;
    5. 工程无任何原生插件、未离线打包;已确认无统计/一键登录/广告模块配置。
2026-10-15 23:03 负责人:无 分享
已邀请:

要回复问题请先登录或注册