|
[建议]
关于唯一设备id、api.deviceId的建议
[复制链接]
问题:
怎么能获取设备唯一id?
定义:
官方给的api.deviceId方法的定义是这样的:『设备唯一标识,字符串类型
由于系统限制,iOS系统上面无法获取设备唯一标识udid、IMEI号、Mac地址等信息,这里返回的是与证书相关联的uuid,即使应用卸载了重新安装值也不会变化。而安卓部分系统也有限制,一些设备上也无法获取到IMEI号、Mac地址等信息。』
现象:
项目中需要用到设备的唯一id传给后端,一开始使用的是官方的api方法(api.deviceId),在安卓和IOS下测试都没问题。直到后来项目在使用过程中出现了一个设备,两个不同的deviceId的问题,找了好久,才从这个模块里找到了线索 『https://docs.apicloud.com/Client-API/Device-Access/simInfoImp#a3 获取当前设备唯一标示(如果是GSM网络,返回IMEI号吗;如果是CDMA网络,返回MEID号码)』。
分析:
1.首先从官方的定义可以知道,api.deviceId在IOS下返回的是与证书相关的UUID,即使卸载重装也不会变化。但是,注意但是,在安卓下,就有可能返回 IMEI、Mac地址(甚至其他的东西,这个没全量测试过,也不知道)。
2.我的理解是有的手机拿到的是IMEI,有的手机拿到的是MAC。其实这样也无所谓,只要能保证每个设备拿到的值是固定不变的。
实际情况:
通过上面的2条分析,看似拿deviceId很靠谱。但实际情况是,在拿到IMEI的手机上,当你切换网络为WCDMA后,返回的是另外一个值(MEID)。也就是说,在部分安卓手机上,你使用WCDMA制式的网络和其他网络(如 GSM 、TD-SCDMA、TD-LTE),这个方法会返回两个不同的值(IMEI 和 MEID)(『https://docs.apicloud.com/Client-API/Device-Access/simInfoImp#a3 获取当前设备唯一标示(如果是GSM网络,返回IMEI号吗;如果是CDMA网络,返回MEID号码)』这里也佐证了这个问题)。
官方能给出一个拿到设备唯一 ID的方法或者模块吗 ?
|
|