uni-app 【报Bug】manifest.json permissionPhoneState:none Android 13打包提示授权限,拒絕后app白屏

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app 【报Bug】manifest.json permissionPhoneState:none Android 13打包提示授权限,拒絕后app白屏

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC操作系统版本 Windows 10 家庭中文版
HBuilderX类型 正式
HBuilderX版本 3.97
手机系统 Android
手机系统版本 Android 13
手机厂商 OPPO
手机机型 Reno8
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

{
    "android" : {
        "permissions" : [
            "<uses-feature android:name=\"android.hardware.camera\"/>",
            "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
            "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
            "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
            "<uses-permission android:name=\"android.permission.CAMERA\"/>",
            "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
            "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
            "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
            "<uses-permission android:name=\"android.permission.INTERNET\"/>",
            "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
            "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
            "<uses-permission android:name=\"android.permission.REBOOT\"/>",
            "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
            "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
            "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
            "<uses-permission android:name=\"android.permission.WRITE_PROFILE\"/>",
            "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
        ],
        "permissionPhoneState": {
            "request": "none",
            "prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
        },
        "minSdkVersion" : 19,
        "targetSdkVersion" : 33,
        "schemes" : "",
        "autoSdkPermissions" : false
    }
}

操作步骤:

跟BUG 描述

预期结果:

不弹提示权限,能正常启动app

实际结果:

弹提示权限,拒絕权限,白屏,下次打开也是白屏

bug描述:

OPPO Reno8

另外一台手机也是同样,手机:三星Galaxy S22 Ultra 港版.

"permissionPhoneState": {
    "request": "none",
    "prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
}

APP配置启用了 推送.


2 回复

“permissionExternalStorage” : {
“request” : “none”,
“prompt” : “便于您使用该功能上传您的照片/图片/视频、用于更换头像、发布评论/分享、下载、与客服沟通等场景中读取和写入相册和文件内容。”
},
“permissionPhoneState” : {
“request” : “none”, //拨打电话权限关闭
“prompt” : “便于您使用该功能拨打电话给商家、客服等。”
}, 设置成none后,不要本地调试,要打自定义基座调试


在 uni-app 开发中,如果你在 manifest.json 文件中设置了 permissionPhoneState: none,但在 Android 13 设备上打包后,应用仍然提示授权限,并且拒绝授权后导致应用白屏,这可能是由于以下原因导致的:

1. Android 13 权限变更

  • 在 Android 13 中,Google 引入了更严格的权限管理机制,特别是对于 READ_PHONE_STATE 权限。即使你在 manifest.json 中声明了 permissionPhoneState: none,某些系统或第三方库可能仍然会尝试请求该权限。
  • 如果应用在运行时尝试访问 READ_PHONE_STATE 权限,而用户拒绝了该权限,可能会导致应用无法正常运行,从而出现白屏。

2. 解决方案

  • 检查依赖库:确保你的项目中没有使用任何依赖库(如第三方 SDK)会隐式请求 READ_PHONE_STATE 权限。如果有,尝试更新或替换这些库。
  • 动态权限请求:在代码中检查是否在运行时动态请求了 READ_PHONE_STATE 权限。如果是,确保在用户拒绝权限时,应用能够优雅地处理这种情况,而不是直接崩溃或白屏。
  • 更新 manifest.json:确保 manifest.json 中的权限配置正确,并且没有其他配置导致权限被隐式请求。
  • 适配 Android 13:如果你确实需要访问 READ_PHONE_STATE 权限,确保你的应用已经适配了 Android 13 的权限模型,并且在用户拒绝权限时,应用能够继续正常运行。

3. 代码示例

如果你需要在运行时处理权限请求,可以参考以下代码:

// 检查是否已经授予权限
uni.getSystemInfo({
    success: function (res) {
        if (res.platform === 'android') {
            uni.authorize({
                scope: 'scope.phoneState',
                success: function () {
                    // 权限已授予
                },
                fail: function () {
                    // 权限被拒绝,提示用户或进行其他处理
                    uni.showToast({
                        title: '权限被拒绝,部分功能可能无法使用',
                        icon: 'none'
                    });
                }
            });
        }
    }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!