uni-app 小米商店发布提示在隐私政策之前获取了手机SERIALNO
uni-app 小米商店发布提示在隐私政策之前获取了手机SERIALNO
操作步骤
小米审核
预期结果
通过审核
实际结果
未通过
bug描述
小米发布应用商店审核,暴「存在隐私违规问题」,在同意隐私政策之前,去读取了手机的SERIALNO。 隐私政策用的androidPrivacy.json,在隐私弹窗前没有做任何操作。 堆栈信息为 硬件序列号 发生时间:2024-11-11 17:07:32 违规md5:md5=FA5A6D00470F168FC12D43E62335AF1C, 违规动作:action=android.permission.READ_PHONE_STATE_SERIALNO, 违规详情:content=JAVA反射读取Build.SERAIL,callstack:java.lang.Class.getField:1605;io.dcloud.e.f.a$b.f:1;io.dcloud.e.f.a$b.e:6;io.dcloud.e.f.a$b.<clinit>:1;io.dcloud.e.f.a$b.b:1;io.dcloud.e.f.a.a:65;io.dcloud.e.f.a.a:22;io.dcloud.e.f.b.a:10;io.dcloud.e.f.b.<init>:6;io.dcloud.e.f.b.a:4;io.dcloud.feature.gg.dcloud.AolFeatureImpl.doForFeature:136;io.dcloud.feature.gg.AolFeatureImplMgr.doForFeature:5;io.dcloud.a.a:16;io.dcloud.b$a.run:5;android.os.Handler.handleCallback:873;android.os.Handler.dispatchMessage:99;android.os.Looper.loop:193;android.app.ActivityThread.main:7175;java.lang.reflect.Method.invoke:-2;com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run:493;com.android.internal.os.ZygoteInit.main:858;
开发环境与版本信息
项目创建方式 | HBuilderX |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | Windows 10 企业版 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
手机系统 | Android |
手机系统版本号 | Android 12 |
手机厂商 | 小米 |
手机机型 | 小米 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 离线 |
一样的,小米也是提示了违规动作:action=android.permission.READ_PHONE_STATE_SERIALNO,还没点隐私弹窗的按钮,就说提前获取了,导致上架不了
+1
刚问了小米,他这个检测也可能是点了不同意后继续进入页面拿到的堆栈信息,想问一下uniapp,在不同意隐私政策后,什么情况下会调用到获取SERIALNO,uni.getStorageSync或者uni.getSystemInfoSync()这种方法会吗?
回复 uniapp_hikha: 不会。uni的api不涉及访问SERIALNO
回复 DCloud_heavensoft: 只看堆栈信息,具体能看见是哪个方法调用到了吗?
回复 uniapp_hikha: 我看了一下,点击不同意怎么能进入应用呢?进入应用肯定代表了同意隐私协议。
回复 DCloud_Android_zl: 目前应用没有做不同意退出的逻辑,我们不同意也可以进入应用。
回复 uniapp_hikha: 如果不同意隐私协议也可以进入应用,应该走游客模式,游客模式下不会获取隐私信息。
请问有解决吗,我们也是被拒了一摸一样的原因,也是用的androidPrivacy.json
临时方案,隐私弹窗拒绝退出应用,可以过审,其他不行。
回复 uniapp_hikha: 是因为不同意进入程序时,某个api调用的?
回复 天青一色: 不清楚,官方也没回复我,还在研究。
回复 uniapp_hikha: 好的好的,谢谢大佬
可以发一下包
回复 uniapp_hikha: 请教下 隐私弹窗拒绝退出应用 是如何实现的。
回复 shb: 可以了, 隐私弹窗拒绝退出应用,可以通过商店自动化检测了。
可以参考文档中上架和隐私章节对照是否配置有问题:https://uniapp.dcloud.net.cn/tutorial/android-store.html
一般出现这类问题是因为开启了游客模式,进入应用之后调用了隐私相关的API。游客模式参考文档:https://uniapp.dcloud.net.cn/tutorial/app-disagreemode.html
用户如果不同意隐私政策的情况下应该进入游客模式。游客模式适配参考第一条
配置隐私弹窗时一定要配置使用template模式。否则无法上架应用市场。应用内部自己实现的隐私弹窗也不行。
目前这个问题有解决方案吗?
可以参考文档中上架和隐私章节对照是否配置有问题:https://uniapp.dcloud.net.cn/tutorial/android-store.html
一般出现这类问题是因为开启了游客模式,进入应用之后调用了隐私相关的API。游客模式参考文档:https://uniapp.dcloud.net.cn/tutorial/app-disagreemode.html
用户如果不同意隐私政策的情况下应该进入游客模式。游客模式适配参考第一条
配置隐私弹窗时一定要配置使用template模式。否则无法上架应用市场。应用内部自己实现的隐私弹窗也不行。
请问这个问题有解决方案了吗,小米官方有给答复吗
可以参考文档中上架和隐私章节对照是否配置有问题:https://uniapp.dcloud.net.cn/tutorial/android-store.html
一般出现这类问题是因为开启了游客模式,进入应用之后调用了隐私相关的API。游客模式参考文档:https://uniapp.dcloud.net.cn/tutorial/app-disagreemode.html
用户如果不同意隐私政策的情况下应该进入游客模式。游客模式适配参考第一条
配置隐私弹窗时一定要配置使用template模式。否则无法上架应用市场。应用内部自己实现的隐私弹窗也不行。
这个问题大家都是怎么解决的哦,直接配置拒绝就退出应用吗
是的, 隐私弹窗拒绝退出应用,可以通过商店自动化检测了。
在处理 uni-app 应用在小米商店发布时遇到的“在隐私政策之前获取了手机 SERIALNO(序列号)”的提示时,通常意味着应用在用户同意隐私政策之前就已经尝试访问了设备的敏感信息,如设备的序列号。这违反了许多应用商店对于用户隐私保护的规定。为了解决这个问题,你需要在用户同意隐私政策之后再获取设备的 SERIALNO。
以下是一个简单的示例代码,展示了如何在用户同意隐私政策后再获取 SERIALNO。请注意,由于 Android 10(API 级别 29)及更高版本对访问设备标识符(如 SERIALNO)施加了更严格的限制,你可能需要使用其他方法来唯一标识设备,或者确保你的应用具有必要的权限。
示例代码
- 在
manifest.json
中声明权限(注意:获取 SERIALNO 的权限在 Android 10+ 上可能不再有效):
"mp-weixin": {
// ...
},
"app-plus": {
"distribute": {
// ...
},
"permission": {
"READ_PHONE_STATE": {
"desc": "需要读取设备信息以便提供更好的服务"
}
}
}
- 在用户同意隐私政策后获取 SERIALNO:
// 假设你有一个按钮用于显示隐私政策,用户点击后同意
document.getElementById('privacyPolicyButton').addEventListener('click', function() {
// 显示隐私政策页面(这里可以是弹窗或者跳转到新页面)
showPrivacyPolicy();
});
function showPrivacyPolicy() {
// 假设这是一个异步操作,用户同意后调用 onPrivacyPolicyAccepted
// 这里用 setTimeout 模拟异步操作
setTimeout(() => {
onPrivacyPolicyAccepted();
}, 3000); // 假设用户3秒后同意
}
function onPrivacyPolicyAccepted() {
if (plus.os.name === 'Android') {
// 注意:在 Android 10+ 上,获取 SERIALNO 可能不再有效
let serialno = plus.device.serialnumber;
console.log('Device Serial Number:', serialno);
} else {
console.log('This feature is only available on Android.');
}
}
注意:
- 在实际开发中,你应该使用更合适的方式来处理用户同意隐私政策的逻辑,比如使用弹窗的回调函数或者页面导航的回调。
- 由于 SERIALNO 在 Android 10+ 上可能无法获取,你可能需要考虑使用其他设备标识符,如广告 ID(Advertising ID),或者生成一个唯一的设备 ID 存储在本地。
- 确保你的应用符合所有相关的隐私法规和标准,如 GDPR 和 CCPA。