不可變更的裝置 ID

在 Android 6 以上版本中,Wi-Fi 服務供應商和封包分析器已受到限制,無法透過網路要求的 Wi-Fi 堆疊擷取裝置的出廠 MAC 位址。自 Android 10 起,我們已實施額外限制,將裝置 ID 存取權限限制給具備 特權權限層級的應用程式。這麼做可保護裝置 ID,例如

  • 電話 IMEI、MEID、ESN 和 IMSI 號碼。
  • 版本、SIM 卡或 USB 序號。

誰可以存取裝置 ID

即使應用程式指定 Android 9 以下版本,裝置 ID 仍會受到限制。裝置 ID 可供下列使用者存取:

特殊權限套件存取權

套件必須具備存取裝置 ID 的權限。該類別必須在 Manifest.permission 類別中具有 READ_PRIVILEGED_PHONE_STATE 權限,並在 privapp-permission.xml 檔案中列入許可清單。如要瞭解許可清單程序,請參閱「特權權限許可清單」。

如要瞭解如何取得非特權套件的專屬 ID,請參閱「 常見用途和適用的適當 ID」。

限制裝置 ID 和隨機 MAC 位址

為進一步限制裝置 ID,Android 10 上的所有裝置預設會為探測和相關聯的要求傳送隨機 MAC 位址,且每個 SSID 都必須有不同的隨機 MAC 位址。請勿在用戶端模式、軟體存取點 (AP) 或 Wi-Fi Direct 用途中使用裝置工廠 MAC 位址。它必須隱藏在非特權應用程式可公開存取的 API 中。需要返回原廠 MAC 位址的特權應用程式必須具備 LOCAL_MAC_ADDRESS 權限。

使用者可以選擇保留為每個 SSID 指派的預設隨機 MAC 位址。您可以在「設定」 >「網路詳細資料」的「隱私權」下方查看這個選項。如要瞭解如何取得隨機 MAC 位址,請參閱「 隨機 MAC 位址」。

畫面會顯示裝置 ID 是否使用隨機 MAC 位址來保護隱私權

圖 1.「隱私權」的「網路詳細資料」下方顯示 MAC 位址已隨機化。

叫用裝置 ID API 的應用程式

呼叫裝置 ID API 的應用程式必須符合 Android 10 規定。否則,當他們嘗試存取裝置 ID 時,系統會傳回以下內容:

  • 鎖定 Android 10 的應用程式
  • 指定 Android 9 以下版本的應用程式
    • 如果他們具有 READ_PHONE_STATE 權限,則會傳回 null 回應或預留位置資料。
    • 如果不符合要求,裝置 ID API 就會擲回 SecurityException,其中包含所呼叫方法的名稱,以及指出呼叫應用程式不符合存取要求 ID 的條件。

如要進一步瞭解不可變動的裝置 ID,請參閱「不可重設的裝置 ID」和「專屬 ID 的最佳做法」。

測試

應用程式必須禁止存取裝置序號,以及適用情況下的 IMEI 或 MEID、SIM 卡序號和訂閱者 ID。具有存取這些 ID 權限的應用程式,也必須符合「誰可以存取裝置 ID」一節所列的其中一個條件。