公司需求要苹果去获取IMEI当时我是崩溃的但是我还不能直接说这个做不了。因为只是知道在iOS5以后方法被废除该方法 但是为什么这样做以及这样的做的产生的影响等等 还真不知道 所以写下这篇文章,话不多说直切主题。
一 关于IMEI 及常用相关概念
IMEI,IMSI:
IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。手机用户可以在手机中查到自己手机的IMEI码。重点来了 !iOS5以后不能再获取了,但通过私有Api能获取,这是在网上能查到的。Git上的erica的UIDevice扩展文件,以前可用但由于IOKit framework没有公开,所以也无法使用。就算手动导入,依旧无法使用,看来获取IMEI要失败了,同时失败的还有IMSI。
UUID
每次运行都会发生变化,最理想的就是保存在keychain里面,以此作为标识用户设备的唯一标识符,这也是我们目前使用频率最多的。具体代码可以百度谷歌 反正网上一搜一大把。
其他的像IDFA、IDFV可以简单了解一下就可以了(其实是我没用过🤦♀️),IDFA:广告标示符,它是由系统存储着的。IDFV:iOS6.0及以后使用,是给Vendor标识用户用的,vendor:卖主,小贩。经过测试发现com.test.app1和com.test.app2具有相同的idfv,而如果是com.app1和com.app2则是两个不同的idfv。准确点说,就是通过BundleID的反转的前两部分进行匹配,如果相同就是同一个Vender,共享同一个idfv的值。
实现方法 NSString *idfv = [[UIDevice currentDevice].identifierForVendor UUIDString];
二、苹果为什么开始拒绝 iOS 应用获取设备的 UDID ?之前为什么允许?
UDID本来是为了方便一个应用来统计用户行为的,但是因为是一个唯一ID,而且直接看不到跟用户隐私的关系,所以是开放出来的。但是,当有大量的App在市场中,而UDID对于每个App都是一样的时候,用户的隐私其实受到了一定程度的侵犯。假设有很多App联合在一起,因为UDID是统一的,那么他们就可以拼凑出用户的隐私出来。所以从这个角度苹果去掉了UDID的支持,而每个应用可以自行生成自己的UUID,所以,单一app的统计仍旧不会发生问题。所以主要的原因是隐私问题。
补充:目前想要真正意义上的获取手机唯一标识是不可能的。只能说UUID + keychain 能满足99%以上的需求,但本人亲测后发现如果手机进行重置后keychain 中的UUID 还是会改变的,还有网上说版本升级也会丢失keychain 数据。
@end