2015-09-25 102 views
11

我需要在服務器上註冊具有唯一標識符的用戶設備,該唯一標識符爲常量值,將來不會更改。Android - 唯一且恆定的設備ID

我無法找到一個很好的解決方案,從所有設備(有/無SIM卡)獲取唯一的ID。

Secure.ANDROID_ID:Secure.ANDROID_ID不是唯一的,可以爲空或在出廠重置時更改。

String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

IMEI:IMEI是依賴於設備的simcard的插槽,所以它是不可能得到的IMEI對於不使用simcard的設備。

TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
String uuid = tManager.getDeviceId(); 

WLAN MAC地址:如果設備不具備WiFi硬件,然後返回null MAC地址。用戶可以更改設備的mac地址。

WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress(); 

藍牙地址字符串:如果設備有沒有藍牙硬件則返回null。

BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
String m_bluetoothAdd = m_BluetoothAdapter.getAddress(); 

Instance id:當用戶卸載並重新安裝應用程序實例ID將發生變化。這不是一個常數值。

您是否有任何想法從所有Android設備(帶/不帶SIM卡,藍牙......)獲取唯一的ID,這些ID真的是唯一的,不能爲空,並且在卸載/重新安裝應用後不會更改?

+0

請注意,沒有SIM卡和WiFi的平板電腦不能存在或遠程使用。你有沒有考慮過兩者的組合? –

+0

@STTLCU no。但用戶可以更改設計的MAC地址。 –

+0

@STTLCU我不確定你身邊有哪些平板電腦,但幾乎沒有人知道平板電腦擁有SIM卡。 –

回答

3

我發現Secure.ANDROID_ID是最好的選擇。這是設備第一次引導時生成並存儲的64位數量。但它重置設備的工廠重置。

有一些報告顯示某些設備在所有實例上都具有相同的Secure.ANDROID_ID。

我們可以向Secure.ANDROID_ID添加額外的項目(如sim serial,GCM實例id或...)並生成新的唯一指紋。

2

多發的用戶可以在Android設備和Secure.ANDROID_ID是在同一個Android設備每個用戶不同的設置。因此使用Secure.ANDROID_ID意味着單個設備將被註冊爲設備上每個用戶設置的不同設備。

+0

** ANDROID_ID **在重置時會被重置設備出廠重置。因此,這不是持久的。 –