uni-app 【报Bug】manifest.json permissionPhoneState:none Android 13打包提示授权限,拒絕后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'
});
}
});
}
}
});