目录
- 一、控制缘由
- 二、说明
- 三、云端打包配置
- 1.读写手机存储权限
- (1)源码视图配置
- 2.访问设备信息权限
- (1)源码视图配置
- 四、离线打包提示语配置及弹窗配置
- 1.提示语配置
- 2.弹窗配置
- 五、问题解决
一、控制缘由
vivo 上架审核不通过,驳回原因如下:
场景7:APP首次打开或运行中,未见使用权限对应的相关功能或服务时,不应提前向用户弹窗申请开启通讯录、定位、短信、录音、相机、日历等权限。
检测结果: 存在问题
改进建议: APP业务功能所需的权限最好在对应业务功能执行时动态申请,在用户未触发相关业务功能时,不提前申请与当前业务功能无关的权限。
二、说明
Android 平台从 6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取。因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许。
三、云端打包配置
1.读写手机存储权限
应用需要保存运行状态等数据到手机SD卡中,启动时需要获取读写手机存储权限,此权限为基础权限,影响真机运行、wgt升级。
注意:
此权限目标不是要访问相册,是Android把相册写入权限和存储写入权限合并在一个权限里了。
wgt 热更新是应用市场不乐见的,不建议明显提示给用户或告知应用市场。
申请读写手机存储需要用户授权,会弹出如下提示框:
HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略:
none
应用启动时不申请
once
应用第一次启动时申请,用户可以拒绝
always
应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许
(1)源码视图配置
打开manifest.json文件,切换到“源码视图”项
uni-app项目
在"app-plus" -> “distribute” -> “android” 节点下添加 permissionExternalStorage 节点
5+ App项目
在 “plus” -> “distribute” -> “google” 节点下添加 permissionExternalStorage 节点
permissionExternalStorage 节点数据格式如下:
"permissionExternalStorage": {
"request": "always",
"prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
}
request
字符串类型,必填,申请读写手机存储权限策略,可取值none、once、always。
HBuilderX3.0+版本默认值调整为once
HBuilderX3.0以下版本默认值always
prompt
字符串类型,可选,用户拒绝时弹出提示框上的内容。
默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
保存后提交云端打包生效。
2.访问设备信息权限
Android平台应用获取设备信息(如IMEI、IMSI等),统计、推送、广告等业务功能依赖这些信息。
此权限不是必选,拒绝此权限不影响App端基座运行。但拥有本权限可以给开发者提供更准确的统计报表。
而申请获取这些信息需要用户授权,会弹出如下提示框:
HBuilderX2.3.8+开始支持配置应用启动时申请获取设备信息权限,支持以下三种策略:
none
应用启动时不申请
once
应用第一次启动时申请,用户可以拒绝
always
应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许
(1)源码视图配置
打开manifest.json文件,切换到“源码视图”项
uni-app项目
在 “app-plus” -> “distribute” -> “android” 节点下添加 permissionPhoneState 节点
5+ App项目
在 “plus” -> “distribute” -> “google” 节点下添加 permissionPhoneState 节点
permissionPhoneState节点数据格式如下:
"permissionPhoneState": {
"request": "always",
"prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
}
request
字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为once。
prompt
字符串类型,可选,用户拒绝时弹出提示框上的内容。
默认值为:为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。
保存后提交云端打包生效。
四、离线打包提示语配置及弹窗配置
1.提示语配置
在主项目的 strings.xml 中添加如下字段。strings.xml 位于 项目目录 /src/main/res/values下,如果文件或文件夹不存在,直接新建即可。
存储权限提示语配置:
<resources>
<string name="dcloud_permission_write_external_storage_message">存储权限提示语</string>
</resources>
读取手机状态权限配置:
<resources>
<string name="dcloud_permission_read_phone_state_message">读取手机状态权限提示语</string>
</resources>
2.弹窗配置
在androidManifest.xml的application节点下添加如下字段。
存储权限弹窗配置:
<application>
<meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="once"/>
</application>
value可取值为 none、once、always。
读取手机状态弹窗配置:
<application>
<meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="once"/>
</application>
value可取值为 none、once、always。
五、问题解决
在 androidManifest.xml 的application 节点下配置存储权限弹窗值为 none:
<application>
<meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="none"/>
</application>
配置读取手机状态弹窗值为 none:
<application>
<meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="none"/>
</application>