【数据分析】获取设备唯一标识符的方法:每日消息
iOS UDID与UUID
1.UDID
(资料图片仅供参考)
通用唯一识别码 UDID(Unique Device Identifier)
是一串由40位16进制数组成的字符串,用以标识唯一的设备,现在想通过代码获取是不可能的了,如果你想看看你设备的UDID,可以通过iTunes来查看。
苹果从iOS5开始就移除了通过代码访问UDID的权限,所以码农想知道用户设备的UDID,是不行的。 对于已越狱了的设备,UDID并不是唯一的。使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID。 所以UDID作为标识唯一设备的用途已经不大了。 关于获取UDID的代码(iOS5之后已经废掉并被AppStore封杀)
[[UIDevice currentDevice] uniqueIdentifier];
2.UUID
设备唯一标识 UUID(Universally Unique IDentifier)
是基于iOS设备上面某个单个的应用程序,只要用户没有完全删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变。如果用户删除了这个应用程序,然后再重新安装,那么这个UUID已经发生了改变。
同一设备上的不同应用的UUID是互斥的,即能在改设备上标识应用。所以一些人推测,这个UUID应该是根据设备标识和应用标识生成唯一标识,再经过加密而来的(纯推测)。 官方推荐的方法是,每个应用内创建一个UUID来作为唯一标志,并将之存储,但是这个解决方法明显不能接受! 你每次创建的UUID都是不一样的,意味着,你卸载后重新安装这个软件,生成的UUID就不一样了,无法达到我们将之作为数据分析的唯一标识符的要求。 关于获取UUID的代码:
[[UIDevice currentDevice] identifierForVendor];
不过,设备唯一标示的问题仍然没有解决:如果你删除应用然后再次安装,这个identifierForVendor的值就变了。
3.获取设备唯一标识符的推荐新方案
思路 通过调用CFFUUIDCreate函数来生成机器唯一标识符UUID。但每次调用该函数返回的字符串都不一样,所以第一次调用后需把该字符串存储起来。 尽管CFFUUIDCreate每次获取的UUID会发生变化,最理想的是可以保存在钥匙串keychain里面,并以此作为标识用户设备的唯一标识符。
3.1关于获取UUID的官方方案
- (NSString *) uniqueString{CFUUIDRef unique = CFUUIDCreate(kCFAllocatorDefault); NSString *result = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, unique) autorelease]; CFRelease(unique); return result;}
复制代码
3.2基于SSKeychain的唯一识别码方案
如上获取的UUID,基于Git上的一个第三方库SSKeychain,可以将UUID保存在keychain里面,每次调用先检查钥匙串里面有没有,有则使用,没有则写进去,保证其唯一性.
参考代码:
- (NSString *)getNewUniqueIdNum{NSString *uuidStr = [SSKeychain passwordForService:@"com.test.app1" account:@"user"]; if (!uuidStr || [uuidStr isEqualToString:@""]) {CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); uuidStr = (__bridge NSString *)CFUUIDCreateString(kCFAllocatorDefault ,uuidRef); [SSKeychain setPassword:[NSString stringWithFormat:@"%@", uuidStr] forService:@"com.test.app1"account:@"user"]; } return uuidStr;}
不同于上面调用的字符串转换(__bridge NSString *),另一种写法:
- (NSString *)getNewUniqueIdNum{NSString *identifierNumber = [SSKeychain passwordForService:@"com.test.app1"account:@"user"]; CFUUIDRef uuidRef = CFUUIDCreate(NULL); assert(uuidRef != NULL); CFStringRef uuidStrRef = CFUUIDCreateString(NULL, uuidRef); if (!identifierNumber){[SSKeychain setPassword: [NSString stringWithFormat:@"%@", uuidStrRef] forService:@"com.test.app1"account:@"user"]; identifierNumber = [SSKeychain passwordForService:@"com.test.app1"account:@"user"]; } return identifierNumber;}
3.3其它方案
不同于如上SSKeychain,基于一个第三方库SAMKeyChains。SAMKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码、账户进行访问,包括读取、删除和设置。SAMKeyChains使用简单,通过实例代码便可掌握。
基于SAMKeyChains方案的参考代码:
+ (NSString *)getDeviceId{NSString * currentDeviceUUIDStr = [SAMKeychain passwordForService:@" "account:@"uuid"]; if (currentDeviceUUIDStr == nil || [currentDeviceUUIDStr isEqualToString:@""]) {NSUUID * currentDeviceUUID =[[UIDevice currentDevice] identifierForVendor]; currentDeviceUUIDStr = [currentDeviceUUID UUIDString]; currentDeviceUUIDStr = [currentDeviceUUIDStr stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentDeviceUUIDStr = [currentDeviceUUIDStr lowercaseString]; [SAMKeychain setPassword: currentDeviceUUIDStr forService:@" "account:@"uuid"]; } return currentDeviceUUIDStr;}
本文转载自: https://cloud.tencent.com/developer/article/1332168
标签:
相关推荐:
最新新闻:
- 如何挑选数码相机?数码相机的基本性能有哪些?:全球播报
- 电脑端的explorer对话框为什么很慢?解决方法是什么?
- 【教程】Devteam最新破解工具终于出炉了
- 2021年国家开放大学计算机网络(本)试题及答案 世界观察
- 热血无赖怎么使用计算机?Win7系统进不去热血无赖游戏如何解决?
- 焦点快报!如何用Google在线翻译引擎实现多国语言互译?详情介绍
- 速讯:北京移动动感地带到底是怎么收费的?详情介绍
- 【数据分析】获取设备唯一标识符的方法:每日消息
- 当前播报:realtekhdaudio装不上驱动的问题如何解决?解决方法步骤
- 世界消息!磁盘管理器里面看不到新硬盘怎么办?解决措施如下
- LOL服务器连接异常如何解决?LOL服务器连接异常的解决方法_环球信息
- 《宫锁连城》剧情大曝光 琼瑶批于正抄袭《梅花烙》
- 世界今日讯!感人的校园爱情故事——伤感日志分享
- 世界微头条丨末日生存名作 《大灾变:黑暗之日》上架steam
- 《暗黑破坏神4》向系列前作致敬 更有暗黑味道 全球快看
- 今日热文:济宁生育津贴审核通过后多久到账?
- 环球百事通!《寂静岭2:重制版》给护士穿上黑丝 是因为原版露肉太多
- 即时焦点:尼尔官宣!《最后生还者》第二季已开始制作
- 首位女性艾滋病“治愈者”研究细节公布 脐带血中移植干细胞-信息
- 传闻称乐高赛车游戏《LEGO 2K Drive》正在开发中
- 国际黄金价格逼近2000美元大关!接近历史高点
- 全球速讯:离开EA后 战地先生成立全新工作室TTK GAMES
- 《偶像大师 闪耀色彩》游改TV动画公开 2024年春开播
- 沪深两市融资余额减少12.17亿元_全球观速讯
- 微信底栏新增“视频号”入口?腾讯回应绝了-世界速看
- 微软:EA才是PS最大的第三方发行商 而非动视暴雪
- 微软:动视暴雪不是PS最大的第三方 EA才是:环球观察
- 消息称开放世界大金刚新作与任天堂新主机同步发售
- 全员尖下巴《学园帅哥》改编像素风动作游戏
- 【环球报资讯】安徽香榭里园林景观工程有限公司
- 焦点短讯!领英可以AI写简历、招聘信息
- 数码单反用SSD存储?转接器来了-全球即时
- 头盔定期换 雅迪3C头盔只要49元
- 【环球播资讯】吃起来放心 摩飞果蔬解毒机339元
- 世界信息:半价655元!零刻迷你主机暴跌
- 《堡垒之夜》里昂克莱尔联动皮肤外观公布_天天热消息
- 《师父》销量已突破200万套 销售额破5000万|今日热门
- 2999元抢比矿泉水还小的华硕迷你主机 天天微头条
- 世界快消息!通勤利器 9号电动滑板车1499元
- 厨房神器 电动打蛋器只要16.9元 今头条
- RTX4070Ti主机限时直降1600元|焦点滚动
- 新玩法 全家跳绳机只要55元
- 要闻速递:迎来一季度“开门红” 2023 年西部陆海新通道第 1700 列铁海联运班列发车
- 全球热讯:《WWE 2K23》Steam评价特别好评:合格的年货之作
- 环球今亮点!《生化危机4:重制版》角色介绍:阿什莉、艾达王
- 商店关闭前 玩家买下了Wii U和3DS平台的所有游戏:全球球精选
- 焦点热文:中国移动9元90G/月 19元180G/月 限时办理
- 天生我材必有用完整版在线阅读_天生我材必有用完整版-天天短讯
- 《High on Life》或将推出DLC 玩家:能不能先修BUG
- 焦点要闻:苹果iPhone 14清库存 到手仅4899
- 焦点要闻:苹果iPhone 14清库存 到手仅4899
- 击败《战神:诸神黄昏》、《地平线:西之绝境》!《索尼克:未知边境》获Fami通最佳动作冒险游戏
- 高空惊悚片《坠落》将拍摄续集 原导演回归
- 买车送手表?比亚迪智能手表曝光:支持汽车钥匙等功能,预计4月上市 全球热闻
- 外媒锐评:理解世嘉推广《女神异闻录》的想法 但氪金手游不合适 全球讯息
- 《控制》总销量超过300万份 收入达6.75亿元人民币
- 当前滚动:娃哈哈老总回应《狂飙》中的AD钙奶:不是广告植入
- 每日信息:《英灵神殿》升级档修复左手鼠标BUG 提升游戏性能
- 戴尔新款透明机械键盘699元到手:资讯推荐
- 夏河县气象台发布雷电黄色预警信号【2023-03-19】
- 克里斯·麦凯仍想拍《夜翼》电影 但还未和古恩谈过|世界速递
- 《生化危机4:重制版》箱子上的黄色记号合理吗? 环球热议
- 《铃芽之旅》预售突破3000万!目前豆瓣7.9分
- 不用对话与文本描述 大阪大学开发大脑所想AI生成图像-世界快看
- 《生化危机4:重制版》正式版并未解决体验版反馈问题
- 《暗黑破坏神4》BETA版实机演示:组队大战世界Boss
- 全球玩家大比拼 《最终幻想16》拥有在线排行榜功能|全球快资讯
- 11代四核神U加持!大唐NUC迷你主机低至699元
- 性价比逆天!金士顿64GB USB3.2 U盘低至27.9元 动态
- 天天讯息:装机首选!锐龙R5-5600板U套装低至1499元
- 长焦镜头之间也有差距?张老板是这么解释的
- 吃得多却饿得快,不一定是消化好!可能跟5种疾病有关,建议排查-环球消息
- 桥本环奈主演《献给国王的无名指》日剧新卡司 4月开播
- 249元!小米米家电子血压计现已开售 世界热点评
- 30系显卡价格崩了!RTX3070低至2239元|全球今头条
- 《漫威蜘蛛侠2》《漫威金刚狼》将采用全新对话技术
- 表情别随便发 有人因回复“合十”表情输上万官司|全球视点
- 《JOJO奇妙冒险:石之海》新宣传片 最终话4月7日播出_环球最资讯
- 全球热资讯!奇怪的文化输出:《柯南》撞脸“九转大肠”登热搜
- 外媒:《最后的生还者》世界爆火标示了新生代索尼进入全盛期-当前动态
- 天天微速讯:传Next Level Games正在开发《F-Zero GX》复刻版
- 直降160元!13490F神U降至1439元
- 小米智能鱼缸399元:半年不换水
- 442评现役右后卫TOP10:阿什拉夫第一,詹姆斯第二,孔德第四:消息
- 25岁女生长期熬夜长出老年斑:基本没在12点前睡过觉 当前简讯