3***@qq.com
3***@qq.com
  • 发布:42 分钟前
  • 更新:41 分钟前
  • 阅读:27

【报Bug】离线打包 Get (5.24) SDK:隐私弹窗前 uni-ad 模块 ba_pull 即触发 MSA InitSdk 采集 OAID,早于用户同意

分类:uniCloud

产品分类: uniCloud/App

示例代码:

堆栈报错信息

com.bun.miitmdid.core.MdidSdkHelper.InitSdk(android.content.Context,boolean,com.bun.miitmdid.interfaces.IIdentifierListener)  
java.lang.reflect.Method.invoke(Native Method)  
io.dcloud.p.m3.a(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:27)  
io.dcloud.p.m3.b(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:1)  
io.dcloud.p.m3.c(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:2)  
io.dcloud.p.n4.b(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:34)  
io.dcloud.p.x3.b(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:7)  
io.dcloud.p.x3.a(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:36)  
io.dcloud.p.u3.b(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:1)  
io.dcloud.feature.gg.dcloud.ADHandler.pull(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:35)  
io.dcloud.feature.gg.dcloud.AolFeatureImpl.doForFeature(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:137)  
io.dcloud.feature.gg.AolFeatureImplMgr.doForFeature(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:5)  
io.dcloud.p.k.a(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:16)  
io.dcloud.a$a.run(r8-map-id-605b2a5c8742184084f62a640225086eefcd9237ae25847375566b7136421843:5)  
android.os.Handler.handleCallback(Handler.java:873)  
java.lang.reflect.Method.invoke(Native Method)

操作步骤:

六、诉求

  1. 请确认该行为是否为 5.24 版 SDK 的已知问题,是否有修复版本(SDK 5.24 后续小版本 / 新版 5+ 基座);
  2. 若无修复版本,能否提供官方补丁包,或将 uni-ad 的 ba_pull 初始化推迟到隐私弹窗同意之后(如在 Integrity 或 getAgreePrivacy 回调之后);
  3. 期望修复后"同意前不产生任何 OAID/设备标识采集行为",以通过应用宝合规复检。

    附:相关检测报告(应用宝报告场景2/5 截图)、反编译堆栈截图、logcat 时间线截图。

预期结果:

1.在点击隐私同意之前不能获取OAID。
2.第三方合规检测(腾讯应用宝)报告场景2/5:在用户点击"同意"隐私弹窗之前,SDK 已通过 MSA OAID SDK 获取了 OAID(报告中标称 CAID)。
3.真机 logcat 验证确认为 DCloud 5+ 基座自身行为(与本应用业务代码无关)。

实际结果:

1.在点击隐私同意之前不要收集OAID,
2.APP一直提示应用的uni-AD业务状态异常(-9001,-9002)。请登录https://uniadd.dcloud.net.cn

bug描述:

一、环境信息

  • AppID:UNI8969615
  • App 名称:众合星野 包名:com.xingye.hoshino
  • 打包方式:离线打包,HBuilderX 本地打包 App 资源 + Android Studio 离线集成工程
  • SDK 版本:5.24.82669_20260813(lib.5plus.base-release.aar 内置 uni-ad 模块 io.dcloud.feature.gg)
  • 运行系统:Android(应用宝合规检测环境 & 真机 logcat 验证)

    二、问题现象
    第三方合规检测(腾讯应用宝)报告场景2/5:在用户点击"同意"隐私弹窗之前,SDK 已通过 MSA OAID SDK 获取了 OAID(报告中标称 CAID)。
    真机 logcat 验证确认为 DCloud 5+ 基座自身行为(与本应用业务代码无关)。

    三、反编译确认的调用链(lib.5plus.base-release.aar)

    com.bun.miitmdid.core.MdidSdkHelper.InitSdk   ← MSA OAID SDK 初始化  
    ← io.dcloud.p.m3.a  
    ← io.dcloud.p.n4.b  
    ← io.dcloud.p.x3.b  
    ← io.dcloud.p.u3.b  
    ← io.dcloud.feature.gg.dcloud.ADHandler.pull  
    ← io.dcloud.feature.gg.dcloud.AolFeatureImpl.doForFeature  
    ← io.dcloud.feature.gg.AolFeatureImplMgr.doForFeature  
    ← io.dcloud.p.k.a  
    ← io.dcloud.a$a.run  (Activity onCreate Runnable)

    关键事实(反编译字节码佐证):

    1. io.dcloud.a$a.run 的 Runnable 内含字符串常量 "ba_pull",经 io/dcloud/p/k.a(Context,null,"ba_pull",null) 分发;
    2. AolFeatureImpl/ADHandler 已直接编译进 lib.5plus.base-release.aar classes.jar,非可选模块,无法简单剔除;
    3. ADHandler.pull 内:先调 t3.a(context, initConfig, handler) 初始化 AD SDK(此步即触发 MdidSdkHelper.InitSdk),之后才调用 DCloudAOLManager.setPrivacyConfig(privacyConfig);
    4. AolFeatureImpl.doForFeature 的 "ba_pull" 分支先调 ADHandler.pull,之后才调用 AppRuntime.hasPrivacyForNotShown —— 即隐私判断晚于采集发生。

    四、真机 logcat 时间线(pm clear + 外部存储清除后全新启动)

  • 启动即 DCloudApplication 初始化(DeviceInfo 第一次,外存未挂载)
  • 随后 PrivacyManager.showPrivacyDialog 弹出隐私弹窗
  • 但在这之前 onCreate Runnable 内的 ba_pull → MSA InitSdk 已执行,OAID 已写入 dcloud-ads.xml(oaid=xxx)与 pdr.xml(android_ten_ids)
  • 用户未点同意,即可在外存文件中检出 OAID —— 即"同意前采集"实锤

    五、已尝试无效的方案

    1. androidPrivacy.json 配 prompt:"template" + 弹窗内"暂不同意则退出" —— 只拦 JS 层,拦不住基座原生层;
    2. dcloud_control.xml 补 debug="false" syncDebug="false" —— 无效;
    3. 调用 SDK.setAgreePrivacy(Context,false)/isAgreePrivacy —— 无效,且 DCloudAOLManager.setPrivacyConfig 调用时序在 ADHandler 初始化之后,配置来不及生效;
    4. 对基座做 R8/裁剪剔除 uni-ad 类 —— 耦合过深(AolFeatureImplMgr 等在 lib.5plus.base 核心),有崩溃风险,未采用。

    六、诉求

    1. 请确认该行为是否为 5.24 版 SDK 的已知问题,是否有修复版本(SDK 5.24 后续小版本 / 新版 5+ 基座);
    2. 若无修复版本,能否提供官方补丁包,或将 uni-ad 的 ba_pull 初始化推迟到隐私弹窗同意之后(如在 Integrity 或 getAgreePrivacy 回调之后);
    3. 期望修复后"同意前不产生任何 OAID/设备标识采集行为",以通过应用宝合规复检。

    附:相关检测报告(应用宝报告场景2/5 截图)、反编译堆栈截图、logcat 时间线截图。

  • 但在这之前 onCreate Runnable 内的 ba_pull → MSA InitSdk 已执行,OAID 已写入 dcloud-ads.xml(oaid=xxx)与 pdr.xml(android_ten_ids)
  • 用户未点同意,即可在外存文件中检出 OAID —— 即"同意前采集"实锤

    五、已尝试无效的方案

    1. androidPrivacy.json 配 prompt:"template" + 弹窗内"暂不同意则退出" —— 只拦 JS 层,拦不住基座原生层;
    2. dcloud_control.xml 补 debug="false" syncDebug="false" —— 无效;
    3. 调用 SDK.setAgreePrivacy(Context,false)/isAgreePrivacy —— 无效,且 DCloudAOLManager.setPrivacyConfig 调用时序在 ADHandler 初始化之后,配置来不及生效;
    4. 对基座做 R8/裁剪剔除 uni-ad 类 —— 耦合过深(AolFeatureImplMgr 等在 lib.5plus.base 核心),有崩溃风险,未采用。

    六、诉求

    1. 请确认该行为是否为 5.24 版 SDK 的已知问题,是否有修复版本(SDK 5.24 后续小版本 / 新版 5+ 基座);
    2. 若无修复版本,能否提供官方补丁包,或将 uni-ad 的 ba_pull 初始化推迟到隐私弹窗同意之后(如在 Integrity 或 getAgreePrivacy 回调之后);
    3. 期望修复后"同意前不产生任何 OAID/设备标识采集行为",以通过应用宝合规复检。

    附:相关检测报告(应用宝报告场景2/5 截图)、反编译堆栈截图、logcat 时间线截图。

42 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-ad交流群 ) 咨询,群中有相关专业的管理员和群友。

感谢您提交详尽的 Bug 反馈。作为 DCloud 官方人员,结合资深 uni-ad 广告变现工程师的视角,对您反馈的“离线打包 SDK 在隐私弹窗前触发 MSA InitSdk 采集 OAID”问题进行评审与分析如下:

一、 Bug 反馈内容完整性评审

  1. Bug 描述:非常详细且专业。您不仅清晰描述了问题现象(应用宝合规检测报告与真机 logcat 验证),还通过反编译字节码提供了完整的调用链,并指出了 ADHandler.pull 内部初始化与隐私配置生效的时序错位。这对官方人员定位问题有极大帮助。
  2. 代码示例与复现步骤:您提供的堆栈信息完整,复现步骤清晰。通过 pm clear 及清外存后全新启动验证,排除了历史缓存干扰,确认为基座原生层 onCreate 阶段触发,复现逻辑严密。
  3. 预期与实际结果:预期结果合理(符合工信部及应用市场合规要求),实际结果有日志和文件检测实锤,非误报。
  4. 附件相关:提示您,我无法识别和查看附件内容(如截图),后续如需深入排查,请以文字或日志文本形式提供关键信息。

二、 Bug 是否成立及合规风控分析

根据您提供的调用链 io.dcloud.feature.gg.dcloud.ADHandler.pull 触发 MdidSdkHelper.InitSdk,结合知识库中历史类似案例(如 APP上架应用宝 同意隐私政策前 获取了OAID 被打回几次了),该 Bug 现象成立。

uni-ad 广告商业化与合规风控 的角度来看:
在广告变现链路中,OAID 等设备标识是广告归因、反作弊和精准投放的核心参数。如果 SDK 在用户同意隐私政策前就初始化获取,将直接违反应用市场合规检测要求,导致应用被拒。DCloud 官方一直强调广告 SDK 必须在用户同意隐私政策后才能初始化。您反馈的 lib.5plus.base-release.aar 内置 uni-ad 模块在 Activity onCreate 阶段通过 ba_pull 提前触发拉取,且晚于采集才调用隐私状态判断,属于 SDK 内部时序缺陷。

三、 解决方案与排查建议

针对当前离线打包遇到的合规阻断问题,建议采取以下应对方案:

1. 确保配置 Template 模式原生隐私弹窗
离线打包目前仅支持配置 uni-app 提供的原生隐私弹窗,自定义原生隐私弹窗无法规避底层 SDK 的隐私合规问题。请务必在 manifest.json 中配置 prompt: "template"。参考文档:Android平台隐私与政策提示框

2. JS 层补充 plus.ad.setPrivacyConfig 配置
在应用启动(如 App.vueonLaunch)且用户同意隐私政策后,调用以下代码明确配置广告隐私权限,限制 SDK 获取相关信息的时机与范围:

plus.ad.setPrivacyConfig({  
    "isCanUsePhoneState": false, // 视情况配置  
    "isCanGetOAID": false, // 若暂不需要OAID归因,可尝试设为false  
    // 其他配置项视业务需求而定  
})

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

3. 检查 SDK 版本与离线包依赖
根据知识库记录,DCloud 在部分版本迭代中修复过类似提前获取设备信息的问题。请确认您当前使用的 5.24.82669_20260813 SDK 是否为官方最新稳定版。建议前往 Android 离线 SDK 下载页 核对并下载最新的 lib.5plus.base-release.aar 及相关依赖进行替换测试。

4. 补充隐私政策文本
在修改代码配置的同时,务必在您的《隐私政策》中单独披露 uni-ad 及相关广告联盟 SDK(包含 MSA OAID SDK)收集 OAID 等信息的目的、方式和范围。参考:Android平台各功能模块隐私合规协议

四、 诉求回应与后续跟进

  1. 确认已知问题与修复版本:该问题属于 SDK 内部时序引发的风控缺陷,DCloud 相关团队已关注此类合规场景。建议您尝试更新至最新离线 SDK 版本验证是否已修复。
  2. 官方补丁与基座支持:由于 uni-ad 核心类深度耦合在基座核心库中,不建议您通过 R8 裁剪剔除。如果最新版 SDK 依然存在该问题,由于涉及底层聚合 SDK 的风控与商务策略,建议您携带 AppID(UNI8969615)及完整检测报告,前往 uni-ad交流群 联系官方商务或技术人员获取针对性的补丁支持或解决方案。
内容为 AI 生成,仅供参考

要回复问题请先登录注册