我們在開發 Android 時,不僅著重於協助使用者善用各項創新功能,也持續將維護使用者的安全性和隱私權當做首要任務。
本頁說明的一些最佳做法也會列在一覽表中。
注意權限
請秉持資訊公開的原則,並為應用程式使用者提供控制選項,以贏得使用者的信任。
只要求應用程式功能所需的最低權限。每當您的應用程式推出重大異動時,請檢查應用程式要求的權限,確認應用程式的功能仍需要這些權限才能運作。
- 提醒您,Android 常會在新版本中導入重視隱私權的資料存取方式,這樣一來,應用程式不需要權限也能取得資料。 詳情請參閱「評估應用程式是否需要宣告權限」。
- 如果您透過 Google Play 發布應用程式,Android Vitals 功能會提供拒絕授權的應用程式使用者比例。如果大多數使用者常會拒絕讓應用程式功能存取必要權限,請根據這項資料重新評估此類功能的設計。
按照建議的流程,解釋應用程式中的功能為什麼需要這項權限。只在必要時才提出權限要求,而不是一啟動應用程式就要求權限,使用者就會比較清楚應用程式為何需要權限。
請注意,使用者或系統可能會多次拒絕授予權限。Android 尊重使用者的選擇,因此會忽略同一個應用程式提出的權限要求。
在使用者拒絕或撤銷授權時優雅降級。舉例來說,假設使用者未授權讓應用程式存取麥克風,您可以停用應用程式的語音輸入功能。
更新應用程式時,請針對應用程式不再需要的執行階段權限,移除應用程式的存取權。
如果您使用的 SDK 或程式庫會存取受危險權限保護的資料,使用者通常會認為是您的應用程式需要相應權限。請務必瞭解 SDK 需要哪些權限及其原因。
- 如果您在 Android 11 (API 級別 30) 測試應用程式,請使用資料存取稽核功能找出自己的程式碼和第三方程式庫程式碼中有哪些地方會存取私人資料。
盡可能避免使用位置資訊
如果您的應用程式不需要任何位置資料即可達到既定用途,就請不要提出任何位置存取權要求。如果您的應用程式會要求位置資訊存取權,請讓使用者在資訊充足的情況下做決定。
- 如果您的應用程式需要收集位置資訊,請說明應用程式會如何使用這項資訊為使用者提供特定功能。
- 如果您的應用程式必須透過藍牙/Wi-Fi 將使用者的裝置與鄰近裝置配對,請使用不需要位置存取權的隨附裝置管理工具。
- 查看應用程式需要的位置資訊精細程度。只要取得概略的位置存取權,就足以達成大部分的位置資訊相關用途。
- 在使用者看得到應用程式時存取位置資料。這樣一來,使用者可以更瞭解應用程式要求存取位置資訊的原因。
- 如果應用程式需要背景位置資訊才能運作 (例如實作地理圍欄功能),請確認應用程式確實需要這項權限才能運作核心功能,並讓使用者明確知道應用程式在背景存取位置資訊。進一步瞭解使用背景位置資訊的注意事項。
- 在 Android 10 (API 級別 29) 以上版本中,使用者可以將應用程式限制為只在使用期間才能要求位置存取權。設計應用程式時,要讓應用程式能夠在沒有「一律允許」位置存取權時優雅降級。
- 如果您的應用程式需要保留位置存取權,以便在使用者離開應用程式的 UI 後,繼續完成使用者啟動的工作,請在應用程式進入背景前啟動前景服務。您可以透過其中一種 Android 生命週期回呼執行這項動作,例如
onPause()
。 - 請勿從背景啟動前景服務。建議您改為透過通知啟動應用程式,然後在應用程式 UI 處於可見狀態時執行位置資訊程式碼。
安全處理資料
注意:如要進一步瞭解哪些資料屬於私密資料,請參閱 Google Play 開發人員政策中心的使用者資料文章頁面。
請以公開透明且安全的方式處理私密資料。
- 讓使用者瞭解應用程式收集、使用或分享私密資料的時間和原因。
- 盡可能使用限定範圍儲存空間模型。瞭解如何根據應用程式用途遷移至限定範圍儲存空間。
- 一律使用安全的網路連線。如果是應用程式的靜態資料,請使用 Android 內建的憑證加密;如果是傳輸中的資料,無論是否為私密內容,請一律在傳輸過程中使用傳輸層安全標準 (TLS),這項標準的前身為安全資料傳輸層 (SSL)。
- 將含有私密資料的檔案,存放在內部儲存空間中的應用程式私人目錄。
- 在 Android 10 (API 級別 29) 中,請將只與應用程式相關的檔案,儲存在外部儲存空間中的應用程式專屬目錄。進一步瞭解限定範圍儲存空間。
- 如要將私密資料傳送至其他應用程式,請使用明確意圖,並授予一次性資料存取權,進一步限制其他應用程式存取資料。
- 即使應用程式在前景運作,也請在裝置畫面上即時顯示應用程式正在存取麥克風或相機。請注意,Android 9 (API 級別 28) 以上版本不允許應用程式在背景運作時存取麥克風或相機。
- 請勿在 Logcat 訊息或應用程式的記錄檔中加入私密資料。進一步瞭解如何處理使用者資料。
Jetpack 備有多個程式庫,可進一步保護應用程式的資料。詳情請參閱 Jetpack Security 程式庫和 Jetpack Preferences 程式庫使用指南。
使用可重設的 ID
請尊重使用者的隱私權,並使用可重設的 ID。詳情請參閱「專屬 ID 的最佳做法」。
- 請勿存取 IMEI 或裝置序號這兩項永久 ID。在指定目標版本為 Android 10 (API 級別 29) 以上版本的應用程式中,如果您嘗試存取這些 ID,就會發生
SecurityException
。 - 只將廣告 ID 用於剖析使用者或廣告用途。如要在 Google Play 發布應用程式,這是必須遵守的規定。請一律尊重使用者的個人化廣告追蹤選擇。
- 針對絕大多數的非廣告用途,請使用採取應用程式限定範圍的私密儲存全域專屬 ID (GUID)。
- 使用安全設定 Android ID (SSAID) 在您擁有的應用程式之間共用狀態,而不必要求使用者登入帳戶。進一步瞭解如何在應用程式之間追蹤未登入的使用者偏好。