我想为我的Android应用程序创建一个唯一的ID,以便我的服务器可以识别请求来自哪个设备并相应地向应用程序发送消息。我读到ANDROID_ID不能安全地用作唯一标识符,因为它可能会在root设备上受到攻击。还有一些制造商甚至不提供它。
UUID可以安全地用于我的作品吗?它真的是应用程序的全球唯一ID吗?如果是,我打算使用密钥库存储它,以便我可以保留它直到应用程序卸载。这是正确的方法吗?请建议。
答案 0 :(得分:0)
使用UUID实际上是安全的,这是我为自己获取UUID而创建的辅助函数,将其保存在Helper.java中,因此您将调用它:
Helper.getDeviceId(context);
也不要忘记将String sharedPrefDbName变量更改为你的sharef数据库名称,也可以将UUID存储在数据库或本地文件中,如你所说的那样卸载incase app。
//uuid
static String deviceId;
static String sharedPrefDbName = "MyAPPDB";
/**
* getDeviceId
* @param context
* @return String
*/
public static String getDeviceId(Context context){
//lets get device Id if not available, we create and save it
//means device Id is created once
//if the deviceId is not null, return it
if(deviceId != null){
return deviceId;
}//end
//shared preferences
SharedPreferences sharedPref = context.getSharedPreferences(sharedPrefDbName,context.MODE_PRIVATE);
//lets get the device Id
deviceId = sharedPref.getString("device_id",null);
//if the saved device Id is null, lets create it and save it
if(deviceId == null) {
//generate new device id
deviceId = generateUniqueID();
//Shared Preference editor
SharedPreferences.Editor sharedPrefEditor = sharedPref.edit();
//save the device id
sharedPrefEditor.putString("device_id",deviceId);
//commit it
sharedPrefEditor.commit();
}//end if device id was null
//return
return deviceId;
}//end get device Id
/**
* generateUniqueID - Generate Device Id
* @return
*/
public static String generateUniqueID() {
String id = UUID.randomUUID().toString();
return id;
}//end method