如何在Android上的应用安装之间保留数据?

时间:2015-12-04 12:32:16

标签: android android-identifiers

我认为会有一些直接的解决方案。

要求

  • 在应用安装/卸载会话中唯一标识设备。

选项:

  1. 每次需要时使用某种Android的设备标识符API(每次从Android的API读取)。根据{{​​3}}博客文章,这不是推荐的,也不是可靠的解决方案。

  2. 生成UUID一次(在第一个应用程序启动时)并将其保留在某处,以便在多个应用程序安装/卸载中保留它。这个“某处某处”部分是个谜。存储在SD卡或云上的解决方案不是一种选择。 iOS有钥匙串,可以用于这种东西,但我没有发现Android相当于它。

  3. 这里有什么其他选择?我更喜欢使用(2)路由,因为我的服务器实现(服务器第一次生成UUID,如果不存在)。但如果它不是一个选项,我可以回退到(1)并修改服务器。

    感谢。

1 个答案:

答案 0 :(得分:4)

要在应用程序安装/重新安装之间唯一标识应用程序,您需要获取它hardware ID并将其用作您的凭据/密钥。

要获取hardwareID,您可以使用以下方法:

public static String getHardwareId(Context context) {
    return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
}

它与UUID部分等效,但有以下例外:如果在设备上执行恢复出厂设置,则该值可能会更改。

我称之为“部分等同”的原因是: HardwareID是64位数字(作为十六进制字符串),在用户首次设置设备时随机生成,并且应在用户设备的生命周期内保持不变。如果在设备上执行恢复出厂设置,则该值可能会更改。 注意:当设备有多个用户(在运行Android 4.2或更高版本的某些设备上可用)时,每个用户都显示为完全独立的设备,因此 ANDROID_ID 值对每个用户都是唯一的。

但这会遇到#2问题:在哪里以及如何存储它;将它存储在SharedPreferences中是没用的,因为如果卸载了应用程序则擦除它。对于/data/data/your.package.name/my_stored_keys文件夹也是如此,因为在卸载过程中也会从手机中删除该文件夹。

如果您希望在卸载和重新安装应用之间保持不变,则需要保存服务器端。