聪冲冲冲
聪冲冲冲
  • 发布:2025-07-25 09:08
  • 更新:2025-07-25 16:25
  • 阅读:311

【报Bug】您好,app存在同意隐私弹窗前,未经授权采集个人信息,请修改,谢谢。(违规点:)

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11

HBuilderX类型: 正式

HBuilderX版本号: 4.65

手机系统: Android

手机系统版本号: Android 16

手机厂商: 小米

手机机型: 红米12tub

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

app检测到用户同意隐私政策前采集个人信息。具体为OAID等

预期结果:

同意前不采集

实际结果:

app检测到用户同意隐私政策前采集个人信息。具体为OAID等

bug描述:

在抖音巨量广告推广app,对方检测到app存在同意隐私弹窗前,未经授权采集个人信息,审核驳回,无法进行后续推广。需要官方人员协助排查,反馈了堆栈调用信息。

2025-07-25 09:08 负责人:DCloud_App_Array 分享
已邀请:
聪冲冲冲

聪冲冲冲 (作者)

需要官方专业人士帮助解决

聪冲冲冲

聪冲冲冲 (作者)

已经配置了原生隐私政策弹窗

聪冲冲冲

聪冲冲冲 (作者)

原生隐私政策弹窗配置如下

聪冲冲冲

聪冲冲冲 (作者)

申诉说行为是用户同意隐私政策弹窗后才触发,仍旧被驳回。已经交涉驳回N次了

聪冲冲冲

聪冲冲冲 (作者)

华为 小米 oppo vivo 荣耀 应用宝都是已经上架了的

套马杆的套子

套马杆的套子 - 没有解决不了的问题,只有解决不完的问题

你看看你的app.vue中,有没有plus.之类的api

  • 聪冲冲冲 (作者)

    <script>

    import Vue from 'vue'

    import websocket from '@/utils/utils/websocket.js';

    import $store from '@/store/index.js';

    import {permisionTips} from "@/common/enum.js";

    // #ifdef APP

    import {

    registerRequestPermissionTipsListener,

    unregisterRequestPermissionTipsListener,

    setRequestPermissionTips

    } from "@/uni_modules/uni-registerRequestPermissionTips"

    // #endif

    export default {

    onLaunch: function() {

    console.log('App Launch');

    this.savePhoneSysInfo();

    // #ifdef APP-PLUS

    // 监听通知点击事件

    plus.push.addEventListener("click", (message)=>{

    console.log("用户点击了通知:", message);

    const {payload={}} = message;

    const {path="",...rest} = payload;

    if(path){

    this.$to('navigateTo',{path,query:rest})

    }

    });


            // #endif  
    },
    onShow: function() {
    console.log('App Show')
    this.refreshSocket();

    // #ifdef APP-PLUS

    plus.runtime.setBadgeNumber(0);//清空应用的角标

    // #endif
    },
    onHide: function() {
    console.log('App Hide')
    },
    onExit: function() {
    unregisterRequestPermissionTipsListener(null)
    },
    methods:{
    async savePhoneSysInfo(){
    // #ifdef H5
    this.$storageManager.set('tingyou_sysInfo',{statusBarHeight:30});
    this.$storageManager.set('NavbarHeight','64px');
    Vue.prototype.$osName = 'H5';
    // #endif

    // #ifdef APP-PLUS

    let result = await uni.getSystemInfoSync();
    this.$storageManager.set('tingyou_sysInfo',result);
    let {statusBarHeight,osName} = result;
    Vue.prototype.$osName = osName;
    let device_navbarHeight = 0;
    if(osName==='android'){
    device_navbarHeight = statusBarHeight + 48 + 'px';//安卓设备多为48px
    this.requestPermissionListener(result.brand);//安卓端华为需要展示权限使用目的
    }else if(osName==='ios'){
    device_navbarHeight = statusBarHeight + 44 + 'px'; //苹果设备多为44px
    }
    this.$storageManager.set('NavbarHeight',device_navbarHeight);

    // #endif

    },

    refreshSocket(){
    const isSocketOpen = $store.state.isSocketOpen;//websocket状态
    const token = this.$storageManager.get('ty_TOKEN');
    if (token&&(!isSocketOpen)) {
    websocket.initConnect();//如果有token且websocket不在线则重连websocket
    }
    },

    requestPermissionListener(brand){
    const tipsObj = {};
    const permissionList = Object.keys(permisionTips);
    permissionList.forEach(key=>{
    tipsObj[key] = this.$formatPermissionTips(permisionTips[key])
    })
    // console.log("注册全局权限监听:",tipsObj);
    setRequestPermissionTips(tipsObj);//设置权限目的提示
    registerRequestPermissionTipsListener({
    onRequest: (e) => {
    // console.log('onRequest',e)
    },
    onConfirm: (e) => {
    // console.log('onConfirm,系统授权弹窗显示',e)
    },
    onComplete: (e) => {
    // console.log('onComplete',e);
    // 华为手机在权限禁止之后,再次申请权限不会出现权限申请框。此时应该引导用户去系统设置开启此权限,不应该频繁申请。
    if (brand.toLowerCase() == "huawei") {
    var tips = {}
    for (var k in tipsObj) {
    if (e[k] != "denied") {
    tips[k] = tipsObj[k]
    }
    }
    setRequestPermissionTips(tips) // 更新弹框提醒,防止华为手机不出现权限申请框时权限提醒框闪烁的情况
    }

    const flag_BLUETOOTH_CONNECT = e.hasOwnProperty("android.permission.BLUETOOTH_CONNECT")&&e["android.permission.BLUETOOTH_CONNECT"]==='denied';
    const flag_BLUETOOTH_SCAN = e.hasOwnProperty("android.permission.BLUETOOTH_SCAN")&&e["android.permission.BLUETOOTH_SCAN"]==='denied';
    if(flag_BLUETOOTH_CONNECT||flag_BLUETOOTH_SCAN){
    this.$showSettingModel("蓝牙权限已被拒绝,APP无法监听耳机连接状态,无法为您提供下一步音频测听服务,请前往设置中开启授权");
    return
    }
    }
    })
    }

    }
    }

    </script>


    <style lang="scss">

    / 注意要写在第一行,同时给style标签加入lang="scss"属性 /

    @import "@/uni_modules/uview-ui/index.scss";

    </style>

    <style>

    /每个页面公共css static/inconFont/iconfont.css/

    / icon.css - 自定义图标库 /

    @import url("@/static/iconFont/iconfont.css");

    /每个页面公共css /

    @font-face {

    font-family: 'alimamashuheiti';

    src: url('/static/fonts/alimamashuheiti.ttf') format('truetype');

    / 根据实际情况调整路径和格式 /

    }

    @font-face {

    font-family: 'alibabapuhuiti';

    src: url('/static/fonts/alibabapuhuiti.ttf') format('truetype');

    / 根据实际情况调整路径和格式 /

    }

    @font-face {

    font-family: 'siyuanheiti';

    src: url('/static/fonts/SourceHanSansSC-Normal-2.otf') format('truetype');

    / 根据实际情况调整路径和格式 /

    }


    .alimama{  
    font-family: 'alimamashuheiti', sans-serif;
    }
    .alibabapuhuiti{
    font-family: 'alibabapuhuiti', sans-serif;
    }
    .siyuanheiti{
    font-family: 'siyuanheiti', sans-serif;
    }

    </style>

    2025-07-25 14:49

  • 聪冲冲冲 (作者)

    确实有plus之类的api

    2025-07-25 14:49

  • 套马杆的套子

    回复 聪冲冲冲: 你这个应该不影响,不是获取设备的,getSystemInfo 我看你有这个,问题应该是他

    2025-07-25 14:54

  • 聪冲冲冲 (作者)

    回复 套马杆的套子: 我本地真机跑的时候,我看控制台如果没有同意隐私政策的话,main.js都没执行,打印语句都没有。我试试把他换到其他位置试试

    2025-07-25 15:10

  • 套马杆的套子

    回复 聪冲冲冲: 上架华为市场,会对这个也比较严格,之前上华为的时候,搞过这个

    2025-07-25 15:32

  • 聪冲冲冲 (作者)

    回复 套马杆的套子: 华为这个就是加上原生隐私政策弹窗过的。不过我后面发给他测试账号和密码他都登录密码错误,我就怀疑包可能有问题,我重新上传了正确的生产包,然后审核通过了

    2025-07-25 16:27

聪冲冲冲

聪冲冲冲 (作者)

<script>  
    import Vue from 'vue'  
    import websocket from '@/utils/utils/websocket.js';  
    import $store from '@/store/index.js';  
    import {permisionTips} from "@/common/enum.js";  
    // #ifdef APP  
    import {  
        registerRequestPermissionTipsListener,  
        unregisterRequestPermissionTipsListener,  
        setRequestPermissionTips  
    } from "@/uni_modules/uni-registerRequestPermissionTips"  
    // #endif  
    export default {  
        onLaunch: function() {  
            console.log('App Launch');  
            this.savePhoneSysInfo();  
            // #ifdef APP-PLUS  
            // 监听通知点击事件  
            plus.push.addEventListener("click", (message)=>{  
                console.log("用户点击了通知:", message);  
                const {payload={}} = message;  
                const {path="",...rest} = payload;  
                if(path){  
                    this.$to('navigateTo',{path,query:rest})  
                }  
            });  

            // #endif  
        },  
        onShow: function() {  
            console.log('App Show')  
            this.refreshSocket();  

            // #ifdef APP-PLUS  

                plus.runtime.setBadgeNumber(0);//清空应用的角标  

            // #endif  
        },  
        onHide: function() {  
            console.log('App Hide')  
        },  
        onExit: function() {  
            unregisterRequestPermissionTipsListener(null)  
        },  
        methods:{  
            async savePhoneSysInfo(){  
                // #ifdef H5  
                this.$storageManager.set('tingyou_sysInfo',{statusBarHeight:30});  
                this.$storageManager.set('NavbarHeight','64px');  
                Vue.prototype.$osName = 'H5';  
                // #endif  

                // #ifdef APP-PLUS  

                let result = await uni.getSystemInfoSync();  
                this.$storageManager.set('tingyou_sysInfo',result);  
                let {statusBarHeight,osName} = result;  
                Vue.prototype.$osName = osName;  
                let device_navbarHeight = 0;  
                if(osName==='android'){  
                    device_navbarHeight = statusBarHeight + 48 + 'px';//安卓设备多为48px  
                    this.requestPermissionListener(result.brand);//安卓端华为需要展示权限使用目的  
                }else if(osName==='ios'){  
                    device_navbarHeight = statusBarHeight + 44 + 'px'; //苹果设备多为44px  
                }  
                this.$storageManager.set('NavbarHeight',device_navbarHeight);  

                // #endif  

            },  

            refreshSocket(){  
                const isSocketOpen = $store.state.isSocketOpen;//websocket状态  
                const token = this.$storageManager.get('ty_TOKEN');  
                if (token&&(!isSocketOpen)) {  
                    websocket.initConnect();//如果有token且websocket不在线则重连websocket  
                }  
            },  

            requestPermissionListener(brand){  
                const tipsObj = {};  
                const permissionList = Object.keys(permisionTips);  
                permissionList.forEach(key=>{  
                    tipsObj[key] = this.$formatPermissionTips(permisionTips[key])  
                })  
                // console.log("注册全局权限监听:",tipsObj);  
                setRequestPermissionTips(tipsObj);//设置权限目的提示  
                registerRequestPermissionTipsListener({  
                    onRequest: (e) => {  
                        // console.log('onRequest',e)  
                    },  
                    onConfirm: (e) => {  
                        // console.log('onConfirm,系统授权弹窗显示',e)  
                    },  
                    onComplete: (e) => {  
                        // console.log('onComplete',e);  
                        // 华为手机在权限禁止之后,再次申请权限不会出现权限申请框。此时应该引导用户去系统设置开启此权限,不应该频繁申请。  
                        if (brand.toLowerCase() == "huawei") {  
                            var tips = {}  
                            for (var k in tipsObj) {  
                                if (e[k] != "denied") {  
                                    tips[k] = tipsObj[k]  
                                }  
                            }  
                            setRequestPermissionTips(tips) // 更新弹框提醒,防止华为手机不出现权限申请框时权限提醒框闪烁的情况  
                        }  

                        const flag_BLUETOOTH_CONNECT = e.hasOwnProperty("android.permission.BLUETOOTH_CONNECT")&&e["android.permission.BLUETOOTH_CONNECT"]==='denied';  
                        const flag_BLUETOOTH_SCAN = e.hasOwnProperty("android.permission.BLUETOOTH_SCAN")&&e["android.permission.BLUETOOTH_SCAN"]==='denied';  
                        if(flag_BLUETOOTH_CONNECT||flag_BLUETOOTH_SCAN){  
                            this.$showSettingModel("蓝牙权限已被拒绝,APP无法监听耳机连接状态,无法为您提供下一步音频测听服务,请前往设置中开启授权");  
                            return  
                        }  
                    }  
                })  
            }  

        }  
    }  
</script>  

<style lang="scss">  
  /* 注意要写在第一行,同时给style标签加入lang="scss"属性 */  
  @import "@/uni_modules/uview-ui/index.scss";  
</style>  
<style>  
    /*每个页面公共css static/inconFont/iconfont.css*/  
    /* icon.css - 自定义图标库 */  
    @import url("@/static/iconFont/iconfont.css");  
    /*每个页面公共css */  
    @font-face {  
      font-family: 'alimamashuheiti';  
      src: url('/static/fonts/alimamashuheiti.ttf') format('truetype');  
      /* 根据实际情况调整路径和格式 */  
    }  
    @font-face {  
      font-family: 'alibabapuhuiti';  
      src: url('/static/fonts/alibabapuhuiti.ttf') format('truetype');  
      /* 根据实际情况调整路径和格式 */  
    }  
    @font-face {  
      font-family: 'siyuanheiti';  
      src: url('/static/fonts/SourceHanSansSC-Normal-2.otf') format('truetype');  
      /* 根据实际情况调整路径和格式 */  
    }  

    .alimama{  
        font-family: 'alimamashuheiti', sans-serif;  
    }  
    .alibabapuhuiti{  
        font-family: 'alibabapuhuiti', sans-serif;  
    }  
    .siyuanheiti{  
        font-family: 'siyuanheiti', sans-serif;  
    }  
</style>  
聪冲冲冲

聪冲冲冲 (作者)

问题已解决。运营上传错了包。重新上传正确的生产环境包就ok了。

要回复问题请先登录注册