在iOS7之前可以通过系统方法直接获取到用户手机的udid 唯一标识,而之后都被苹果了,尽管后来大家又想出获取MAC地址的方式来做,不幸的是又被禁止了,后来我便又看到一种新的保存方法,用钥匙串保存UUID来当做用户手机的唯一标识。
由于现在只能通过[UIDevice currentDevice].identifierForVendor.UUIDString这个方法获取标识,但是这个不具有唯一性,当用户的应用卸载后重装的话就会生成新的UUID,所以并不能通过一个应用来唯一标识用户手机是否是同一个。
keychain保存UUID的话是将用户第一次安装应用时所生成的UUID保存起来,等到下次用户卸了此应用,再重新安装时会先从keychain中读取这个UUID数,读不到再生成新的,这样就可以保证统计出一个应用真正唯一对应一个用户。
苹果提供了一个方法允许同一个发商的多个APP访问各APP之间的途径,即在调SecItemAdd添加数据的时候指定AccessGroup,即访问组。一个APP可以属于同事属于多个分组,添加KeyChain数据访问组需要做一下两件事情:
a、在APP target的bulibSetting里面设置Code Signing Entitlements,指向包含AceessGroup的分组信息的plist文件。添加plist文件的全路径在Code Signing Entitlements后面,否则会出现找不到文件的错误
b、在工程目录下新建一个KeychainAccessGroups.plist文件,该文件的结构中最顶层的节点必须是一个名为“keychain-access-groups”的Array,并且该Array中每一项都是一个描述分组的NSString。对于String的格式也有相应要求,格式为:"AppIdentifier.com.***",其中APPIdentifier就是你的开发者帐号对应的ID。
查找这个APPIdentifier当时费了我不少时间,首先去开发者网站登录你的开发者账号,找到你在那里面注册的该项目的appid,点开看,会展示出如下图所示的样子,下图中显示的Prefix就是上述的APPIdentifier。