uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施

uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施

开发环境 版本号 项目创建方式
Windows Windows10 HBuilderX

操作步骤:

正常打包的app,安装之后第一次打开获取读写存储权限时,通过后台杀掉app,再次打开app不会重新申请读写存储权限,后续app使用会闪退。

预期结果:

再次打开app重新申请未正常处理的权限申请

实际结果:

app不再申请权限了

bug描述:

正常打包的app,安装之后第一次打开获取读写存储权限时,通过后台杀掉app,再次打开app不会重新申请读写存储权限,后续app使用会闪退。 附件为HbuilderX新建的uni-app默认模板项目,然后云打包之后安装在真机上的效果。

录屏.zip


更多关于uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

应该与你的应用调用的API有关 是云打包吗可以提供一下appid

更多关于uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我上传的附件视频中使用的代码是uni-app默认模板,没有做任何修改之后云打包的,他的App id 为UNIB170D7B

回复 8***@qq.com: 视频也没看到崩溃现象

回复 DCloud_Android_ST: 奔溃是在我项目中,项目代码中使用了uni.getStorageSync()。

回复 8***@qq.com: 查看你提供的appid发现应用是无法正常运行的。 你提供一下示例demo把或者重新云打包。需要能复现问题

回复 DCloud_Android_ST: 我这边找到问题发生的原因了,我自己增加的原生插件中file.createNewFile()的时候没有拿到权限。这边问一下,既然默认情况下申请外部存储权限了,为什么在用户没有拒绝或者同意的情况下,也就是再次启用app的时候不再次申请权限呢?

回复 8***@qq.com: 这是系统层面处理的。代码使用存储功能时需要申请权限。

回复 DCloud_Android_ST: 这说不清呀。如果安装后第一次打开的时候申请权限,那是不是代表用到这个权限了。如果权限没拿到,下次打开的时候不应该再次申请吗

回复 8***@qq.com: 嗯 目前应用第一次启动的权限申请只有一次,uniapp是可以配置是否申请的。后续功能用到存储权限才会再次申请。还有你这逻辑本来就应该自己判断存储权限申请的。没什么好异议的

回复 DCloud_Android_ST: 按照当前的android开发规范,敏感权限不是在需要使用到相关功能时才去申请吗?开屏时申请了应该可以断定开屏时尝试在存储中做读写操作了。视频中直接杀掉进程,就意味着权限没有拿到,读写操作也没有成功执行。那重新打开app的时候这个读写操作就不做了吗?

这是一个典型的权限申请状态管理问题。当应用在首次权限申请过程中被强制终止,系统可能记录了"已询问但未完成"的状态,但应用内部没有正确重置权限申请流程。

建议在app.vue的onLaunch或onShow生命周期中检测必要的权限状态,如果发现权限未授予且没有待处理的申请,应重新触发权限申请。可以使用uni.authorize或uni.getSetting配合uni.authorize实现权限状态的检查和重新申请。

对于读写存储权限,可以这样处理:

// 在app.vue的onShow中
onShow() {
    this.checkStoragePermission()
},
methods: {
    async checkStoragePermission() {
        const settings = await uni.getSetting()
        if (!settings.authSetting['scope.writePhotosAlbum']) {
            // 权限未授予且没有待处理申请,重新申请
            uni.authorize({
                scope: 'scope.writePhotosAlbum',
                fail: () => {
                    // 处理用户拒绝的情况
                }
            })
        }
    }
}
回到顶部