uni-app 【求助】小米审核未通过,首次应用打开后隐私政策点击不同意,重新进入会触发获取设备信息行为,so库通过jni反射调用硬件序列号

发布于 1周前 作者 nodeper 来自 uni-app

uni-app 【求助】小米审核未通过,首次应用打开后隐私政策点击不同意,重新进入会触发获取设备信息行为,so库通过jni反射调用硬件序列号

求助

APP上架小米,审核没通过,说是 在应用打开后隐私政策点击不同意后,重新进入应用会触发收集设备信息行为。

APP内就使用了uni统计、uniAD。

之前的版本都没有问题,这次新版出现问题,其他渠道OPPO、VIVO、华为都没有问题。

不知各位大佬有没有遇到这个问题,不知道怎么解决了

图片


8 回复

您好,解决了,什么原因,我也遇到了


没有解决,目前不知道是什么原因

用了之前审核通过的版本,什么都没变,就升了个版本号,想查看下是哪里出了问题,打包后还是没通过

你好,请问解决了吗?

我也遇到了这个问题,之前也没有这种问题存在,去问了官方说是点击拒绝后便会触发获取序列号。我已经移除掉了友盟相关sdk还是不通过,一看是dcloud在获取,我打算强制移除掉这个权限提交审核试试了,在这里蹲一个官方来解答这个问题。详细信息如下: 硬件序列号
发生时间:2024-12-24 09:57:43
违规md5:md5=084134B446741014FCC3A21A42DEB2E6,
违规包名:pkg=com.nbzhufang.app,
违规动作: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;

我的隐私政策配置如下: {
“version”: “1.0.0”,
“prompt”: “template”,
“title”: “服务协议和隐私政策”,
“message”: "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。
  你可阅读<a href=“https://xxxxx/PrivacyPolicy.html”>《隐私政策》和<a href=“https://xxxxx/AppUserAgreement.html”>《服务协议》了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
“buttonAccept”: “同意并接受”,
“buttonRefuse”: “拒绝”,
“hrefLoader”: “system”,
“disagreeMode”: {
“support”: true,
“loadNativePlugins”: false,
“visitorEntry”: false,
“showAlways”: false
},
“styles”: {
“backgroundColor”: “#FFFFFF”,
“borderRadius”: “5px”,
“title”: {
“color”: “#333333”
},
“buttonAccept”: {
“color”: “#00a381”
},
“buttonRefuse”: {
“color”: “#c8161d”
}
}
}

HBuilderX 4.4.5 ,打包也是一样, “存在若干 SDK 未经用户许可读取个人隐私信息(硬件序列号)” javascript:;

针对你提到的小米审核未通过问题,这通常是因为应用在处理用户隐私数据时未严格遵守相关规定。根据你的描述,应用在用户不同意隐私政策的情况下,仍然尝试获取设备信息,这是不被允许的。另外,通过JNI反射调用硬件序列号也是敏感操作,可能会涉及到用户隐私泄露的风险。

以下是一个改进示例,展示如何在用户同意隐私政策后再获取设备信息,并且避免使用JNI反射获取硬件序列号(因为硬件序列号等敏感信息通常不建议直接获取和使用):

  1. 用户隐私政策同意逻辑

在用户首次打开应用时,弹出一个隐私政策同意框。如果用户不同意,则不执行任何获取设备信息的操作。

// 假设在App.vue的onLaunch方法中检查用户是否已同意隐私政策
onLaunch() {
    const hasAgreed = uni.getStorageSync('hasAgreedPrivacyPolicy');
    if (!hasAgreed) {
        uni.showModal({
            title: '隐私政策',
            content: '请阅读并同意我们的隐私政策',
            success: (res) => {
                if (res.confirm) {
                    uni.setStorageSync('hasAgreedPrivacyPolicy', true);
                    this.getDeviceInfo(); // 用户同意后获取设备信息
                } else {
                    // 用户不同意,不执行获取设备信息的操作
                }
            }
        });
    } else {
        this.getDeviceInfo(); // 用户已同意,直接获取设备信息
    }
},

getDeviceInfo() {
    // 获取设备信息的逻辑,但避免获取硬件序列号等敏感信息
    uni.getSystemInfo({
        success: (res) => {
            console.log('设备信息:', res);
            // 处理设备信息
        }
    });
}
  1. 避免使用JNI反射获取硬件序列号

由于硬件序列号等敏感信息可能涉及用户隐私泄露,建议避免直接获取这些信息。如果需要唯一标识设备,可以考虑使用设备的其他非敏感属性,或者生成一个唯一的设备ID(例如使用UUID)。

const generateDeviceID = () => {
    let deviceID = uni.getStorageSync('deviceID');
    if (!deviceID) {
        deviceID = (window.crypto || window.msCrypto).getRandomValues(new Uint32Array(3)).join('-');
        uni.setStorageSync('deviceID', deviceID);
    }
    return deviceID;
};

// 使用生成的设备ID
const deviceID = generateDeviceID();
console.log('设备ID:', deviceID);

以上代码示例展示了如何在用户同意隐私政策后再获取设备信息,并避免使用JNI反射获取硬件序列号。希望这些改进能够帮助你通过小米的审核。

回到顶部