安卓10 获取唯一标识

.Android 10中获取设备相关标识的方案

根据上文对几个常见设备标识的分析我们可以看出列出的几种设备标识都有或多或少的缺陷,那么针对Android 10的限制,我们应该如何获取到稳定的设备标识呢?关于这个问题我查阅一些相关文章,大体总结出了以下几种方案:

  • 方案一、使用ANDROID_ID

ANDROID_ID的获取不需要任何权限,并且可以很好地保证唯一性,缺点就是无法保证稳定性,即一些操作可能导致 ANDROID_ID 的改变。

  • 方案二、使用mac地址

目前mac地址仍然是可以获取到的,也能很好地保证唯一性和稳定性,缺点是不能保证以后官方是否会限制mac地址的获取。

  • 方案三、自定义一个生成规则

我们同样可以自定义一个设备标识的生成规则,在应用首次安装后将生成的标识保存到本地。生成的规则其实有很多种,最简单的是直接使用UUID或GUID,复杂一些的可以在此基础上拼接上设备生产厂商的信息。我这里就不具体介绍各种生成方案了,感兴趣的话可以查找一下相关文章。

  • 方案四、使用移动安全联盟(MSA)提出的补充设备标识

这其实是我主要想介绍的一个方案,是由移动安全联盟提出的,包含以下三个标识:

名称 说明
OAID 匿名设备标识符,最长64为,所有应用都获取到同一个ID,但是用户可关闭、可重置
AAID 应用匿名设备标识符,最长64为,每个应用获取到各自的ID
VAID 开发者匿名设备标识符,最长64为,同一开发者不同应用获取到的一致

目前文档中给出的覆盖设备范围如下:

补充设备表示覆盖范围

可以看出目前主流的厂商都做出了相应的适配,这后三个厂商是啥情况。。。不过我看SDK更新的信息中有提到这三个厂商的支持。

具体集成步骤和获取方法我这里就不介绍了,官方提供了详细的文档,可以到官网下载,我也已经相关文件上传到了github,附上 地址 。

当然这种方案的覆盖机型也不是100%的,SDK提供的API可以判断设备是否支持获取补充设备标识,对于不支持的设备我们依然可以选择使用此前介绍过的几种设备标识。

最后说一下我个人的方案吧,其实针对那些对设备标识要求不高的应用来说,使用 ANDROID_ID 是最好也是最简单的方案了,如果应用对设备标识的要求比较高,可以尝试使用MSA提出的补充设备标识(如OAID),该方案对于国产手机厂商的支持还是比较好的,后续的适配也还在进行,首先要判断一下设备是否支持获取补充设备标识,支持的话就直接使用,不支持的话仍然可以使用ANDROID_ID或者mac地址等设备标识,如果说觉得同时综合几种标识会导致格式(位数)不统一,可以在此基础上进行一个统一的处理,比如MD5加密等等,最后获取到的就是一个格式统一的设备标识码了。当然上面这种想法只是我个人的见解,还有很多方案可选择,但是最终目标都是一致的,就是尽量多地适配各种设备并且保证标识的唯一性和稳定性,如果大家觉得不妥或是有更好的方案欢迎提出,一起交流。

 

个人认为方案3比较好,未来升级到安卓11该方法还能继续使用,对于旧用户安卓9的用户,该方法也能使用,避免因为版本问题而不断更改该方法。

你可能感兴趣的:(安卓10 获取唯一标识)