唯一 ID 的最佳做法

本文件說明如何為 調整出合適的應用程式配置

如需 Android 權限的一般資訊,請參閱權限 總覽頁面。最佳 處理 Android 權限的建議做法,請參閱「應用程式權限最佳做法」 做法

使用 Android ID 的最佳做法

為保護使用者隱私,請使用最嚴格的 ID 是否符合應用程式的用途。請特別遵循下列最佳做法:

  1. 盡可能選擇可由使用者重設的 ID。即使應用程式使用無法重設的硬體 ID 以外的 ID,也能執行大部分用途。
  2. 避免使用硬體 ID。在大多數情況下,您可以避免使用國際行動裝置識別碼 (IMEI) 等硬體 ID,而不會限制必要功能。

    Android 10 (API 級別 29) 針對無法重設的 ID (包括 IMEI 和序號) 新增限制。您的應用程式必須是裝置或設定檔擁有者應用程式、具備特殊電信業者權限,或是具備 READ_PRIVILEGED_PHONE_STATE 特權權限,才能存取這些 ID。

  3. 廣告 ID 只用於剖析使用者或廣告用途。時間 使用廣告 ID,且一律尊重使用者已選取的 廣告追蹤。如果 您必須將廣告 ID 與 資訊,但這些項目必須取得使用者的明確同意 使用者

  4. 請勿跨平台重設廣告 ID。

  5. 請盡可能使用 Firebase 安裝 ID (FID) 或私密儲存的 GUID 來處理所有其他用途 (支付詐欺防範和電話服務除外)。針對絕大多數的非廣告用途,FID 或 GUID 應該足夠

  6. 使用適合您用途的 API,盡可能降低隱私權風險。如要保護高價值內容,請使用 DRM API;如要防範濫用行為,請使用 Play Integrity API。如要判斷裝置是否為正版,Play Integrity API 是最簡單的方法,而且不會造成隱私權風險。

本指南的其餘部分會進一步說明在開發 Android 應用程式的情況下,這些規則的運作方式。

使用廣告 ID

廣告 ID 是可由使用者重設的 ID,適合用於廣告用途。不過請注意 ID:

務必尊重使用者重設廣告 ID 的意圖。 請勿利用其他 ID 或指紋來橋接使用者重設 同時比對後續的廣告 ID 徵得使用者同意Google Play 開發人員內容 政策指出 包括:

「...廣告 ID 經過重設後,在未經使用者明確同意下,新 ID 不得與舊 ID 本身或其衍生資料建立連結。」

一律尊重相關的個人化廣告標記。廣告 ID 可進行設定,讓使用者限制與 ID 相關聯的追蹤量。請務必使用 AdvertisingIdClient.Info.isLimitAdTrackingEnabled() 方法,確保您不會違反使用者的意願。《Google Play 開發人員內容政策》規定如下:

"...您必須遵守使用者的 [停用按照興趣顯示的廣告]或 「停用廣告個人化」以及環境敘述如果使用者啟用了這項設定 您不得使用廣告 ID 建立使用者個人資料 或針對特定使用者放送個人化廣告。 允許使用的功能包括內容相關廣告、展示頻率上限、轉換追蹤、報表與安全性,以及詐騙偵測。」

對於您使用的 SDK,請留意與使用廣告 ID 相關的隱私權或安全性政策。 舉例來說,如果您將 true 傳入 Google Analytics SDK 的 enableAdvertisingIdCollection() 方法,請務必查看並遵守所有適用的 Analytics SDK 政策

另請注意,《Google Play 開發人員內容》 政策規定 廣告 ID「不得與個人識別資訊連結」 或與任何永久裝置 ID 相關聯的資訊,例如 SSAID、MAC 位址、IMEI 等)。」

舉例來說,假設您想收集資訊,以便填入下列資料欄的資料庫資料表:

TABLE-01
timestamp ad_id account_id clickid
TABLE-02
account_id name dob country

在本例中,ad_id 欄可透過 account_id 彙整到 PII 因而違反 Google Play 開發人員政策 內容政策 (如果您 未取得使用者明確授權。

請注意,廣告主 ID 和 PII 之間的連結不一定這麼明確。系統可能會有「準識別項」出現個人識別資訊 廣告 ID 索引鍵資料表,這也會造成問題。舉例來說,假設我們將 TABLE-01 和 TABLE-02 變更為以下內容:

TABLE-01
timestamp ad_id clickid dev_model
資料表-02
timestamp demo account_id dev_model name

在這種情況下,如果點擊事件相當罕見,您還是可以使用事件的時間戳記和裝置型號,將廣告主 ID TABLE-01 與 TABLE-02 中的 PII 進行彙整。

雖然很難保證資料集中沒有這類準識別資訊,但您可以盡可能將獨特資料概括化,避免最明顯的彙整風險。在上述範例中,這意味著 更準確的時間戳記,讓多部裝置搭載相同的模型 每個時間戳記都會顯示。

其他解決方案包括:

  • 未設計用來明確連結個人識別資訊與廣告 ID 的表格。於 上方第一個範例不會納入「account_id」資料欄 在 TABLE-01 中。

  • 針對可存取廣告 ID 鍵值資料和個人識別資訊的使用者或角色,區隔及監控存取權控制清單。透過嚴密控管及稽核,針對這兩個來源的存取權 同時 (例如執行不同資料表的彙整) 時 廣告 ID 和 PII 之間的關聯風險一般來說,控制存取權的意思是指執行下列操作:

    1. 保留「廣告主 ID」鍵資料和 PII 的存取控制清單 (ACL) 來盡量減少分工和角色均不相交的 ACL。
    2. 實作存取記錄和稽核功能,以便偵測及管理這項規則的任何例外狀況。

如要進一步瞭解如何負責任地使用廣告 ID,請參閱 AdvertisingIdClient API 參考資料。

使用 FID 和 GUID

如要找出在裝置上執行的應用程式例項,最簡單的方法就是使用 Firebase 安裝 ID (FID),這是大多數非廣告用途的建議解決方案。只有已配置此 ID 的應用程式例項可存取此 ID,而且由於此 ID 只會在應用程式安裝時保留,因此 (相對來說) 很容易重設。

因此,與無法重設的裝置層級硬體 ID 相比,FID 可提供更佳的隱私權屬性。詳情請參閱 firebase.installations API 參考資料。

不可行時,您也可以使用自訂 全域專屬 ID (GUID),用來識別應用程式執行個體。最簡單的方法是使用下列程式碼產生自己的 GUID:

KotlinJava
var uniqueID = UUID.randomUUID().toString()
String uniqueID = UUID.randomUUID().toString();

由於此 ID 在全球皆不重複,因此可用於識別特定應用程式例項。為避免跨應用程式連結 ID 而產生疑慮, 將 GUID 儲存在內部儲存空間,而非外部 (共用) 儲存空間。詳情請參閱「資料和檔案儲存空間總覽」頁面。

不支援 MAC 位址

MAC 位址在全球都不會重複,無法由使用者重設,且不會因原廠重設而消失。基於這些原因,為了保護使用者隱私權,在 Android 6 以上版本中,只有系統應用程式可以存取 MAC 位址。第三方應用程式無法存取這些資料。

Android 11 中 MAC 位址可用性的變更

在指定 Android 11 以上版本的應用程式中,Passpoint 的 MAC 隨機化 網路是個別 Passpoint 設定檔,會根據 以下欄位:

  • 完整網域名稱 (FQDN)
  • 運作範圍
  • 憑證 (根據 Passpoint 設定檔中使用的憑證):
    • 使用者憑證:使用者名稱
    • 憑證憑證:憑證和憑證類型
    • SIM 卡憑證:EAP 類型和 IMSI

此外,非特權應用程式無法存取裝置的 MAC 位址,只能查看具有 IP 位址的網路介面。這會影響 getifaddrs()NetworkInterface.getHardwareAddress() 方法,以及傳送 RTM_GETLINK Netlink 訊息。

以下列出應用程式受到這項異動影響的方式:

  • NetworkInterface.getHardwareAddress() 會針對每個介面傳回空值。
  • 應用程式無法在 NETLINK_ROUTE 網路介面卡上使用 bind() 函式。
  • ip 指令不會傳回介面相關資訊。
  • 應用程式無法傳送 RTM_GETLINK 訊息。

請注意,大多數開發人員應使用 ConnectivityManager 的高階 API,而非 NetworkInterfacegetifaddrs() 或 Netlink 套接字等低階 API。舉例來說,如果應用程式需要目前路線的最新資訊,可以使用 ConnectivityManager.registerNetworkCallback() 監聽網路變更,並呼叫網路的相關 LinkProperties.getRoutes(),藉此取得這項資訊。

ID 特性

Android 作業系統提供多個具有不同行為特徵的 ID。該使用哪種 ID,取決於下列特性的運作方式 所需用途這些特性也會影響隱私權 因此,請務必瞭解這些特徵 互相啟動。

範圍

識別碼範圍會說明哪些系統可以存取該識別碼。Android 版 ID 範圍通常有三種變種版本

  • 單一應用程式:這個 ID 僅供應用程式內部使用,其他應用程式無法存取。
  • 應用程式群組:一組預先定義的相關應用程式都能存取這個 ID。
  • 裝置:裝置上安裝的所有應用程式都能存取這個 ID。

您授予 ID 的範圍越廣,該 ID 被用於追蹤的風險就越高。相反地,如果只有單一應用程式執行個體可以存取 ID,就無法用於追蹤不同應用程式中的交易裝置。

可重設性和持久性

可重設性和持續性會定義 ID 的效期,並解釋其作用 以及如何重設常見的重設觸發條件包括:應用程式內重設、透過 系統設定、啟動時重設和安裝時重設。Android 識別碼的生命週期可能有所不同,但生命週期通常與 ID 的重設方式有關:

  • 僅限工作階段:每次使用者重新啟動應用程式時,系統都會使用新的 ID。
  • 安裝重設:使用者每次解除安裝及重新安裝應用程式時,都會使用新的 ID。
  • 恢復原廠設定:每次使用者將裝置恢復原廠設定時,都會使用新的 ID。
  • FDR-persistent:在恢復原廠設定後仍會保留的 ID。

重設功能可讓使用者建立與任何現有設定檔資訊無關的新 ID。識別碼持續存在的時間越長,可靠性越高,例如在恢復原廠設定後仍持續存在,使用者遭到長期追蹤的風險就越高。如果 ID 會在重新安裝應用程式時重設,藉此減少持續性, 可讓 ID 重設 (即使沒有明確使用者) 或在「系統設定」中調整重設選項。

唯一性

唯一性可確立衝突的可能性,也就是在相關聯的範圍內存在相同的 ID。在最高層級,全域唯一 ID 永遠不會發生衝突,即使在其他裝置或應用程式中也是如此。否則,不重複性取決於 ID 的熵, 來源的隨機性參數舉例來說,如果使用安裝日期的農曆日期 (例如 2019-03-01) 來播種隨機 ID,發生衝突的機率會比使用安裝日期的 Unix 時間戳記 (例如 1551414181) 來播種 ID 高出許多。

一般來說,使用者帳戶 ID 可以視為不重複 ID。也就是說 裝置/帳戶組合有專屬 ID。另一方面,在某個群體中,識別碼越不具唯一性,隱私權保護程度就越高,因為這類識別碼不利於追蹤個別使用者。

完整性防護與不可實現性

你可以使用不易假冒或重播的 ID 證明 關聯裝置或帳戶具有特定屬性舉例來說,您可以證明裝置並非垃圾訊息散布者使用的虛擬裝置。難以冒用的 ID 也具有不可重複性。如果裝置 簽署包含秘密金鑰的訊息,很難宣稱他人的 裝置傳送了訊息。不可否認性可能是使用者想要的事物, 像是驗證付款,也可能是不理想的屬性,例如: 說他們後悔的

常見用途和正確使用的 ID

本節提供使用硬體 ID (例如 IMEI) 的替代方案。我們不建議使用硬體 ID,因為使用者無法重設硬體 ID,且硬體 ID 的範圍僅限於裝置。大部分情況下,以應用程式為範圍的 ID 就已足夠。

帳戶

電信業者狀態

在此情況下,應用程式會與裝置的手機互動及傳送訊息 功能驗證

建議使用的 ID:IMEI、IMSI 和 Line1

為什麼會顯示這項建議?

如果運營商相關功能需要使用硬體 ID,則可以使用硬體 ID。舉例來說,您可以使用這些 ID 切換電信業者或 SIM 卡插槽,或是透過這種方式傳送簡訊 IP (適用於 Line1) - SIM 卡使用者帳戶。不過,對於沒有特權的應用程式,我們建議使用帳戶登入功能,在伺服器端擷取使用者裝置資訊。其中一個原因是,在 Android 6.0 (API 級別 23) 中, 這類 ID 只能透過執行階段權限使用。使用者可能會關閉這項權限,因此應用程式應妥善處理這些例外狀況。

行動裝置訂閱狀態

在此情況下,你必須將應用程式功能與特定行動裝置 裝置上的服務訂閱項目。例如,您可能須設定 根據裝置的行動裝置驗證 訂閱。

建議使用的 ID:Subscription ID API,用於識別裝置上使用的 SIM 卡。

訂閱 ID 會提供從 1 開始的索引值, 識別出 裝置。透過這個 ID,應用程式可以將其功能與特定 SIM 卡的各種訂閱資訊建立關聯。針對特定 SIM 卡,這個值保持不變 除非裝置已恢復原廠設定。不過,在某些情況下,同一個 SIM 卡在不同裝置上可能會有不同的訂閱 ID,或是不同 SIM 卡在不同裝置上有相同的 ID。

為什麼會顯示這項建議?

部分應用程式目前可能會使用 ICC ID 來達成這個目的。由於 ICC ID 是全域唯一且無法重設,因此自 Android 10 起,存取權已限制為具有 READ_PRIVILEGED_PHONE_STATE 權限的應用程式。從 Android 11 開始,Android 會進一步透過 getIccId() API 限制 ICCID 存取權,不論應用程式的目標 API 級別為何。受影響的應用程式應遷移至 請改用訂閱 ID。

單一登入

在此情況下,應用程式提供單一登入體驗,可讓使用者 將現有帳戶與貴機構建立關聯。

建議使用的 ID:與帳戶管理員相容的帳戶,例如 Google 帳戶連結

為什麼會顯示這項推薦內容?

Google 帳戶連結功能可讓使用者連結使用者現有的 Google 帳戶存取應用程式,讓您以更安全的方式存取應用程式 組織產品和服務。此外,您也可以定義自訂 OAuth 範圍,只分享必要資料,明確定義資料的使用方式,提升使用者信任度。

廣告

指定目標

在此情況下,您的應用程式會建立使用者興趣的個人資料,用來向使用者顯示 放送更相關的廣告

建議使用的 ID:如果應用程式會使用 ID 放送廣告,並上傳或發布至 Google Play,則該 ID 必須是廣告 ID。

為什麼會顯示這項建議?

這是廣告相關用途,可能需要 ID 可供使用 組織中的不同應用程式 因此使用廣告 ID 就是 最適當的解決方案使用廣告 ID 廣告用途 Google Play 開發人員內容政策 因為使用者可以重設金鑰

無論您是否會在應用程式中分享使用者資料,如果您是為了廣告目的收集及使用使用者資料,就必須在 Play 管理中心「應用程式內容」頁面的「資料安全性」專區中聲明廣告目的。

數據評估

在這種情況下,應用程式會根據使用者在同一裝置上使用貴機構應用程式的行為,建立使用者設定檔。

建議使用的 ID:廣告 ID 或 Play 安裝參照來源 API

為什麼會顯示這項建議?

這是與廣告相關的用途,可能需要在貴機構的不同應用程式中提供的 ID,因此使用廣告 ID 是最合適的解決方案。如果您將 ID 用於廣告用途,那麼該 ID 必須是廣告 ID,因為使用者可重設 ID。如需瞭解詳情,請參閱 Google Play 開發人員內容政策

轉換次數

在這種情況下,您會追蹤轉換,以偵測行銷策略是否成功。

建議使用的 ID:廣告 ID 或 Play 安裝參照來源 API

為什麼會顯示這項建議?

這是廣告相關用途,可能需要 ID 可供使用 組織中的不同應用程式 因此使用廣告 ID 就是 最適當的解決方案根據 Google Play 開發人員內容政策,廣告用途必須使用廣告 ID,因為使用者可以重設廣告 ID。

再行銷

在這種情況下,應用程式會根據使用者先前的興趣顯示廣告。

建議使用的 ID:廣告 ID

為什麼會顯示這項推薦內容?

這是與廣告相關的用途,可能需要在貴機構的不同應用程式中提供的 ID,因此使用廣告 ID 是最合適的解決方案。使用廣告 ID 廣告用途 Google Play 開發人員內容政策 因為使用者可以重設金鑰

應用程式分析

在這種情況下,應用程式會評估使用者的行為,協助您判斷下列事項:

  • 貴機構的哪些其他產品或應用程式可能適合使用者。
  • 如何持續吸引使用者使用您的應用程式。
  • 評估登入和匿名使用者的使用統計資料和數據分析。

可能的解決方案包括:

  • 應用程式組 ID:只要您不將使用者資料用於廣告用途,即可透過應用程式組 ID 分析機構擁有的多個應用程式中使用者的行為。指定 Google Play 支援的裝置 服務,建議您使用應用程式組 ID。
  • Firebase ID (FID):FID 的範圍僅限於建立該 ID 的應用程式,因此無法用於追蹤跨應用程式的使用者。由於使用者可以清除應用程式資料或重新安裝應用程式,因此這類 ID 也能輕鬆重設。建立 FID 的程序相當簡單,請參閱 Firebase 安裝指南。

應用程式開發

當機回報

在這種情況下,應用程式會收集有關應用程式在使用者裝置上發生當機情形的時間和原因相關資料。

建議使用的 ID:FID 或應用程式組 ID

為什麼會顯示這項推薦內容?

FID 的範圍僅限於建立該 API 的應用程式, 用來跨應用程式追蹤使用者由於使用者可以清除應用程式資料或重新安裝應用程式,因此這類 ID 也能輕鬆重設。建立 FID 的程序很簡單,請參閱 Firebase 安裝指南。只要您不將使用者資料用於廣告用途,就能透過應用程式集 ID 分析機構擁有的多個應用程式中使用者的行為。

成效報表

在此情況下,您的應用程式會收集成效指標,例如載入時間和 進而改善應用程式品質。

建議使用的 ID:Firebase Performance Monitoring

為什麼會顯示這項建議?

Firebase Performance Monitoring 可協助您專注於最重視的指標,並測試應用程式近期變更所造成的影響。

應用程式測試

在此情況下,您的應用程式會評估使用者體驗的使用者體驗 或偵錯目的

建議使用的 ID:FID 或應用程式組 ID

為什麼會顯示這項推薦內容?

FID 的範圍僅限於建立該 API 的應用程式, 用來跨應用程式追蹤使用者還原也很簡單, 清除應用程式資料或重新安裝應用程式建立 FID 的程序如下 直接;請參閱 Firebase 安裝指南。 透過應用程式組 ID,您便可針對符合以下條件的多個應用程式分析使用者行為: 機構擁有,但您並未將使用者資料用於廣告 用途。

跨裝置安裝

在此情況下,應用程式在下列情況中,需要找出正確的應用程式執行個體: 安裝在相同使用者多部裝置上。

建議使用的 ID:FID 或 GUID

為什麼會顯示這項建議?

FID 是專為這個目的而設計;範圍僅限於 而無法跨應用程式追蹤使用者 會在重新安裝應用程式時重設。在極少數的情況下,當 FID 顯示為 您也可以使用 GUID。

安全性

濫用行為偵測

在這種情況下,您會嘗試偵測攻擊後端服務的多個假裝置。

建議使用的 ID:Google Play Integrity API 完整性權杖

為什麼會顯示這項建議?

如要驗證要求是否來自正版 Android 裝置 (而非模擬器或其他模擬其他裝置的程式碼),請使用 Google Play Integrity API

廣告詐欺

在這種情況下,應用程式會檢查使用者在應用程式中的曝光和動作是否真實且可驗證。

建議使用的 ID:廣告 ID

為什麼會顯示這項推薦內容?

根據 Google Play 開發人員內容政策,廣告用途必須使用廣告 ID,因為使用者可以重設廣告 ID。

數位版權管理 (DRM)

在這種情況下,您的應用程式想要保護智慧財產或付費內容免於遭到詐欺存取。

建議使用的 ID:使用 FID 或 GUID 會強制使用者 如要規避內容限制,請重新安裝應用程式 可減輕大多數人的負擔如果這項保護措施不足,Android 也提供 DRM API,可用於限制內容存取權,包括每個 APK 的 ID (Widevine ID)。

使用者偏好設定

在這種情況下,應用程式會在應用程式中儲存個別裝置的使用者狀態,特別是針對未登入的使用者。您可以將此狀態轉移至在同一部裝置上使用相同金鑰簽署的其他應用程式。

建議使用的 ID:FID 或 GUID

為什麼會顯示這項建議?

我們不建議透過重新安裝來保留資訊,因為使用者可能會 例如重新安裝應用程式,以便重設偏好設定。