隨著信息化技術(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)想與您分享。
隱私保護(hù)三原則
我們?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è)核心原則,我們會(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)提示
應(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ù)。
應(yīng)用的數(shù)據(jù)使用說(shuō)明
應(yīng)用讀取剪貼板時(shí)的通知
每當(dāng)有應(yīng)用從剪貼板讀取數(shù)據(jù)時(shí),Android 都會(huì)通知用戶。每當(dāng)應(yīng)用調(diào)用 ClipboardManager#getPrimaryClip() 方法時(shí),Android 會(huì)判斷寫入和讀取剪貼板數(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ù)。
<activity android:name="DataAccessRationaleActivity"
android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE"/>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD"/>
intent-filter>
activity>
上面的代碼展示了您添加權(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)。
綜上所述,在開(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)限。
- 切勿過(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)
我們?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
)
if (grantResults[1] == PackageManager.PERMISSION_GRANTED) {
// ACCESS_COARSE_LOCATION 權(quán)限已獲授權(quán)。
}
當(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
)
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// ACCESS_FINE_LOCATION 權(quán)限已獲授權(quán)。
}
全局權(quán)限開(kāi)關(guān)
Android 12 中引入了這樣兩個(gè)開(kāi)關(guān),分別對(duì)應(yīng)攝像頭和麥克風(fēng)的全局訪問(wè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ā)送通知。
您可以通過(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):// 請(qǐng)求權(quán)限后向用戶發(fā)送通知
requestPermissions(
Context,
arrayOf(Manifest.permission.POST_NOTIFICATIONS),
REQUEST_CODE
)
-
在訪問(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í),您需要讓應(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)系。
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
當(dāng)您切換到構(gòu)建 API 31 的應(yīng)用時(shí),可以在上述權(quán)限聲明的基礎(chǔ)上添加一個(gè) maxSDKVersion 屬性:
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADVERTISE"/>
隨后,您需要添加 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ò)誤。
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)限聲明。
通過(guò) Google Play 系統(tǒng)更新,Android 11 及以后的設(shè)備都可以使用這個(gè)新的照片選擇器。下面是一個(gè)使用這款新照片選擇器的例子:
如果您需要在應(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ù),讓應(yīng)用在支持時(shí)使用新的照片選擇器,不支持時(shí)使用存儲(chǔ)訪問(wèn)框架簡(jiǎn)化對(duì)文件元數(shù)據(jù)、內(nèi)容的讀取。// 要發(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)
}
}
- 新的存儲(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è)例子:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="31"/>
<uses-permission android:name="android.permission.READ_IMAGES"/>
<uses-permission android:name="android.permission.READ_AUDIO"/>
<uses-permissionandroid:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
請(qǐng)注意,MANAGE_EXTERNAL_STORAGE 權(quán)限可以用于那些核心功能就是要與大量的文件進(jìn)行交互的應(yīng)用。但此權(quán)限受限于 Google Play 關(guān)于使用 "所有文件訪問(wèn)權(quán)限" 的政策。
以上這些建議概括如下幾點(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)。
原文標(biāo)題:保護(hù) Android 用戶隱私,從這些事做起
文章出處:【微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
Android
+關(guān)注
關(guān)注
12文章
3973瀏覽量
130324 -
隱私保護(hù)
+關(guān)注
關(guān)注
0文章
300瀏覽量
16784 -
隱私數(shù)據(jù)
+關(guān)注
關(guān)注
0文章
7瀏覽量
2188
原文標(biāo)題:保護(hù) Android 用戶隱私,從這些事做起
文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
通過(guò)什么方法能獲得關(guān)于Ethercat方面的設(shè)計(jì)方案和設(shè)計(jì)資料
天馬榮獲新財(cái)富雜志“2024 ESG最佳實(shí)踐獎(jiǎng)”
華納云:VFS在提升文件系統(tǒng)性能方面的具體實(shí)踐
AI在環(huán)境可持續(xù)發(fā)展方面的作用
晶科能源入選2024年度Wind中國(guó)上市公司ESG最佳實(shí)踐100強(qiáng)榜單
UPS電源與EPS電源在功能和應(yīng)用方面的區(qū)別
MES系統(tǒng)的最佳實(shí)踐案例
愛(ài)芯元速榮膺最佳技術(shù)實(shí)踐應(yīng)用獎(jiǎng)
邊緣計(jì)算架構(gòu)設(shè)計(jì)最佳實(shí)踐
云計(jì)算平臺(tái)的最佳實(shí)踐
衰減 AMC3301 系列輻射發(fā)射 EMI 的最佳實(shí)踐

電機(jī)驅(qū)動(dòng)器電路板布局的最佳實(shí)踐

評(píng)論