IOS6及以后如何标识不同设备

时间:2014-10-13 12:57:30   收藏:0   阅读:472

通常情况下,IOS系统用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码、证书等等,就需要使用更为安全的keychain了。

keychain里保存的信息不会因App被删除而丢失。所以,可以利用这个keychain这个特点来保存设备唯一标识。

那么,如何在应用里使用使用keyChain呢,我们需要导入Security.framework ,keychain的操作接口声明在头文件SecItem.h里。

直接使用SecItem.h里方法操作keychain,需要写的代码较为复杂,我们可以使用已经封装好了的工具类KeychainItemWrapper来对keychain进行操作。

KeychainItemWrapper是apple官方例子“GenericKeychain”里一个访问keychain常用操作的封装类,在官网上下载了GenericKeychain项目后,

只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷贝到我们项目,并导入Security.framework 。(xcode5中要把KeychainItemWrapper.m去除自动引用计数

//    NSMutableString *str1 =[NSMutableString string];
//    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:@"com.itrun.www"];
//    [keychainItem resetKeychainItem];
//    
//    NSString *uuidStr = [keychainItem objectForKey:(__bridge id)kSecValueData];
//    if (uuidStr.length == 0) {
        //唯一标识符产生的地方
        NSString *myUUIDStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
//        [keychainItem setObject:myUUIDStr forKey:(__bridge id)kSecValueData];
//        str1 = myUUIDStr;
//    }
//    else{
//        str1 = [keychainItem objectForKey:(__bridge id)kSecValueData];
//    }
//    MyLog(@"======%@",str1);
    //050BBA53-7388-4CFF-991D-FEB548065CDF
    //5023A8E8-233F-4391-B119-2234996537E9

但是在IOS8真机调试的时候,出错。。



要识别用户,首先就是要选择一个标识符,通过这个标识符来识别这个用户的设备(而不是用户),这个标识符要能够保证一个设备上返回的值是一样的,并且在其他设备上不会出现相同的值。

在iOS7之前,曾经有过很多方法来识别用户的设备,从最原始的设备udid、mac地址,到被各广告统计平台广泛使用的开源方案OpenUDID。

但随着AppStore开始拒绝接受使用udid的应用,到mac地址在iOS7上所有设备上都返回相同的值,再到iOS7上对剪贴板的限制,导致OpenUDID无法被不同应用共享相同的值,注定了上面提到的这些id们不得不退出历史的舞台。

随着iOS7快速占据了半壁江山,设备id的控制权终于彻底回到了Apple手中,同时也让用户能够把控自己的隐私,充分表明了是苹果对用户隐私保护的决心。

好了,其实就一个问题:iOS7时代我们用什么来追踪和识别用户?


 

先给结论

PS:尘埃落定,跟着Apple走,大家不用再犹豫了。


 

再给解释

idfa

idfv


 

历史上的英雄们

UDID

设备唯一标识符(Unique Device Identifier)之前被各种国内外统计平台,应用开发商广泛使用,后Apple从2013年05月01日起拒绝接受使用UDID的应用后,立毙!

Mac地址

每一个网卡都有一个唯一的标识,即Mac地址,显然用来标识一个手机是绰绰有余的了,也有一些开源的方案也用到了它,国内UMTrack等也用它作为过主id,随着iOS7返回同样的值后,不得不退隐江湖。

OpenUDID

在Apple拒绝UDID后,OpenUDID作为独立于Apple的开源方案,被广大的开发者所接受,各大统计广告平台都从UDID等方案切换到OpenUDID的方案(看来大家都不想完全被Apple束缚啊),但不幸的事,同样由于iOS7对剪贴板的限制,导致同一个设备上应用间,无法再共享一个OpenUDID,即OpenUDID作为设备唯一标识的能力被大大削弱。也可以看到随着iOS7的来临,各广告平台都迅速更新自己的SDK,来切换到苹果的idfa的方案上来。

其他

CFUUID、NSUUID等自己生成,自己存储管理的就不细说啦。

DeviceToken

这是推送用的令牌,用户如果没开推送,或者拒绝了,这个就没有了!


原文:http://blog.csdn.net/huang2009303513/article/details/40040349

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!