Android平台應用啟動時讀寫手機存儲、訪問設備信息(如IMEI)等權限策略及提示信息


說明

Android平台從6.0(API23)開始系統對權限的管理更加嚴格,所有涉及敏感權限都需要用戶授權允許才能獲取。
因此一些應用基礎業務邏輯需要的權限會在應用啟動時申請,並引導用戶允許。

 

讀寫手機存儲權限

HBuilderX3.0+版本調整申請讀寫手機存儲權限策略默認值為 once

應用需要保存運行狀態等數據到手機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.0+版本默認值調整為once
    • 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字段

默認策略為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> 

value可取值為 none、once、always。

補充

溝通發現,部分開發者在main.js里面調用了plus.device.getInfo這類方法。

但是其實API操作與permissionExternalStorage設置無關,permissionExternalStorage用於設置應用內部邏輯是否申請訪問SD卡權限

開發者是因為在啟動的時候調用API觸發了權限申請,誤以為permissionExternalStorage設置無效(其實設置是生效的)。

其它API操作會根據功能需求來申請權限,比如操作系統相冊也會申請訪問SDK卡權限、定位操作會申請定位權限等。

 

https://ask.dcloud.net.cn/article/36549

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM