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

How to persist data between app installs on Android?

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

要求:

选项:

  1. 每次需要时使用某种Android的设备标识符-API(每次从Android的API).根据 Identififying-app-installations 博客 post,这是不推荐且不可靠的解决方案。

  2. 生成一次 UUID(在第一个应用程序启动时)并以某种方式将其保存在某个地方,以便在多个应用程序中保留它 installs/uninstalls。这个“某处不知何故”的部分是个谜。存储到 SD 卡或云端等解决方案不是一种选择。 iOS 有可用于此类物品的钥匙串,但我没有找到 Android 的等效项。

我还有哪些其他选择?由于我的服务器实现,我更喜欢走 (2) 路线(如果不存在,服务器将首次生成 UUID)。但如果它不是一个选项,我可以回退到 (1) 并修改服务器。

谢谢。

要在应用程序 installs/reinstalls 之间唯一标识应用程序,您需要获取它的 hardware ID 并将其用作您的 credentials/key。

获取硬件ID,可以使用以下方法:

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

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

之所以叫它"partially equivallent"是因为: HardwareID 是一个 64 位数字(十六进制字符串),它是在用户首次设置设备时随机生成的,并且在用户设备的生命周期内应保持不变。如果在设备上执行出厂重置,该值可能会更改。 注意:当一台设备有多个用户时(某些设备 运行 Android 4.2 或更高版本可用),每个用户显示为一个完全独立的设备,因此 ANDROID_ID每个用户的值都是唯一的。

但这涉及到第二个问题:在哪里以及如何存储它;将它存储在 SharedPreferences 中是无用的,因为如果卸载应用程序,它就会被擦除。与 /data/data/your.package.name/my_stored_keys 文件夹相同,因为在卸载期间也会从 phone 中删除该文件夹。

如果您希望在卸载和重新安装应用程序之间坚持,您将需要将其保存在服务器端。