對不起,我在充分理解它之前標記了此問題。就像@Johann所說,考慮將根植用戶納入等式將會使識別設備變得更加困難。
使用假設您的應用程序使用web服務,用戶必須以某種方式連接到互聯網,即通過數據計劃(用戶使用SIM卡)或WiFi。
因此,從硬件和生成結果字符串的唯一哈希碼組合的ID,你應該能夠唯一標識設備(理論上)。但我沒有測試過這個代碼,所以請檢查一下是否適合你。
final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice, tmSerial, androidId, wifi;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi = ""+ manager.getConnectionInfo().getMacAddress();
String unique_id = makeSHA1Hash(tmDevice + tmSerial + androidId + wifi);
makeSHA1Hash
public String makeSHA1Hash(String input)
throws NoSuchAlgorithmException, UnsupportedEncodingException
{
MessageDigest md = MessageDigest.getInstance("SHA1");
md.reset();
byte[] buffer = input.getBytes("UTF-8");
md.update(buffer);
byte[] digest = md.digest();
String hexStr = "";
for (int i = 0; i < digest.length; i++) {
hexStr += Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1);
}
return hexStr;
}
希望它可以幫助你...
幾乎所有從您的應用訪問的任何內容都可以使用root修改。 –
這個ID並不是按照原樣使用,它將與其他參數混合並加密。我知道如果有人真的想要它可能,但對於普通用戶,我希望有最安全的解決方案 – Virthuss
@FabinPaul我'要求一個安全的解決方案,包括非谷歌設備以及。我看到這個話題的人,它實際上是關於這個話題最有名的一個。但它對我的情況沒有幫助。 – Virthuss