DCloud之Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略控制
目錄
- 一、控制緣由
- 二、說明
- 三、云端打包配置
- 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>總結
以上是生活随笔為你收集整理的DCloud之Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 28天高效突击大礼包:微服务+分布式+框
- 下一篇: 2023高薪前端面试题(一、前端基础——