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

- 发布:2025-07-25 09:08
- 更新:2025-07-25 16:25
- 阅读:311
产品分类: 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存在同意隐私弹窗前,未经授权采集个人信息,审核驳回,无法进行后续推广。需要官方人员协助排查,反馈了堆栈调用信息。

套马杆的套子 - 没有解决不了的问题,只有解决不完的问题
你看看你的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
-
-
-
-
-

聪冲冲冲 (作者)
<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>