4

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

要求

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

选项:

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

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

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

谢谢。

4

1 回答 1

6

要在应用程序安装/重新安装之间唯一标识应用程序,您需要获取它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值对于每个用户都是唯一的。

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

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

于 2015-12-04T12:56:36.460 回答