2016-06-16 62 views
3

我需要一个设备标识符,该应用程序在卸载并重新安装后仍然存在。我知道UUID类提供了一个标识符与方法ANDROID - 获取持久性设备标识符(UUID)

String uniqueID = UUID.randomUUID().toString(); 

但Android指南不清楚它的范围和持久性。在下一段中它说:

Android操作系统提供了许多具有不同行为特征的ID和您应该使用哪个ID取决于这些特征如何与您的使用情况一起工作。但是这些特征也会带来隐私影响,所以了解这些特征如何一起发挥很重要。

范围

标识符范围说明了哪些系统可以访问标识符。 Android标识符范围一般有三种:

单个应用程序。该ID在应用程序内部,而其他应用程序无法访问。

应用程序组 - 可以通过预定义的一组相关应用程序访问该ID。

设备 - 设备上安装的所有应用都可以访问该ID。 授予标识符的范围越广,它被用于跟踪目的的风险就越大。相反,如果标识符只能由单个应用程序实例访问,则不能用于在不同应用程序中跨越事务跟踪设备。

重调和持久性

重调和持久性定义标识符的寿命和解释它如何可被复位。常见的重置触发器有:应用内重置,通过系统设置重置,重启启动,以及重置安装。 Android的名称可以有不同的寿命,但寿命通常与该ID是如何复位:

会话只 - 一个新的ID时将每个用户重新启动应用程序的时间。

安装重置 - 每次用户卸载并重新安装应用程序时都会使用新ID。

FDR重置 - 每次用户出厂重置设备时都会使用新的ID。

FDR-persistent - 该ID可以恢复出厂设置。

可重置性使用户能够创建与任何现有配置文件信息无关的新ID。这一点很重要,因为更长且更可靠的标识符仍然存在(例如,在工厂重置等情况下),用户可能遭受长期跟踪的风险就越大。如果应用程序重新安装时标识符被重置,则会降低持久性,并提供重置ID的方法,即使没有明确的用户控制从应用程序或“系统设置”中重置ID也是如此。

但我不知道如何获得这些标识符,选择我的范围和持久性。 感谢

+0

那你最终决定使用? –

+0

我使用了Google提供的Instance ID,如果它在您取消应用程序后恢复,它似乎是最好的选择,同样如果我必须在我的应用程序中更改某些内容。 – leodev

+0

通过**实例ID **您的意思是ANDROID_ID? –

回答

0

我使用这个:

String DeviceId = Settings.Secure.getString(c.getContentResolver(), Settings.Secure.ANDROID_ID); 

看这个线程: Is there a unique Android device ID?

+0

ANDROID_ID不会在工厂重置期间持续存在。 – Solidak

+0

该解决方案提供了什么样的可重置性和持久性? –

+0

我认为它一直持续到工厂重置为阿卜杜拉或rom的改变。对我来说就够了。我不知道系统更新是否也改变了它。 – David