应用上架时 未同意隐私政策获取软件序列号 我们自己没有去主动获取过
里面写的主动获取的是 DCloud 开发通用工具库 下面传了截图的 不知道什么原因 没有额外增加插件 也没有加主动调用的东西 纯js代码就改了 之前的包就可以上架后面就不行了 一直报 :DCloud 开发通用工具库 获取软件序列号
- 发布:2026-08-12 09:29
- 更新:2026-08-12 09:47
- 阅读:40
欢迎到专业群( HBuilderX技术交流群 ) 咨询,群中有相关专业的管理员和群友。
根据您描述的情况(应用上架被驳回,提示“DCloud 开发通用工具库”在授权前获取硬件序列号,但您并未主动调用相关代码),这通常与 DCloud 基础 SDK 的合规机制 或 隐私政策配置 有关。以下是针对该问题的排查和解决方案:
1. 核心原因分析
- DCloud 基础 SDK 行为:即使用户未主动调用,
io.dcloud基础库(如广告模块AolFeatureImpl、设备信息统计等)可能在应用启动时自动初始化并尝试获取设备信息(如序列号、Android ID),尤其是在 用户点击“同意”隐私政策前。 - 隐私政策配置问题:如果隐私政策弹窗未正确配置(如未使用
template模式),或第三方 SDK(如 uni-ad、推送、统计等)在同意前初始化,会触发违规。 - 历史版本差异:您提到“之前的包可以上架,后面不行了”,可能是因为:
- DCloud SDK 版本更新后,合规策略收紧(如 Android 12+ 对
READ_PHONE_STATE权限的限制)。 - 应用市场审核规则更新(如华为、应用宝对“授权前行为”检测更严格)。
- DCloud SDK 版本更新后,合规策略收紧(如 Android 12+ 对
2. 解决方案步骤
步骤 1:确保使用 template 模式隐私弹窗
在 manifest.json 中配置隐私政策弹窗为 template 模式,并确保 用户点击“同意”前,APP 和 SDK 不执行任何行为(包括初始化、获取设备信息)。
配置示例(manifest.json -> app-plus -> privacy):
{
"app-plus": {
"privacy": {
"prompt": "template",
"title": "服务协议和隐私政策",
"message": "请您务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款...",
"buttonAccept": "同意并接受",
"buttonRefuse": "拒绝",
"hrefLoader": "system", // 使用系统浏览器加载隐私链接,避免 WebView 提前初始化
"disagreeMode": {
"support": false, // 用户拒绝后是否继续运行(建议设为 false)
"loadNativePlugins": false, // 拒绝后是否加载原生插件
"visitorEntry": false, // 是否提供游客模式
"showAlways": false // 是否每次启动都显示弹窗
}
}
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
关键点:
prompt必须为"template"。hrefLoader建议设为"system",避免使用内置 WebView 加载隐私链接(可能触发 SDK 初始化)。disagreeMode.support建议设为false(用户拒绝后直接退出,避免后续逻辑触发 SDK)。
步骤 2:检查并移除违规的第三方 SDK
根据知识库中的案例,以下 SDK 可能在授权前获取设备信息:
- uni-ad(广告):如优量汇、穿山甲等。
- 推送 SDK:如 UniPush、个推、友盟。
- 统计 SDK:如友盟统计、百度统计。
- 其他原生插件:如微信支付、支付宝支付、地图 SDK。
操作:
- 在
manifest.json中 取消勾选所有非必需的模块(如广告、推送、统计)。 - 如果必须使用这些模块,确保:
- 在用户点击“同意”隐私政策 后 再初始化(通过
plus.runtime.isAgreePrivacy()判断)。 - 在隐私政策中明确声明 SDK 收集的信息(如设备序列号、Android ID)。
- 在用户点击“同意”隐私政策 后 再初始化(通过
示例代码(在 App.vue 的 onLaunch 中延迟初始化):
onLaunch() {
// 检查用户是否已同意隐私政策
if (plus.runtime.isAgreePrivacy()) {
// 初始化广告、推送等 SDK
this.initSDKs();
} else {
// 监听隐私政策同意事件
plus.runtime.onPrivacyAgree(() => {
this.initSDKs();
});
}
},
methods: {
initSDKs() {
// 初始化 uni-ad
plus.ad.setPrivacyConfig({
isCanUsePhoneState: true, // 是否允许获取 IMEI
isCanGetInstallAppList: false, // 禁止获取应用列表
isCanGetRunningApps: false, // 禁止获取后台运行应用
});
// 初始化推送
plus.push.setAutoNotification(true);
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
步骤 3:关闭调试模式(离线打包必做)
如果您的 APP 是 离线打包,请务必关闭调试开关:
- 修改项目中的
dcloud_control.xml文件:<debug syncDebug="false" />本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
- 重新打包并提交审核。
步骤 4:验证授权前行为
使用 小米手机(MIUI 12+) 安装您的 APP,检查:
- 首次启动时,未点击“同意”前,进入
设置 -> 应用管理 -> 您的应用 -> 应用行为记录。 - 查看是否有 获取设备序列号、Android ID、MAC 地址 等行为。
- 如果有,说明仍有 SDK 在授权前运行,需进一步排查。
步骤 5:更新 HBuilderX 和依赖
- 确保使用 HBuilderX 最新正式版(当前为 5.23+)。
- 更新所有依赖:
npm update本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
- 重新云端打包。
3. 特殊情况处理
情况 1:用户拒绝隐私政策后仍收集信息
根据知识库中的案例(DCloud问答_203601),如果用户点击“拒绝”后仍触发硬件序列号收集,可以尝试:
- 将
disagreeMode.support设为false(用户拒绝后直接退出)。 - 如果必须提供“游客模式”,将
visitorEntry设为true,但确保游客模式下不初始化任何 SDK。
情况 2:隐私政策链接导致违规
如果隐私政策链接是通过 WebView 加载的(非 system 模式),可能会触发 chromium SDK 获取设备信息。解决方案:
- 在
manifest.json中设置hrefLoader: "system"(使用系统浏览器打开链接)。 - 确保隐私政策页面 不包含任何 JS 代码(如统计、定位等)。
4. 参考链接
5. 总结
- 首要任务:确保隐私政策弹窗为
template模式,且hrefLoader为system。 - 延迟初始化:所有第三方 SDK 必须在用户同意隐私政策后初始化。
- 关闭调试:离线打包时关闭
syncDebug。 - 验证:使用小米手机检查授权前行为。
- 更新:使用最新 HBuilderX 和依赖重新打包。
如果问题仍未解决,建议提供以下信息到 DCloud 官方论坛 进一步排查:
- 完整的
manifest.json配置截图。 - 应用市场返回的 完整检测报告(含调用栈)。
- 是否集成了第三方原生插件(如推送、统计、支付等)。
