權限要求可保護裝置提供的機密資訊,因此只有在應用程式必須存取這類資訊來維持運作時才能使用。本文件提示了幾種方法,讓您不需要求這類資訊,就能夠執行相同 (或更優質的) 功能;此處並未完整探討 Android 作業系統中的權限運作方式。
如需查看有關 Android 權限的一般資訊,請參閱權限總覽一文。如要進一步瞭解如何透過程式碼與權限搭配運作,請參閱要求應用程式權限一文。
Android 6.0 以上版本的權限
在 Android 6.0 (API 級別 23) 以上版本中,應用程式可以在執行階段 (而非在安裝前) 向使用者要求權限。這樣一來,應用程式就能在確實需要相關服務或由該服務保護的資料時要求權限。儘管這種做法不一定會改變應用程式的整體行為,但確實造成一些使用者敏感資料處理方式的相關變動:
增加情境式的內容
系統會依據應用程式的使用情境,在執行階段提示使用者授予權限,以便存取相關權限群組提供的功能。使用者對於要求取得權限時的使用情境更為敏感,因此如果您要求的權限與應用程式的用途不符,就更應該向使用者詳細說明您要求權限的原因。您應盡可能在要求權限時,以及在使用者拒絕要求時後續顯示的對話方塊中,提供要求的相關說明。
如要提高使用者接受權限要求的可能性,建議您只在需要執行特定功能時才提出要求。舉例來說,只有當使用者點選麥克風按鈕時,才提示要求麥克風存取權。使用者在預期行使特定權限時,更有可能允許授予權限。
權限授予更具彈性
使用者可在系統提出要求時「以及」在設定中拒絕個別權限,但對於因此而導致功能異常中斷的情況,仍可能感到不知所措。建議您監控拒絕授權的使用者人數 (例如使用 Google Analytics),據此重構出不需使用該項權限的應用程式,或是提供更詳盡的說明,讓使用者瞭解為何需要此權限才能讓應用程式順利運作。此外,當使用者拒絕權限要求或在設定中關閉權限時,您必須確保應用程式能夠處理例外狀況。
增加事務性負擔
系統會要求使用者逐一授予多個權限群組的權限,而不是一次授予所有權限群組的權限。這樣一來,盡量減少要求的權限數量就變得極為重要。這麼做會增加使用者的授權負擔,進而提高至少有一項要求遭拒的可能性。
需要成為預設處理常式的權限
部分應用程式需要存取通話記錄和簡訊相關的使用者機密資訊。如果想要求通話記錄和簡訊的專屬權限,並將應用程式發布至 Play 商店,必須先提示使用者將應用程式設為特定核心系統函式的「預設處理常式」,再要求這些執行階段權限。
如要進一步瞭解預設處理常式,包括如何向使用者顯示預設處理常式提示的指引,請參閱「僅可於預設處理常式中使用的權限」相關指南。
瞭解搭配運作的資料庫
您在應用程式中使用的資料庫有時會需要權限。舉例來說,廣告和數據分析資料庫可能需要 LOCATION
權限群組的存取權,才能執行所需功能。但從使用者的觀點來看,權限要求是來自您的應用程式,而非資料庫。
如同使用者會選擇針對相同功能使用較少權限的應用程式,開發人員也應檢查自己的程式庫,選擇不會使用非必要權限的第三方 SDK。舉例來說,假設您使用的程式庫提供位置資訊功能,請確認您並未要求 FINE_LOCATION
權限 (除非您要使用指定地區功能)。
限制位置資訊的背景存取權
應用程式在背景執行時,位置資訊存取權必須攸關應用程式的核心功能,且能明確嘉惠使用者。
測試兩種權限模型
在 Android 6.0 (API 級別 23) 以上版本中,使用者會在執行階段授予及撤銷應用程式權限,而不是在安裝應用程式時進行。因此,您必須在更廣泛的條件下測試應用程式。如果是 Android 6.0 之前的版本,您可以合理假設,只要應用程式能完整執行,就表示其具備在資訊清單中宣告的所有權限。而現在,無論 API 級別為何,使用者都能針對「任何」應用程式開啟或關閉權限。建議您進行測試,以確保應用程式在各種權限情境中都能正確運作。
下列提示有助於在搭載 API 級別 23 以上版本的裝置上,找出權限相關的程式碼問題:
- 找出應用程式目前的權限和相關程式碼路徑。
- 針對所有受權限保護的服務和資料,測試使用者流程。
- 測試授予或撤銷權限的各種組合情況。舉例來說,某個相機應用程式的資訊清單可能會列出
CAMERA
、READ_CONTACTS
和ACCESS_FINE_LOCATION
。您應在這些權限個別開啟及關閉的情況下測試應用程式,確保應用程式能夠妥善處理所有權限設定的情形。 - 使用 adb 工具,透過指令列管理權限:
- 依群組列出權限和狀態:
$ adb shell pm list permissions -d -g
- 授予或撤銷一或多項權限:
$ adb shell pm [grant|revoke] <permission-name> ...
- 依群組列出權限和狀態:
- 針對會使用權限的服務進行應用程式分析。
其他資源
- Android 權限適用的 Material Design 指南
- Android Marshmallow 6.0:要求權限:這部影片說明 Android 執行階段權限模型,以及向使用者要求相關權限的正確方式。
- 說明應用程式需要權限的原因
- Best practices for unique identifiers