请选择 进入手机版 | 继续访问电脑版

雨林木风

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7|回复: 0

【转】android获取设备唯一标识完美解决方案

[复制链接]

8493

主题

8500

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26021
发表于 2021-1-9 19:43:18 | 显示全部楼层 |阅读模式
  有时须要对用户开发举行标识,是以期望可能获得一个太平牢靠而且独一的识别码。固然Android体系中供给了如此开发识别码,然而因为Android体系版本、厂商定制体系中的Bug等范围,太平性和独一性并不睬思。而通过其他硬件讯息标识也由于体系版本、手机硬件等范围存正在分歧水平的题目。
  这是Android体系为开辟者供给的用于标识手机开发的串号,也是各类方式中普适性较高的,能够说简直全体的开发都能够返回这个串号,而且独一性杰出。
  假设咱们确实须要用到确凿开发的标识,恐怕就须要用到DEVICE_ID。正在以前,咱们的Android开发是手机,这个DEVICE_ID能够同通过TelephonyManager.getDeviceId()获取,它依据分歧的手机开发返回IMEI,MEID或者ESN码,但它正在行使的经过中会遭遇良众题目:
  非手机开发: 假如只带有Wifi的开发或者音乐播放器没有通话的硬件功用的话就没有这个DEVICE_ID
  权限: 获取DEVICE_ID须要READ_PHONE_STATE权限,但假如咱们只为了获取它,没有效到其他的通话功用,那这个权限有点大才小用
  bug:正在少数的少少手机开发上,该完成有缺陷,会返回垃圾,如:zeros或者asterisks的产物
  能够行使手机Wifi或蓝牙的MAC地方行为开发标识,然而并不举荐这么做,来历有以下两点:
  正在开发初次启动时,体系会随机天生一个64位的数字,并把这个数字以16进制字符串的式子存储下来,这个16进制的字符串便是ANDROID_ID,当开发被wipe后该值会被重置。能够通过下面的方式获取:
  Android体系2.3版本以上能够通过下面的方式获得Serial Number,且非手机开发也能够通过该接口获取。
  以上几种体例都或众或少存正在必然的控制性或者Bug,假如并不是确实须要对硬件自己举行绑定,行使我方天生的UUID也是一个不错的拔取,由于该方式无需拜访开发的资源,也跟开发类型无合。
  这种体例的道理是正在步伐装置后第一次运转时天生一个ID,该体例和开发独一标识不相同,分歧的行使步伐会爆发分歧的ID,统一个步伐从新装置也会分歧。是以这不是开发的独一ID,然而能够保障每个用户的ID是分歧的。能够说是用来标识每一份行使步伐的独一ID(即Installtion ID),能够用来跟踪行使的装置数目等。
  上文能够看出,Android体系中并没有能够牢靠获取全体厂商开发独一ID的方式,各个方式都有我方的行使限度和控制性,这也是目前通行的Android体系版本过众,开发也是来自分歧厂商,且没有同一轨范等来历变成的。
  从目前成长来看,Android体系众版本共存还会接连较长的岁月,而Android体系也不会被某个开发出产厂商垄断,深远看Android底子体系将会趋于太平,开发标识也将会行为体系底子个人而轨范化,届时这一题目才希望彻底处置。
  目前的处置主意,比拟可行的是逐一适配,正在保障大大批开发简单的条件下,假如获取不到,行使其他备选讯息行为标识,即我方再封装一个开发ID出来,通过内部算法保障尽量和开发硬件讯息干系,以及标识的独一性。
  归纳以上所述,为了完成正在开发上更通用的获取开发独一标识,咱们能够完成如此的一个类,为每个开发爆发独一的UUID,以ANDROID_ID为底子,正在获取腐烂时以TelephonyManager.getDeviceId()为备选方式,假如再腐烂,行使UUID的天生计谋。
  重申下,以下方式是天生Device ID,正在大大批境况下Installtion ID可能知足咱们的需求,然而假如确实须要用到Device ID,那能够通过以下体例完成:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

|appname
快速回复 返回顶部 返回列表