不可變的設備 ID

在 Android 6 及更高版本中,Wi-Fi 服務提供商和數據包分析器已被限制通過 Wi-Fi 堆棧從網絡請求中檢索設備的出廠 MAC 地址。在Android的10起,另外的限制都將是限制訪問設備標識符(ID),以應用與特權權限級別。這可以保護設備 ID,例如

  • 電話 IMEI、MEID、ESN 和 IMSI 號碼。
  • build、SIM 或 USB 序列號。

誰可以訪問設備 ID

設備 ID 在所有 Android 10 設備上都受到限制,即使應用面向 Android 9 或更低版本也是如此。可以通過以下方式訪問設備 ID

特權包訪問

包必須有權訪問設備 ID。它必須有READ_PRIVILEGED_PHONE_STATE權限在Manifest.permission類,並在白名單privapp-permission.xml文件。有關白名單過程的信息,請參閱特權權限白名單

有關獲取的唯一ID為一個非特權包信息,請參考常見用法及相應的標識符使用

受限設備 ID 和隨機 MAC 地址

為了進一步限制設備 ID,默認情況下,Android 10 上的所有設備都會為探測和關聯請求傳輸隨機 MAC 地址,並且每個 SSID 必須具有不同的隨機 MAC 地址。不要在客戶端模式、軟接入點 (AP) 或 Wi-Fi Direct 用例中使用設備出廠 MAC 地址。它必須對非特權應用程序的可公開訪問的 API 保持隱藏。要求工廠MAC地址返回特權應用都要求有LOCAL_MAC_ADDRESS權限。

用戶可以保持默認隨機已分配給每個SSID MAC地址的選項。選項是設置可視下隱私權>網絡的詳細信息。要了解如何獲得一個隨機的MAC地址見隨機的MAC地址

Screen shows if device ID uses a randomized MAC address for privacy
圖1的MAC地址顯示為在網絡細節隱私隨機

調用設備 ID API 的應用

調用設備 ID API 的應用必須滿足 Android 10 要求。否則,當他們嘗試訪問設備 ID 時,將返回以下內容:

  • 面向 Android 10 的應用
  • 面向 Android 9 或更早版本的應用
    • 如果他們有READ_PHONE_STATE權限,無論是null返回響應或佔位符數據。
    • 如果他們不這樣做,將設備ID的API拋出SecurityException包含調用的方法,並且指示主叫應用程序不符合要求的訪問請求的ID的名稱。

欲了解更多關於不可改變的設備ID看到Nonresettable設備標識符用於唯一標識符的最佳實踐

測試

應用必須從訪問設備的序列號,並在適用,IMEI / MEID,SIM序列號,和訂戶ID來防止。有權限訪問這些ID應用程序也必須滿足下面列出的標準之一,誰可以訪問設備ID