DCloud之Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略控制
目錄
- 一、控制緣由
- 二、說明
- 三、云端打包配置
- 1.讀寫手機(jī)存儲權(quán)限
- (1)源碼視圖配置
- 2.訪問設(shè)備信息權(quán)限
- (1)源碼視圖配置
- 四、離線打包提示語配置及彈窗配置
- 1.提示語配置
- 2.彈窗配置
- 五、問題解決
一、控制緣由
vivo 上架審核不通過,駁回原因如下:
場景7:APP首次打開或運(yùn)行中,未見使用權(quán)限對應(yīng)的相關(guān)功能或服務(wù)時(shí),不應(yīng)提前向用戶彈窗申請開啟通訊錄、定位、短信、錄音、相機(jī)、日歷等權(quán)限。
檢測結(jié)果: 存在問題
改進(jìn)建議: APP業(yè)務(wù)功能所需的權(quán)限最好在對應(yīng)業(yè)務(wù)功能執(zhí)行時(shí)動(dòng)態(tài)申請,在用戶未觸發(fā)相關(guān)業(yè)務(wù)功能時(shí),不提前申請與當(dāng)前業(yè)務(wù)功能無關(guān)的權(quán)限。
二、說明
Android 平臺從 6.0(API23)開始系統(tǒng)對權(quán)限的管理更加嚴(yán)格,所有涉及敏感權(quán)限都需要用戶授權(quán)允許才能獲取。因此一些應(yīng)用基礎(chǔ)業(yè)務(wù)邏輯需要的權(quán)限會(huì)在應(yīng)用啟動(dòng)時(shí)申請,并引導(dǎo)用戶允許。
三、云端打包配置
1.讀寫手機(jī)存儲權(quán)限
應(yīng)用需要保存運(yùn)行狀態(tài)等數(shù)據(jù)到手機(jī)SD卡中,啟動(dòng)時(shí)需要獲取讀寫手機(jī)存儲權(quán)限,此權(quán)限為基礎(chǔ)權(quán)限,影響真機(jī)運(yùn)行、wgt升級。
注意:
此權(quán)限目標(biāo)不是要訪問相冊,是Android把相冊寫入權(quán)限和存儲寫入權(quán)限合并在一個(gè)權(quán)限里了。
wgt 熱更新是應(yīng)用市場不樂見的,不建議明顯提示給用戶或告知應(yīng)用市場。
申請讀寫手機(jī)存儲需要用戶授權(quán),會(huì)彈出如下提示框:
HBuilderX2.5.0+開始支持配置應(yīng)用啟動(dòng)時(shí)申請獲取手機(jī)存儲權(quán)限,支持以下三種策略:
none
應(yīng)用啟動(dòng)時(shí)不申請
once
應(yīng)用第一次啟動(dòng)時(shí)申請,用戶可以拒絕
always
應(yīng)用每次啟動(dòng)都申請,并且用戶必須允許,用戶拒絕時(shí)會(huì)彈出以下提示框引導(dǎo)用戶重新允許
(1)源碼視圖配置
打開manifest.json文件,切換到“源碼視圖”項(xiàng)
uni-app項(xiàng)目
在"app-plus" -> “distribute” -> “android” 節(jié)點(diǎn)下添加 permissionExternalStorage 節(jié)點(diǎn)
5+ App項(xiàng)目
在 “plus” -> “distribute” -> “google” 節(jié)點(diǎn)下添加 permissionExternalStorage 節(jié)點(diǎn)
permissionExternalStorage 節(jié)點(diǎn)數(shù)據(jù)格式如下:
"permissionExternalStorage": { "request": "always", "prompt": "應(yīng)用保存運(yùn)行狀態(tài)等信息,需要獲取讀寫手機(jī)存儲(系統(tǒng)提示為訪問設(shè)備上的照片、媒體內(nèi)容和文件)權(quán)限,請?jiān)试S。" }request
字符串類型,必填,申請讀寫手機(jī)存儲權(quán)限策略,可取值none、once、always。
HBuilderX3.0+版本默認(rèn)值調(diào)整為once
HBuilderX3.0以下版本默認(rèn)值always
prompt
字符串類型,可選,用戶拒絕時(shí)彈出提示框上的內(nèi)容。
默認(rèn)值為:應(yīng)用保存運(yùn)行狀態(tài)等信息,需要獲取讀寫手機(jī)存儲(系統(tǒng)提示為訪問設(shè)備上的照片、媒體內(nèi)容和文件)權(quán)限,請?jiān)试S。
保存后提交云端打包生效。
2.訪問設(shè)備信息權(quán)限
Android平臺應(yīng)用獲取設(shè)備信息(如IMEI、IMSI等),統(tǒng)計(jì)、推送、廣告等業(yè)務(wù)功能依賴這些信息。
此權(quán)限不是必選,拒絕此權(quán)限不影響App端基座運(yùn)行。但擁有本權(quán)限可以給開發(fā)者提供更準(zhǔn)確的統(tǒng)計(jì)報(bào)表。
而申請獲取這些信息需要用戶授權(quán),會(huì)彈出如下提示框:
HBuilderX2.3.8+開始支持配置應(yīng)用啟動(dòng)時(shí)申請獲取設(shè)備信息權(quán)限,支持以下三種策略:
none
應(yīng)用啟動(dòng)時(shí)不申請
once
應(yīng)用第一次啟動(dòng)時(shí)申請,用戶可以拒絕
always
應(yīng)用每次啟動(dòng)都申請,并且用戶必須允許,用戶拒絕時(shí)會(huì)彈出以下提示框引導(dǎo)用戶重新允許
(1)源碼視圖配置
打開manifest.json文件,切換到“源碼視圖”項(xiàng)
uni-app項(xiàng)目
在 “app-plus” -> “distribute” -> “android” 節(jié)點(diǎn)下添加 permissionPhoneState 節(jié)點(diǎn)
5+ App項(xiàng)目
在 “plus” -> “distribute” -> “google” 節(jié)點(diǎn)下添加 permissionPhoneState 節(jié)點(diǎn)
permissionPhoneState節(jié)點(diǎn)數(shù)據(jù)格式如下:
"permissionPhoneState": { "request": "always", "prompt": "為保證您正常、安全地使用,需要獲取設(shè)備識別碼(部分手機(jī)提示為獲取手機(jī)號碼)使用權(quán)限,請?jiān)试S。" }request
字符串類型,必填,申請?jiān)O(shè)備信息權(quán)限策略,可取值none、once、always。默認(rèn)值為once。
prompt
字符串類型,可選,用戶拒絕時(shí)彈出提示框上的內(nèi)容。
默認(rèn)值為:為保證您正常、安全地使用,需要獲取設(shè)備識別碼(部分手機(jī)提示為獲取手機(jī)號碼)使用權(quán)限,請?jiān)试S。
保存后提交云端打包生效。
四、離線打包提示語配置及彈窗配置
1.提示語配置
在主項(xiàng)目的 strings.xml 中添加如下字段。strings.xml 位于 項(xiàng)目目錄 /src/main/res/values下,如果文件或文件夾不存在,直接新建即可。
存儲權(quán)限提示語配置:
<resources> <string name="dcloud_permission_write_external_storage_message">存儲權(quán)限提示語</string> </resources>讀取手機(jī)狀態(tài)權(quán)限配置:
<resources> <string name="dcloud_permission_read_phone_state_message">讀取手機(jī)狀態(tài)權(quán)限提示語</string> </resources>2.彈窗配置
在androidManifest.xml的application節(jié)點(diǎn)下添加如下字段。
存儲權(quán)限彈窗配置:
<application> <meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="once"/> </application>value可取值為 none、once、always。
讀取手機(jī)狀態(tài)彈窗配置:
<application> <meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="once"/> </application>value可取值為 none、once、always。
五、問題解決
在 androidManifest.xml 的application 節(jié)點(diǎn)下配置存儲權(quán)限彈窗值為 none:
<application> <meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="none"/> </application>配置讀取手機(jī)狀態(tài)彈窗值為 none:
<application> <meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="none"/> </application>總結(jié)
以上是生活随笔為你收集整理的DCloud之Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 28天高效突击大礼包:微服务+分布式+框
- 下一篇: 2023高薪前端面试题(一、前端基础——