隨著信息化技術(shù)的普及,移動(dòng)應(yīng)用在迅速改變著人們的生活方式。作為數(shù)字生活的載體,智能設(shè)備的演進(jìn)帶動(dòng)了數(shù)據(jù)處理技術(shù)的不斷成熟,這使得應(yīng)用對(duì)用戶信息的掌控日趨深入。與此同時(shí),人們的隱私保護(hù)意識(shí)也越來(lái)越強(qiáng),希望在享受移動(dòng)應(yīng)用帶來(lái)的無(wú)限便利之余,也能保護(hù)自己的隱私不受侵犯。因此,人們會(huì)更青睞那些能從操作系統(tǒng)層面對(duì)用戶和數(shù)據(jù)提供保護(hù)的平臺(tái)。
本文將向您介紹關(guān)于 Android 在隱私方面的變化和最佳實(shí)踐,幫助您主動(dòng)為用戶提供優(yōu)秀的隱私保護(hù)。同時(shí)我們還有幾個(gè)關(guān)于未來(lái) Android 版本的概念構(gòu)想與您分享。
△ 主動(dòng)為用戶提供全面的隱私保護(hù)
隱私保護(hù)三原則
△ 隱私保護(hù)的三個(gè)原則
我們?cè)谠O(shè)計(jì) Android 之初就充分考慮了對(duì)用戶隱私權(quán)的保護(hù),并且在最近的版本中將這一理念進(jìn)一步強(qiáng)化,進(jìn)而在保護(hù)用戶信息安全方面取得了更加顯著的進(jìn)步。我們一如既往地關(guān)心用戶的隱私權(quán),這份執(zhí)著背后是以下三個(gè)核心原則:
提升數(shù)據(jù)訪問(wèn)透明度: 讓用戶知道應(yīng)用在什么時(shí)間訪問(wèn)了哪些數(shù)據(jù);
簡(jiǎn)化用戶控制隱私訪問(wèn)的方式: 讓用戶方便地控制應(yīng)用能訪問(wèn)更多或更少的用戶數(shù)據(jù);
專注最小化數(shù)據(jù)訪問(wèn): 去除不必要的數(shù)據(jù)訪問(wèn),減少應(yīng)用的權(quán)限范圍,避免應(yīng)用泄露用戶的數(shù)據(jù)。
隱私保護(hù)最佳實(shí)踐
△ 集成隱私保護(hù)的三個(gè)最佳實(shí)踐
基于隱私保護(hù)三個(gè)核心原則,我們會(huì)持續(xù)為您提供各種各樣的工具和指導(dǎo),幫助您在應(yīng)用中高效地集成隱私保護(hù)功能。這里要向您分享的是在移動(dòng)應(yīng)用開(kāi)發(fā)中可以考慮的三個(gè)最佳實(shí)踐,您會(huì)了解如何提升隱私訪問(wèn)的透明度,了解如何在尊重用戶選擇權(quán)的前提下提供隱私訪問(wèn)的選項(xiàng),以及了解如何通過(guò)最小化隱私訪問(wèn)盡可能減少不必要用戶數(shù)據(jù)的獲取。
關(guān)注數(shù)據(jù)訪問(wèn)
您需要考慮的第一個(gè)最佳實(shí)踐是要仔細(xì)斟酌應(yīng)用對(duì)用戶數(shù)據(jù)的訪問(wèn)。一方面是由于 Android 12 讓用戶更直觀地看到自己的隱私如何被訪問(wèn),另一方面則是出于您尊重用戶意愿的考量。
應(yīng)用訪問(wèn)傳感器時(shí)的系統(tǒng)提示
△ Android 提升了應(yīng)用訪問(wèn)麥克風(fēng)和攝像頭時(shí)的透明度
隨著 Android 的透明度越來(lái)越高,您也越來(lái)越需要關(guān)注自己的應(yīng)用何時(shí)對(duì)用戶數(shù)據(jù)進(jìn)行了訪問(wèn)。Android 12 讓用戶更清楚地知曉應(yīng)用何時(shí)訪問(wèn)了麥克風(fēng)和攝像頭。每當(dāng)麥克風(fēng)或攝像頭被訪問(wèn)時(shí),用戶可以通過(guò)從屏幕右上角下拉打開(kāi)快捷設(shè)置,然后點(diǎn)擊對(duì)應(yīng)的指示圖標(biāo)來(lái)實(shí)時(shí)查看是哪些應(yīng)用在訪問(wèn)數(shù)據(jù)。如果用戶發(fā)現(xiàn)自己對(duì)此次訪問(wèn)并不知情,可以很方便地跳轉(zhuǎn)到應(yīng)用的權(quán)限設(shè)置界面并撤銷相關(guān)權(quán)限。所以需要您仔細(xì)審查應(yīng)用中涉及麥克風(fēng)、攝像頭訪問(wèn)的代碼,移除那些意外的訪問(wèn)操作。例如,您應(yīng)該確保在用戶觸發(fā)需要訪問(wèn)有關(guān)傳感器的功能前,應(yīng)用不會(huì)去獲取這些設(shè)備的數(shù)據(jù)。
應(yīng)用的隱私數(shù)據(jù)訪問(wèn)記錄
我們常常收到用戶的反饋,他們希望了解應(yīng)用究竟使用了哪些數(shù)據(jù)。對(duì)此我們做出了一些努力,全新的隱私信息中心讓用戶可以通過(guò)一個(gè)簡(jiǎn)單清晰的時(shí)間線視圖來(lái)了解到過(guò)去 24 小時(shí)中,哪些應(yīng)用訪問(wèn)了設(shè)備的麥克風(fēng)、攝像頭和地理位置數(shù)據(jù)。另外,用戶還可以查看到應(yīng)用是否在過(guò)去 24 小時(shí)里使用其他運(yùn)行時(shí)權(quán)限訪問(wèn)過(guò)相關(guān)數(shù)據(jù)。
△ 24 小時(shí)內(nèi)的隱私訪問(wèn)情況
建議您對(duì)應(yīng)用中相關(guān)的代碼路徑進(jìn)行仔細(xì)審查,確保對(duì)每一處隱私數(shù)據(jù)的訪問(wèn)都能做合理的解釋說(shuō)明。由于使用到的第三方 SDK 也會(huì)被當(dāng)作您應(yīng)用的一部分進(jìn)行統(tǒng)計(jì),所以需要為它們的隱私訪問(wèn)提供正當(dāng)?shù)挠美f(shuō)明。
應(yīng)用的數(shù)據(jù)使用說(shuō)明
△Play 商店新增的數(shù)據(jù)安全信息
用戶非常關(guān)心您的應(yīng)用是出于怎樣的原因訪問(wèn)了隱私數(shù)據(jù),所以當(dāng)用戶在 Play 商店瀏覽應(yīng)用時(shí),會(huì)看到一個(gè)專門的數(shù)據(jù)安全條款,它為用戶提供了直觀易懂的應(yīng)用數(shù)據(jù)使用的相關(guān)信息,從而幫助用戶在知情的前提下自主決定要安裝哪些應(yīng)用。這樣一來(lái),用戶會(huì)有更多的安全感,并且更能相信開(kāi)發(fā)者們會(huì)負(fù)責(zé)任地使用用戶數(shù)據(jù)。關(guān)于如何在 Play 商店的數(shù)據(jù)安全條款提供恰當(dāng)?shù)恼f(shuō)明,您可以查看視頻:為 Google Play 中的 "數(shù)據(jù)安全" 條款做好準(zhǔn)備:
https://www.bilibili.com/video/BV1xv4y137dL/
應(yīng)用讀取剪貼板時(shí)的通知
△應(yīng)用讀取剪貼板時(shí)的通知消息
相信您一定有過(guò)這樣的經(jīng)驗(yàn),好友向您發(fā)送了一條消息,比如用戶名和密碼,您常常會(huì)復(fù)制這些信息,然后粘貼到另一個(gè)應(yīng)用中使用。在這個(gè)過(guò)程中,這些關(guān)鍵數(shù)據(jù)會(huì)被存放在剪貼板中,任何應(yīng)用都可以讀取這些數(shù)據(jù),產(chǎn)生了潛在的隱私泄露風(fēng)險(xiǎn)。
每當(dāng)有應(yīng)用從剪貼板讀取數(shù)據(jù)時(shí),Android 都會(huì)通知用戶。每當(dāng)應(yīng)用調(diào)用 ClipboardManager#getPrimaryClip() 方法時(shí),Android 會(huì)判斷寫(xiě)入和讀取剪貼板數(shù)據(jù)的是不是同一個(gè)應(yīng)用,當(dāng)兩者來(lái)源不同時(shí),系統(tǒng)會(huì)通過(guò)一個(gè)消息框來(lái)提示用戶;當(dāng)兩者來(lái)自同一個(gè)應(yīng)用時(shí),則不會(huì)產(chǎn)生這樣的提示。所以我們建議您的應(yīng)用首先調(diào)用 ClipboardManager#getPrimaryClipDescription() 方法來(lái)獲取剪貼板中數(shù)據(jù)的基本信息,并根據(jù)其類型判斷是否需要進(jìn)一步讀取,從而最大限度減少對(duì)剪貼板數(shù)據(jù)的訪問(wèn)。另外,我們還建議您不要隨意訪問(wèn)剪貼板,如果有必要,也應(yīng)該在用戶知情和許可的前提下進(jìn)行。
為更加透明的隱私訪問(wèn)做好準(zhǔn)備
為了更好支持 Android 12 帶來(lái)的隱私透明特性,我們建議您仔細(xì)審查應(yīng)用的代碼是否還存在意外的隱私訪問(wèn)操作。您可以借助審計(jì) (auditing) API 來(lái)更好地發(fā)現(xiàn)潛在的隱私數(shù)據(jù)讀取操作以及第三方 SDK 對(duì)隱私數(shù)據(jù)的訪問(wèn)。這個(gè) API 可以在您的應(yīng)用訪問(wèn)敏感數(shù)據(jù)時(shí)調(diào)用一個(gè)應(yīng)用內(nèi)的回調(diào)函數(shù),并向其提供所訪問(wèn)的數(shù)據(jù)類型,這樣您就可以輕松地發(fā)現(xiàn)應(yīng)用在何時(shí)、何種情況下讀取了隱私數(shù)據(jù)。
△添加數(shù)據(jù)訪問(wèn)操作的回調(diào)函數(shù)
您也可以通過(guò)權(quán)限 intent API 來(lái)向用戶說(shuō)明為什么您的應(yīng)用需要訪問(wèn)地理位置、攝像頭和麥克風(fēng),從而幫助他們理解和判斷是否要給予這些權(quán)限。您通過(guò)此 API 提供的這些信息將會(huì)在隱私訪問(wèn)信息面板及應(yīng)用的權(quán)限管理界面中向用戶展示。
△添加權(quán)限 intent
上面的代碼展示了您添加權(quán)限 intent 時(shí)需要進(jìn)行的配置。這段代碼在您的應(yīng)用中添加了一個(gè) activity,它可以在啟動(dòng)時(shí)告知用戶為什么要訪問(wèn)數(shù)據(jù)。您需要把 android:permission 屬性設(shè)置為 START_VIEW_PERMISSION_USAGE。如果您的應(yīng)用是針對(duì) Android 12 進(jìn)行構(gòu)建的,那么還需要添加 android:exported="true" 屬性。接著添加一個(gè) intent-filter 標(biāo)簽,隨后根據(jù)您的需要,分別將 android.intent.action.VIEW_PERMISSION_USAGE (在應(yīng)用的權(quán)限管理界面顯示) 和 android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD (在隱私訪問(wèn)面板顯示) 添加到這個(gè)標(biāo)簽里。這樣一來(lái),用戶就可以在您的應(yīng)用名稱旁看到一個(gè)與應(yīng)用的 intent-filter 對(duì)應(yīng)的圖標(biāo)。如果需要詳細(xì)了解數(shù)據(jù)訪問(wèn)審計(jì) API 和權(quán)限 intent 的更多內(nèi)容,請(qǐng)參閱:使用隱私信息中心提高用戶透明度。
綜上所述,在開(kāi)發(fā)應(yīng)用時(shí),對(duì)于數(shù)據(jù)訪問(wèn)需要注意以下幾點(diǎn):
只有在必要時(shí)才訪問(wèn)隱私數(shù)據(jù)。不必要的數(shù)據(jù)訪問(wèn)不僅會(huì)讓用戶感到困惑,還會(huì)增加隱私泄露的風(fēng)險(xiǎn);
注意引入第三方庫(kù)時(shí)添加的權(quán)限聲明。您可以通過(guò)合并 manifest 來(lái)查看引入的第三方庫(kù)聲明了哪些權(quán)限。別讓引入的 SDK 和第三方庫(kù)導(dǎo)致您應(yīng)用被下架!這篇文章為您提供了更多的參考信息;
切勿過(guò)度訪問(wèn)用戶數(shù)據(jù)。對(duì)用戶隱私數(shù)據(jù)的讀取如果超過(guò)了用戶使用的需要,就是對(duì)用戶知情權(quán)和控制權(quán)的侵犯。
尊重用戶選擇
我們要分享的第二個(gè)最佳實(shí)踐關(guān)乎著用戶的選擇。Android 用戶可以自行掌控哪些應(yīng)用可以訪問(wèn)他們的敏感數(shù)據(jù),以及這些數(shù)據(jù)被應(yīng)用訪問(wèn)的程度。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),掌握好這個(gè)度非常重要。
研究表明,用戶對(duì)應(yīng)用需要訪問(wèn)數(shù)據(jù)的原因了解得越充分,那么他們認(rèn)可這些訪問(wèn)的可能性就越大。您需要通過(guò)提供安全的默認(rèn)參數(shù)來(lái)平衡用戶的掌控權(quán)和應(yīng)用的訪問(wèn)權(quán)限,所以您應(yīng)該向用戶提供一些易于理解的選項(xiàng),并尊重他們的意志。
更細(xì)致的位置權(quán)限選項(xiàng)
△選擇大致位置能讓?xiě)?yīng)用減少訪問(wèn)用戶的位置信息
我們?cè)?Android 12 中引入了粒度更細(xì)的位置權(quán)限選項(xiàng),使得用戶可以自行決定是否只向應(yīng)用提供粗略的位置信息。我們建議您仔細(xì)檢查應(yīng)用中所有需要訪問(wèn)位置信息的用例,如果精確的定位不是必須的,請(qǐng)改為申請(qǐng) ACCESS_COARSE_LOCATION 權(quán)限。
無(wú)論何種情況下,您都應(yīng)該具體地向用戶說(shuō)明為什么需要訪問(wèn)位置信息,并且按照具體的精度需求逐漸向用戶申請(qǐng)更精確定位信息的訪問(wèn)權(quán)限。同時(shí),您需要考慮到用戶僅允許應(yīng)用獲取粗略位置的情況,不能因?yàn)槲恢眯畔⒉痪_就拒絕讓用戶繼續(xù)使用。
如下示例代碼包含了兩個(gè)功能,其中一個(gè)是只需要訪問(wèn)大概位置,而另一個(gè)則是需要獲取精確定位。當(dāng)用戶給予應(yīng)用獲取大致位置的權(quán)限時(shí),您需要通過(guò) shouldShowRequestPermissionRationale API 來(lái)檢查是否需要向用戶顯示必要的權(quán)限申請(qǐng)說(shuō)明。如果返回了 true,則需要展示您的說(shuō)明,同時(shí)顯示申請(qǐng)大致位置的彈框 (請(qǐng)求 ACCESS_COARSE_LOCATION 權(quán)限)。
// 請(qǐng)求 ACCESS_COARSE_LOCATION 權(quán)限 requestPermissions( Context, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), REQUEST_CODE )
△請(qǐng)求 ACCESS_COARSE_LOCATION 權(quán)限
if (grantResults[1] == PackageManager.PERMISSION_GRANTED) { // ACCESS_COARSE_LOCATION 權(quán)限已獲授權(quán)。 }
△處理請(qǐng)求的結(jié)果
當(dāng)用戶以后用到需要獲取精確定位的功能時(shí),您就可以通過(guò)向用戶顯示申請(qǐng)更精確位置信息的彈框來(lái)獲得 ACCESS_FINE_LOCATION 權(quán)限了。您同樣需要確保用戶了解您的位置用例后再發(fā)起請(qǐng)求。
// 請(qǐng)求 ACCESS_FINE_LOCATION 權(quán)限 requestPermissions( Context, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_CODE )
△請(qǐng)求 ACCESS_FINE_LOCATION 權(quán)限
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // ACCESS_FINE_LOCATION 權(quán)限已獲授權(quán)。 }△處理請(qǐng)求的結(jié)果
全局權(quán)限開(kāi)關(guān)
Android 12 中引入了這樣兩個(gè)開(kāi)關(guān),分別對(duì)應(yīng)攝像頭和麥克風(fēng)的全局訪問(wèn):
△麥克風(fēng)和攝像頭的全局開(kāi)關(guān)
這兩個(gè)開(kāi)關(guān)允許用戶迅速切斷整臺(tái)設(shè)備上所有應(yīng)用對(duì)攝像頭或者麥克風(fēng)的訪問(wèn)。如果用戶在應(yīng)用中使用了某個(gè)需要訪問(wèn)攝像頭、麥克風(fēng)的功能,那么系統(tǒng)將會(huì)向用戶詢問(wèn)是否需要立即開(kāi)放傳感器的訪問(wèn)。這組開(kāi)關(guān)與直接拒絕訪問(wèn)權(quán)限是不同的,因?yàn)楂@取訪問(wèn)權(quán)的整個(gè)過(guò)程是由系統(tǒng)來(lái)處理的,提醒用戶啟用設(shè)備也是由系統(tǒng)展示的,應(yīng)用無(wú)需進(jìn)行任何額外的操作。
此外值得一提的是,我們?cè)谶@次更新中還增加了對(duì)運(yùn)動(dòng)傳感器采樣率的限制 (200Hz 以內(nèi))。
通知顯示權(quán)限
我們常常聽(tīng)到用戶關(guān)于設(shè)備上通知過(guò)多的抱怨,所以我們?cè)谛掳姹局?,要求?yīng)用需要向用戶申請(qǐng)通知顯示權(quán)限,只有當(dāng)用戶希望或允許收到通知時(shí),應(yīng)用才可以向用戶發(fā)送通知。
△限制通知權(quán)限能降低通知消息的干擾
如果您的應(yīng)用需要向用戶發(fā)送通知,請(qǐng)記得在清單文件中添加 POST_NOTIFICATIONS 權(quán)限的聲明。下面的代碼展示了如何申請(qǐng)通知的權(quán)限:
// 請(qǐng)求權(quán)限后向用戶發(fā)送通知 requestPermissions( Context, arrayOf(Manifest.permission.POST_NOTIFICATIONS), REQUEST_CODE )△請(qǐng)求通知權(quán)限
您可以通過(guò) Notification.areNotificationsEnabled API 或者PermissionChecker 來(lái)檢查應(yīng)用是否已經(jīng)獲得了通知權(quán)限。申請(qǐng)通知權(quán)限的方法與申請(qǐng)其他權(quán)限相同,您不需要做額外的調(diào)整。 這里給您補(bǔ)充了一些需要注意的事項(xiàng):
在訪問(wèn)數(shù)據(jù)前,讓用戶充分了解您讀取數(shù)據(jù)的原因;
做好用戶和系統(tǒng)拒絕權(quán)限時(shí)的操作,當(dāng)用戶二次拒絕時(shí),您應(yīng)該尊重用戶的意愿;
按需逐級(jí)獲取隱私數(shù)據(jù),不要一次性申請(qǐng)所有權(quán)限;
當(dāng)用戶拒絕或是撤銷某項(xiàng)權(quán)限時(shí),您需要讓?xiě)?yīng)用能無(wú)縫回退到無(wú)需權(quán)限即可運(yùn)行的狀態(tài)。
最大程度減少權(quán)限使用
第三個(gè)最佳實(shí)踐是最大程度減少權(quán)限的使用。一方面您應(yīng)當(dāng)對(duì)用戶的意愿和選擇保持尊重,另一方面您還可以使用 Android 的替代 API,在簡(jiǎn)化敏感數(shù)據(jù)訪問(wèn)的同時(shí)提供更好的隱私控制。以下幾個(gè)方案可以幫助您最大限度減少數(shù)據(jù)訪問(wèn)。
使用新的附近設(shè)備訪問(wèn)權(quán)限
可穿戴設(shè)備在最近幾年發(fā)展迅猛,大量的應(yīng)用需要與這些設(shè)備進(jìn)行交互。在以前,應(yīng)用必須先申請(qǐng)位置訪問(wèn)權(quán)限才能與配套設(shè)備進(jìn)行藍(lán)牙連接。開(kāi)發(fā)者們向我們反饋了這種不恰當(dāng)?shù)脑O(shè)計(jì),尤其是當(dāng)應(yīng)用只需要獲取藍(lán)牙訪問(wèn)權(quán)限而不需要獲得設(shè)備位置的時(shí)候。過(guò)度的權(quán)限申請(qǐng)也使得用戶對(duì)應(yīng)用的行為正當(dāng)性產(chǎn)生懷疑,這些反饋敦促著我們改進(jìn)權(quán)限的對(duì)應(yīng)關(guān)系。
△訪問(wèn)附近設(shè)備的權(quán)限
構(gòu)建目標(biāo)為 API 30 及以前版本 Android 的應(yīng)用,需要同時(shí)申請(qǐng) BLUETOOTH_ADMIN 和 BLUETOOTH 權(quán)限,以及位置權(quán)限才能實(shí)現(xiàn)發(fā)現(xiàn)、配對(duì)和連接外部設(shè)備。比如下方的代碼是您的應(yīng)用在較早設(shè)備上需要進(jìn)行的權(quán)限聲明:
△在較早的設(shè)備上申請(qǐng)藍(lán)牙有關(guān)權(quán)限
當(dāng)您切換到構(gòu)建 API 31 的應(yīng)用時(shí),可以在上述權(quán)限聲明的基礎(chǔ)上添加一個(gè) maxSDKVersion 屬性:
△兼容新舊設(shè)備的前提下申請(qǐng)藍(lán)牙有關(guān)權(quán)限
隨后,您需要添加 BLUETOOTH_SCAN 權(quán)限聲明,并且使用 neverForLocation 標(biāo)記來(lái)向系統(tǒng)說(shuō)明您不會(huì)使用這個(gè)權(quán)限來(lái)推算設(shè)備的位置信息。同時(shí)您需要聲明 BLUETOOTH_CONNECT 權(quán)限來(lái)與藍(lán)牙設(shè)備交互、通過(guò) BLUETOOTH_ADVERTISE 來(lái)將當(dāng)前設(shè)備信息廣播給附近的藍(lán)牙設(shè)備。
為應(yīng)用設(shè)置智能應(yīng)用休眠功能
在 2020 年發(fā)布 Android 11時(shí),我們同時(shí)推出了自動(dòng)重置權(quán)限的功能,并且通過(guò) Google Play 服務(wù)的更新將這項(xiàng)功能帶到了運(yùn)行 Android 6 及以后版本系統(tǒng)的設(shè)備上。當(dāng)某個(gè)應(yīng)用有數(shù)月沒(méi)有被使用時(shí),Android 會(huì)自動(dòng)撤銷該應(yīng)用的某些授權(quán)。從這項(xiàng)更新發(fā)布以后的情況分析,僅 14 天內(nèi)已經(jīng)有 850 萬(wàn)應(yīng)用的權(quán)限因長(zhǎng)久未使用被撤銷了。所以建議您總是要先檢查權(quán)限是否還存在,避免因?yàn)橄到y(tǒng)撤銷權(quán)限而產(chǎn)生錯(cuò)誤。
△Android 11 引入的權(quán)限自動(dòng)重置功能
2021 年,在權(quán)限自動(dòng)重置功能的基礎(chǔ)上,我們推出了智能應(yīng)用休眠功能。Android 會(huì)自動(dòng)將長(zhǎng)期沒(méi)有使用的應(yīng)用進(jìn)行休眠,從而優(yōu)化設(shè)備存儲(chǔ)、改善性能和提高安全性。系統(tǒng)不僅會(huì)撤銷用戶此前的授權(quán),還會(huì)強(qiáng)制停止應(yīng)用,收回內(nèi)存、存儲(chǔ)空間及其他臨時(shí)資源。
當(dāng)應(yīng)用進(jìn)入休眠后,系統(tǒng)會(huì)阻止應(yīng)用在后臺(tái)運(yùn)行任務(wù),或者接收推送通知。而結(jié)束應(yīng)用休眠的方式也非常簡(jiǎn)單,用戶只需要啟動(dòng)應(yīng)用即可。與權(quán)限自動(dòng)重置類似,應(yīng)用進(jìn)入休眠時(shí),用戶會(huì)收到相應(yīng)的通知,同時(shí)用戶也可以在設(shè)置中選擇關(guān)閉休眠。
用好分區(qū)存儲(chǔ)策略
Android 10 的發(fā)布首次引入了分區(qū)存儲(chǔ)機(jī)制,它為隱私保護(hù)提供了一種新的存儲(chǔ)方案。隨著后續(xù)幾個(gè)版本的迭代更新,其他應(yīng)用不再能訪問(wèn)某個(gè)應(yīng)用的外部目錄了。您也可以在不請(qǐng)求任何權(quán)限的基礎(chǔ)上添加和編輯本應(yīng)用的文件,或是在用戶知情同意的前提下編輯第三方應(yīng)用產(chǎn)生的文件。而如果您將文件添加到共享存儲(chǔ)目錄中,則無(wú)需任何權(quán)限申請(qǐng)操作。
使用照片選擇器
未來(lái)我們會(huì)發(fā)布一個(gè)照片選擇器 (Photo Picker),它可以無(wú)需任何請(qǐng)求即可讀取用戶選擇的照片或視頻。您可以在其中選擇設(shè)備本地存儲(chǔ)的照片或視頻,也可以訪問(wèn)到來(lái)自 Google Photos 等云提供商的照片或視頻。這個(gè)新的選擇器會(huì)替換以前申請(qǐng)權(quán)限的訪問(wèn)方式,簡(jiǎn)化應(yīng)用的權(quán)限聲明。
照片選擇器 (Photo Picker) https://developer.android.google.cn/about/versions/13/features/photopicker
通過(guò) Google Play 系統(tǒng)更新,Android 11 及以后的設(shè)備都可以使用這個(gè)新的照片選擇器。下面是一個(gè)使用這款新照片選擇器的例子:
// 要發(fā)送的 intent val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply { putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, 15) putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/*", "video/*")) } // 處理返回的 intent override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { // 遍歷所有的 URI 結(jié)果 for (i in 0 until data.clipData.itemCount) { val uri = data.clipData.getItemAt(i).uri val inputStream = contentResolver.openInputStream(uri) } }△獲取照片選擇器的 intent 如果您需要在應(yīng)用中喚起這個(gè)選擇器,需要啟動(dòng) ACTION_PICK_IMAGES Intent,然后指定可選取媒體的最大數(shù)量和支持的文件類型。當(dāng)用戶選中文件后,可以通過(guò) clipData 屬性讀取各個(gè)文件的 URI,然后使用ContentResolver 來(lái)讀取文件內(nèi)容。為了能夠兼容更早前的設(shè)備,我們還計(jì)劃發(fā)布一個(gè)支持庫(kù),讓?xiě)?yīng)用在支持時(shí)使用新的照片選擇器,不支持時(shí)使用存儲(chǔ)訪問(wèn)框架簡(jiǎn)化對(duì)文件元數(shù)據(jù)、內(nèi)容的讀取。
存儲(chǔ)訪問(wèn)框架 https://developer.android.google.cn/guide/topics/providers/document-provider
新的存儲(chǔ)權(quán)限劃分策略
此外,我們還在努力通過(guò)新的存儲(chǔ)空間功能為用戶帶來(lái)更清晰、為開(kāi)發(fā)者帶來(lái)更精準(zhǔn)的存儲(chǔ)權(quán)限劃分粒度。比如在下個(gè)版本中引入的 READ_IMAGES 權(quán)限允許您讀取共享存儲(chǔ)空間上的所有圖片和視頻文件,而 READ_AUDIO 可用于讀取所有的音頻文件 (包括 .m3u 播放列表)。 借助分區(qū)存儲(chǔ),您應(yīng)用訪問(wèn)自己分區(qū)內(nèi)的文件時(shí)不需要申請(qǐng)?jiān)L問(wèn)權(quán)限;位于共享存儲(chǔ)空間的非媒體文件仍然可以通過(guò)存儲(chǔ)訪問(wèn)框架獲得。如果要在您的 manifest 中包括這些變化,您可以參照這個(gè)例子:
△聲明使用新的權(quán)限
請(qǐng)注意,MANAGE_EXTERNAL_STORAGE 權(quán)限可以用于那些核心功能就是要與大量的文件進(jìn)行交互的應(yīng)用。但此權(quán)限受限于 Google Play 關(guān)于使用 "所有文件訪問(wèn)權(quán)限" 的政策。關(guān)于此權(quán)限的使用,請(qǐng)參閱管理存儲(chǔ)設(shè)備上的所有文件:
https://developer.android.google.cn/training/data-storage/manage-all-files
以上這些建議概括如下幾點(diǎn):
盡可能減少位置數(shù)據(jù)訪問(wèn),并且盡量只在應(yīng)用處于前臺(tái)時(shí)訪問(wèn)粗略的位置信息;
使用新的藍(lán)牙權(quán)限來(lái)更好地提供隱私保護(hù);
盡可能通過(guò)新的照片選擇器來(lái)避免請(qǐng)求共享存儲(chǔ)空間。
開(kāi)發(fā)者可降級(jí)權(quán)限
一些應(yīng)用可能不再需要某些之前由用戶授予過(guò)的權(quán)限,這些權(quán)限曾用于開(kāi)啟某項(xiàng)特定功能或保留舊的 Android 版本中的敏感權(quán)限。在 Android 13 中,我們提供了新的 API,讓您的應(yīng)用通過(guò)降級(jí)以前被授予的運(yùn)行時(shí)權(quán)限來(lái)保護(hù)用戶隱私。
感謝您的閱讀,希望我們可以共同構(gòu)建一個(gè)能夠讓用戶安心使用的操作系統(tǒng)和應(yīng)用生態(tài)。
審核編輯 :李倩
-
Android
+關(guān)注
關(guān)注
12文章
3941瀏覽量
127706 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6874瀏覽量
123563
原文標(biāo)題:Android用戶隱私保護(hù)
文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論