打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
iOS之根据UUID和Keychain来确定一台iOS设备

今天公司项目需要获取iOS设备的唯一标识符。但是自在iOS7之后,伟大的Apple公司已经把系统提供获取唯一标识符的的API给禁用了。存在私有的API可以获取,但是会影响到上架,所以直接不考虑。然后网上搜了一下那些demo,发现不是存在BUG,就是用不了。于是自己花了点时间来整理了一下收集来的资料,整合成了一个绝对能用的例子。

首先获取到的UUID在删除掉应用之后,是会变的。所以我们需要用到钥匙串来存起来,而钥匙串的操作是比较麻烦的,用不好是随时会导致应用闪退,所以我们就用到一个比较成熟的第三方SAMKeychain,简单又粗暴。这就是为什么每个程序员都热爱开源的原因了。后面附上下载地址 https://github.com/soffes/SAMKeychain

可以用CocoaPods、也可以直接拖进去项目里面,详细的操作在github上面作者有说明,这就不重复说了。

然后在我们项目中导入 Security.framework,如下截图


然后在我们需要用到的类中导入头文件 SAMKeychain.h


工欲善其事,必先利其器。准备工作差不多了,就开始开始干活...

先附上获取 UUID 和保存到钥匙串的代码

  1. /**
  2. * 这个方法返回 UUID
  3. */
  4. - (NSString *)getDeviceId {
  5. // 读取设备号
  6. NSString *localDeviceId = [SAMKeychain passwordForService:kKeychainService account:kKeychainDeviceId];
  7. if (!localDeviceId) {
  8. // 如果没有UUID 则保存设备号
  9. CFUUIDRef deviceId = CFUUIDCreate(NULL);
  10. assert(deviceId != NULL);
  11. CFStringRef deviceIdStr = CFUUIDCreateString(NULL, deviceId);
  12. [SAMKeychain setPassword:[NSString stringWithFormat:@"%@", deviceIdStr] forService:@"com.apple.biubiubiu" account:@"DeviceId"];
  13. localDeviceId = [NSString stringWithFormat:@"%@", deviceIdStr];
  14. }
  15. return localDeviceId;
  16. }

如果就按照上面这样,就以为完成的话,那就错过了最重要的一步,上面这样的操作没问题,但是每次获取到的UUID都不一样,因为项目里面还要有做一步的设置:

就不卖关子了,赶紧给各位看官奉上,请看截图

这里设置的 com.apple.biubiubiu 要和保存到钥匙串中代码那里的命名一致,不然,你保存起来的UUID也没有读取出来。还是作废的。

好了,完成以上操作的话,是可以实现一台设备唯一一个 UUID 的,即使是删除了应用,再次安装也是从钥匙串中读取出来之前保存的。升级系统也不会印象,唯一缺陷就是刷机之后,所有东西都没有了,钥匙串也会失效,各位根据自己的实际需求看着办吧。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
iOS的UDID废用以及UUID配合keychain的替换方案实现 | K
iOS提交应用至App Store流程
稳定获取Android设备唯一码(UUID)的解决方案
不进行APP埋点的情况下,SDK可以收集到哪些数据?
iOS开发 判断当前APP版本和升级
获取IOS唯一设备标识码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服