DCloud_App_Array
DCloud_App_Array
  • 发布:2019-11-04 15:31
  • 更新:2024-10-25 10:06
  • 阅读:195182

Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

分类:HTML5+

说明

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

读写手机存储权限

HBuilderX3.5.5+版本调整申请读写手机存储权限策略默认值为 none

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

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

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

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

    点击“取消”退出应用;
    点击“确定”重新弹出授权框,如果用户已经勾选“不再询问”则打开应用的设置界面。
    此提示语可在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": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"  
     }
  • request
    字符串类型,必填,申请读写手机存储权限策略,可取值none、once、always。
    • HBuilderX3.5.5+版本默认值调整为none
    • HBuilderX3.0以下版本默认值always
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_write_external_storage_message”。

保存后提交云端打包生效

访问设备信息权限

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


华为手机应用的设置中权限列表中为“电话”权限
部分手机设备对该权限描述为“拨打电话,管理电话权限”

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

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

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

HX3.5.5+版本开始默认策略为none,即应用启动不再主动申请

源码视图配置

打开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>  

value可取值为 none、once、always。

补充

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

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

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

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

Android平台隐私与政策提示框配置方法

32 关注 分享
hzq 5***@qq.com sql开发者 老哥教教我 秋凡 2***@qq.com hgdc 876 1***@qq.com 一只攻城狮 没胡子就好了 糖猫猫 c***@163.com skysowe 海中月是天上月 90后菜鸟 雨夜敬清秋 ltlzx 光之子科技 chihiro_yy 美目如当 ai666 愿随风丶飘雪 那年夏杪的木杺 1***@qq.com 2***@qq.com freehippo 4***@qq.com 1***@qq.com 套马杆的套子 wcs Tevin1021

要回复文章请先登录注册

2022xy

2022xy

我的应用也是Vivo 华为上不了架,随便找一个vivo手机,运行一下空白项目,都会提示“ 请求电话权限,是否允许。”官方需不需要视频,必现,都大半年了,还没有重视修复一下。
2022-07-26 23:31
9***@qq.com

9***@qq.com

已经配置androidPrivacy.json,并且也是template模式,启动时未同意隐私政策也未做任何操作,华是上架失败给出这样的反馈,请问要如何处理啊?

尊敬的开发者,您好,请确保应用在用户同意隐私政策后再申请获取用户的【应用收取设备ID,IMSI,MAC地址,,ANDROID ID; 应用内集成的[穿山甲、巨量引擎]SDK收取设备ID,应用安装列表,MAC地址,ANDROID ID; 应用内集成的[广点通、腾讯社交]SDK收取ANDROID ID; 应用内集成的[个推、个数应用统计、个像]SDK收取应用安装列表,MAC地址,ANDROID ID】个人信息/【应用收取写外部存储, 读取电话状态权限】权限,请参考如下调用栈信息、定位修复,具体以审核结果为准,谢谢。

[com.kwad.sdk.utils.av.m(Unknown Source:68),

com.kwad.sdk.utils.av.u(Unknown Source:51),

com.kwad.sdk.utils.ao.j(Unknown Source:0),

com.kwad.sdk.utils.ao.e(Unknown Source:1),

com.kwad.components.core.b.a.b(Unknown Source:188),

com.kwad.components.core.b.a.a(Unknown Source:16),

com.kwad.sdk.KsAdSDKImpl.initExceptionModule(Unknown Source:7),

com.kwad.sdk.KsAdSDKImpl.init(Unknown Source:217),

com.kwad.sdk.api.KsAdSDK.init(Unknown Source:117),

io.dcloud.feature.ad.ks.KSADInitManager.init(KSADInitManager.java:55),

io.dcloud.feature.ad.ks.AdKsHandler.pullAds(AdKsHandler.java:83)

[com.bytedance.sdk.openadsdk.core.u.l(IdUtils.java:332),

com.bytedance.sdk.openadsdk.core.u.k(IdUtils.java:238),

com.bytedance.sdk.openadsdk.core.u.d(IdUtils.java:120),

com.bytedance.sdk.openadsdk.m.a.b(PrivacyUtil.java:103),

com.bytedance.sdk.openadsdk.core.p.a.c.q(LogStatsBase.java:127),

com.bytedance.sdk.openadsdk.core.p.a.c.a(LogStatsBase.java:116),

com.bytedance.sdk.openadsdk.core.p.c.c$2.run(LogUploaderImpl.java:81),

com.bytedance.sdk.component.g.b.run(DelegateRunnable.java:35),

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167),

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641),

java.lang.Thread.run(Thread.java:933)]
2022-07-11 11:30
我是纸飞机

我是纸飞机

华为那边一直要求先显示隐私政策后显示这个弹框,直接设置none吗
2022-07-07 16:07
seigwen

seigwen

回复 T泰达T :
对啊,我都设置了none,还是会弹...
2022-07-03 10:16
5***@qq.com

5***@qq.com

所有的授权弹窗不可以自动做到点击按钮用到的时候才弹出授权弹窗吗?
2022-07-01 12:21
5***@qq.com

5***@qq.com

按照上面的配置的确不弹窗了,但是用到相机拍照的,点击按钮不会弹出来授权了。用了unipush的,vivo手机一打开APP还是会弹出消息通知的授权弹窗
2022-07-01 12:19
Rudy001

Rudy001

vivo提示 APP首次打开或运行中,未见使用权限对应的相关功能或服务时,不应提前向用户弹窗申请开启通讯录、定位、短信、录音、相机、日历等权限。 怎么搞?
2022-07-01 10:00
4***@qq.com

4***@qq.com

回复 hjvbhbhkj62 :
请问怎么解决的
2022-06-21 14:53
3***@qq.com

3***@qq.com

回复 清都缥缈客 :
我感觉也是. 全平台就vivo卡这个
2022-06-20 11:22
T泰达T

T泰达T

回复 挽风入耳 :
是的,就是要拒绝才显示……但人家平台方要求先显示再获取
2022-06-16 11:04