监听权限申请api在uni-app用户首次安装app时无法准确监听到

监听权限申请api在uni-app用户首次安装app时无法准确监听到

操作步骤:

自定义基座重新安装app后,在同意隐私框会进入页面 调用READ_PHONE_STATE权限,此时权限弹窗弹出,但是uni.createRequestPermissionListener的onRequest跟onConfirm方法都没有回调,点击允许或者拒绝会触发onComplete回调;若是不点击杀掉进程,再次进入app,就不会弹出该系统权限申请弹窗了。

预期结果:

使用uni.createRequestPermissionListener可以监听到第一次安装app后调用第一个权限onRequest跟onConfirm的回调信息

实际结果:

使用uni.createRequestPermissionListener无法监听到第一次安装app后调用第一个权限onRequest跟onConfirm的回调信息

bug描述:

代码:在App.vue页面使用监听权限申请api(uni.createRequestPermissionListener); 业务场景:华为上架,使用权限申请需要弹窗提示,所以每次都要监听,已经使用了推荐插件uni-registerRequestPermissionTips,但是第一次安装app调用的第一个权限的还是无法监听,后续的权限申请可以监听到

开发环境 版本号 项目创建方式
Windows Win11 26100.4061 HBuilderX
手机系统 手机系统版本号
Android Android 14
vivo vivo X100
页面类型 vue
vue vue3
打包方式 云端

更多关于监听权限申请api在uni-app用户首次安装app时无法准确监听到的实战教程也可以访问 https://www.itying.com/category-93-b0.html

19 回复

READ_PHONE_STATE应该不算吧,那个是自定义基座才会;你试下用apk安装,应该就没有了

更多关于监听权限申请api在uni-app用户首次安装app时无法准确监听到的实战教程也可以访问 https://www.itying.com/category-93-b0.html


好的,我试试

回复 k***@sanchuanshashi.com: 嗯嗯

一样的

回复 k***@sanchuanshashi.com: 那不对了,你这样子大概率会审核不过

回复 k***@sanchuanshashi.com: 你应该也不需要这个权限吧

回复 蔡cai: 我就是不太清楚这个权限是哪个api调用,我用了获取系统信息(uni.getSystemInfoSync)这个不确定会不会使用该权限,还有手机号一键登录我看了sdk说明的也会使用这个权限,有什么方法可以查看权限使用吗,

回复 k***@sanchuanshashi.com: https://ask.dcloud.net.cn/article/36549 https://uniapp.dcloud.net.cn/collocation/manifest-app.html#android 设置下permissionPhoneState,看能不能去掉

那你一进入就是一键登录的页面嘛

回复 蔡cai: 默认index首页,在onload里面进行判断是否登录。先去掉该权限吧,不知道会不会影响一键登录,测试安卓机没有卡无法测试。

回复 k***@sanchuanshashi.com: 行

回复 蔡cai: 我焯,<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove"/>代码写了,重新自定义基座了,app重新安装还是调…

回复 k***@sanchuanshashi.com: permissionPhoneState这个字段加了嘛?request设置为none了嘛

回复 蔡cai: 没有加你说的那个字段啊,我上面那段代码就是按文档来的

回复 蔡cai: 等下,你发的两个链接我只看了第二个,第一个链接我看下

回复 k***@sanchuanshashi.com: 行

回复 蔡cai: 可以了,感谢大哥

回复 k***@sanchuanshashi.com: 客气

这是一个已知的uni-app权限监听问题,主要出现在首次安装应用时。根据你的描述,我来分析原因和解决方案:

  1. 问题原因:
  • 首次安装时系统权限弹窗的触发机制与后续不同
  • uni.createRequestPermissionListener在首次安装时可能未完全初始化
  • 系统级权限弹窗可能优先于uni-app的监听机制
  1. 当前解决方案:
  • 对于首次权限申请,建议使用uni.authorize直接获取结果
  • 可以结合uni.getSetting检查权限状态
  • 在onComplete回调中处理首次权限结果
  1. 代码调整建议:
// 首次权限申请处理
uni.authorize({
  scope: 'scope.READ_PHONE_STATE',
  success() {
    // 权限已授予
  },
  fail() {
    // 权限被拒绝
  }
})

// 后续权限监听
const listener = uni.createRequestPermissionListener({
  onRequest() {
    console.log('权限申请弹窗已弹出')
  },
  onConfirm() {
    console.log('用户点击允许')
  },
  onComplete(res) {
    console.log('权限申请完成', res)
  }
})
回到顶部