uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取。
因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许。

读写手机存储权限

应用需要保存运行状态等数据到手机SD卡中,启动时需要获取读写手机存储权限,此权限为基础权限,影响真机运行、wgt升级。

  • 注意:此权限目标不是要访问相册,是Android把相册写入权限和存储写入权限合并在一个权限里了。
  • 注意:wgt热更新是应用市场不乐见的,不建议明显提示给用户或告知应用市场。

申请读写手机存储需要用户授权,会弹出如下提示框:

uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

  • HBuilderX2.4.2及以下版本,用户拒绝此权限则直接退出应用。
  • HBuilderX2.4.3+版本,用户拒绝后键会弹出以下提示框引导用户重新允许

 uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

    • 点击“取消”退出应用;
      点击“确定”重新弹出授权框,如果用户已经勾选“不再询问”则打开应用的设置界面。
      此提示语可在manifest.json中配置
    • HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略

      • none
        应用启动时不申请
      • once
        应用第一次启动时申请,用户可以拒绝
      • always
        应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

    源码视图配置

    打开manifest.json文件,切换到“源码视图”项

    • uni-app项目
      在"app-plus" -> "distribute" -> "android" 节点下添加 permissionExternalStorage 节点
    • 5+ App项目
      在 "plus" -> "distribute" -> "google" 节点下添加 permissionExternalStorage 节点

    permissionExternalStorage节点数据格式如下:

        "permissionExternalStorage": {

    "request": "always",

    "prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"

    }

    • equest
      字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为always。
    • prompt
      字符串类型,可选,用户拒绝时弹出提示框上的内容。
      默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
      国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
      设置自定义键名称为“dcloud_permission_write_external_storage_message”。

    保存后提交云端打包生效

     

    访问设备信息权限

    Android平台应用获取设备信息(如IMEI、IMSI等),统计、推送、广告等业务功能依赖这些信息。
    此权限不是必选,拒绝此权限不影响App端基座运行。但拥有本权限可以给开发者提供更准确的统计报表。
    而申请获取这些信息需要用户授权,会弹出如下提示框:

    uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

     

     华为手机应用的设置中权限列表中为“电话”权限

     

    HBuilderX2.3.8+开始支持配置应用启动时申请获取设备信息权限,支持以下三种策略

      • none
        应用启动时不申请
      • once
        应用第一次启动时申请,用户可以拒绝
      • always
        应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

      uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

       

      • 此提示框删的文本可自定义,参考下面的prompt字段

      默认策略为once,即应用第一次启动时申请

      源码视图配置

      打开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
          字符串类型,可选,用户拒绝时弹出提示框上的内容。
          默认值为:为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。
          国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
          设置自定义键名称为“dcloud_permission_read_phone_state_message”。

        保存后提交云端打包生效

        离线打包提示语配置及弹窗配置。

        提示语配置

        在主项目的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>

        弹窗配置

        在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>

        alue可取值为 none、once、always。

        补充

        沟通发现,部分开发者在main.js里面调用了plus.device.getInfo这类方法。

        但是其实API操作与permissionExternalStorage设置无关,permissionExternalStorage用于设置应用内部逻辑是否申请访问SD卡权限

        开发者是因为在启动的时候调用API触发了权限申请,误以为permissionExternalStorage设置无效(其实设置是生效的)。

        其它API操作会根据功能需求来申请权限,比如操作系统相册也会申请访问SDK卡权限、定位操作会申请定位权限等。

        转载于https://ask.dcloud.net.cn/article/36549

        以上是 uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息 的全部内容, 来源链接: utcz.com/a/71777.html

        回到顶部