最近项目上线遇到了无法上架的问题,因为UNI-APP权限问题,导致应用宝等无法通过上架审核。
解决方法
根据UNI-APP官方给出的解决方案,官方文章中的解释,进行离线打包的配置。做出如下摘抄:
在原生工程中应用的AndroidManifest.xml中配置隐私提供框模式,在application节点下添加meta-data节点数据,如下:
<meta-data android:name="DCLOUD_PRIVACY_PROMPT" android:value="template"/>
复制代码
android:value可取值为"template"、"custom"、"none"。
敲重点
配置使用"template"模板提示框时,需要按以下方法配置提示框内容
在原生工程的res/values目录下的strings.xml配置默认语言内容(为了兼容用户设置不同语言的清空,此文件必须配置)。中文还需要创建res/values-zh目录下的strings.xml文件并配置中文内容。
注意,需要新建
res/values-zh/strings.xml
复制代码
模板提示框
请在原生工程的strings.xml中添加以下字段配置模板提示框内容。
<resources><stringname="dcloud_privacy_prompt_title">弹窗标题</string><stringname="dcloud_privacy_prompt_accept_button_text">接收按钮文字配置字段(不存在该字段,即使用默认内容“同意”)</string><stringname="dcloud_privacy_prompt_refuse_button_text">拒绝按钮文字配置字段(没有该字段或该字段内容为空,拒绝按钮不显示)</string><stringname="dcloud_privacy_prompt_message"><Data><![CDATA[弹窗内容,如果内容中有富文本,请将内容放入cdata下,如当前配置]]></Data></string></resources>复制代码
二次确认提示框
HBuilderX3.1.12+版本新增支持模板隐私提示框二次确认功能,点击隐私模板提示框时用户选择“拒绝”按钮并且二次确认提示框内容dcloud_second_privacy_prompt_message配置不为空时会弹出二次确认提示框。
请在原生工程的strings.xml中添加以下字段配置二次确认提示框内容。
<string name="dcloud_second_privacy_prompt_title">二级弹窗标题</string>
<stringname="dcloud_second_privacy_prompt_accept_button_text">接收按钮文字配置字段(不存在该字段,即使用默认内容“确定”)</string><stringname="dcloud_second_privacy_prompt_message"><![CDATA[协议内容]]></string><stringname="dcloud_second_privacy_prompt_refuse_button_text">拒绝按钮文字配置字段(没有该字段或该字段内容为空,拒绝按钮不显示)</string>复制代码
隐私协议内容需要注意的问题
需要在《隐私政策》中必告知用户您的应用基于DCloud uni-app(5+ App/Wap2App)开发,添加如下参考条款:
我们的产品基于DCloud uni-app(5+ App/Wap2App)开发,应用运行期间需要收集您的设备唯一识别码(IMEI/android ID/DEVICE_ID/IDFA、SIM 卡 IMSI 信息)以提供统计分析服务,并通过应用启动数据及异常错误日志分析改进性能和用户体验,为用户提供更好的服务。
自定义权限获取弹窗内容
离线打包提示语配置及弹窗配置。
提示语配置
在主项目的strings.xml中添加如下字段。strings.xml位于 项目目录/src/main/res/values下,如果文件或文件夹不存在,直接新建即可。
存储权限提示语配置
<resources><stringname="dcloud_permission_write_external_storage_message">存储权限提示语</string></resources>复制代码
读取手机状态权限配置
<resources><stringname="dcloud_permission_read_phone_state_message">读取手机状态权限提示语</string></resources>复制代码
弹窗配置
在androidManifest.xml的application节点下添加如下字段。
存储权限弹窗配置
<application><meta-dataandroid:name="DCLOUD_WRITE_EXTERNAL_STORAGE"android:value="once"/></application>复制代码
value可取值为 none、once、always。
读取手机状态弹窗配置
<application><meta-dataandroid:name="DCLOUD_READ_PHONE_STATE"android:value="once"/></application>复制代码
value可取值为 none、once、always。
补充
沟通发现,部分开发者在main.js里面调用了plus.device.getInfo这类方法。
但是其实API操作与permissionExternalStorage设置无关,permissionExternalStorage用于设置应用内部逻辑是否申请访问SD卡权限
开发者是因为在启动的时候调用API触发了权限申请,误以为permissionExternalStorage设置无效(其实设置是生效的)。
其它API操作会根据功能需求来申请权限,比如操作系统相册也会申请访问SDK卡权限、定位操作会申请定位权限等。