ios唯一标识符解决方案——截止至2014.12

ios提供了很多可以唯一标识的方法。截至2014年12月份为止,比较好用的有两种。

1.macAddress和IDFA并用:这种方式比较经常使用在客户端内嵌广告点击中,在ios7系统下,获取系统macAddress;在ios7及以上,获取IDFA。

这种方法有几个问题:1)取ios7以下取macAddress不确定什么时候就会被苹果禁掉。2)IDFA,在系统从ios6升级到ios7时,会改变。另外,在网上看到的:[[[广告标示符,是iOS 6中另外一个新的方法,提供了一个方法advertisingIdentifier,通过调用该方法会返回一个NSUUID实例,最后可以获得一个UUID,由系统存储着的。不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。]]]我在ios8系统下测试,这几种情况下IDFA不会改变。其他系统有待验证。

2.OpenUDIUD:OpenUDID利用了一个非常巧妙的方法在不同程序间存储标示符 — 在粘贴板中用了一个特殊的名称来存储标示符。通过这种方法,别的程序(同样使用了OpenUDID)知道去什么地方获取已经生成的标示符(而不用再生成一个新的)。在一个系统中,只要有一个app还在使用OpenUDID这种机制,NSString *openUDID = [OpenUDID value];得出的值就是不变的。要是系统中没有使用OpenUDID机制的app,那么,当把我们的app删除后,重新生成的就是一个新的value值。

问题:1)当系统中没有别的应用使用OpenUDID机制时,又把应用删除,会生成新的OpenUDID。

[根据真机测试,两个不同应用间openudid是不一样的(即使都使用了openUdid),这个问题目前没时间研究,有研究过的可以留言讨论]


终上:没有一个好的办法可以通过在客户端彻底解决唯一标识符问题,所以需要引入新的解决办法。钥匙串:[[[文档上说iOS的keyChain是一个相对独立的空间,当程序替换,删除时并不会删除keyChain的内容,这个要比Library/Cache好。刷机,恢复出厂应该就没有了。关于备份,只会备份数据,到那时不会备份设备的密钥,换句话说,即使拿到数据,也没有办法解密里面的内容。有人说似乎破解的手机就能破解keyChain,本人并不清楚,希望有大神能指教。但个人认为,keyChain只是沙盒的升级版,可以存放一些非私密的信息,即使破解也不影响其它用户,只影响那个破解了的设备。(比如针对该设备的一个密钥)。

可访问性一般来说,自己的程序只能访问自己的keychain,相同bundle的程序通过设置group可以互相共享同组的keychain,从而实现程序间可以共同访问一些数据。详细后面介绍一些我测试下来的经验。]]]但是本人通过ios8系统下真机测试,恢复出厂设置后,钥匙串保存的内容还在。其他系统待验证。所以钥匙串作为一个永久保存重要信息(删除应用后仍然还在)的工具,是可以放心使用的。


以钥匙串的安全性,本来用 UUID+钥匙串应该已经够保险。但是鉴于苹果机制变化太快,可以做双重保险,以OpenUDID+钥匙串为整体解决方案。

当有一天苹果升级系统,钥匙串的永久性没那么高的时候,OpenUDID仍然可以发挥作用。但是依然不能保证百分百设备的唯一。

要继续提高准确性,可以在后台通过账号和Token来做双重匹配。以此来尽量做到理论上的100%准确。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值