前言
iOS裝置5.0以上放棄使用[[UIDevice currentDevice] uniqueIdentifier]來獲得裝置唯一ID
iOS裝置私有方法禁止使用者擷取和使用IMEI
需求
需要一個能夠辨別裝置唯一性的ID
Apple解決方案
1、使用CFUUIDCreateString(NULL, CFUUIDCreate(NULL))生成UUID
2、将UUID緩存在本地,sqlite或plist。使用時取出
評價:
坑爹!這種方式每次UUID生成一次都不一樣,如果産品被fuck out of device,再裝載會導緻兩次UUID不一緻。這個方案明顯适用範圍狠窄啊親。于是乎各路妖魔鬼怪開始了各種解決方案。
方案一:(Mac位址+bundle_id)
1、擷取本地mac位址和應用bundle_id
2、将mac+bundle_id進行散列運算獲得機器+應用的唯一辨別
3、隻将mac進行散列運算獲得機器的唯一辨別
評價:
狠好的解決方案,如果沒有2B的聯通攪局,這個方案可以說完美了,取wifi的mac位址除,非你修機器把wifi換掉。但是親,中國曾經出過太監版3GS,泥馬,這是一種怎樣的考量删除了wifi啊。這種拍腦袋的做法就是當局的2B,聯通跟着傻B。what the fuck!你說還有其他方案不,不要依賴硬體?
方案二:(推送token+bundle_id)
1、應用中增加推送用來擷取token
2、擷取應用bundle_id
3、根據token+bundle_id進行散列運算
評價:
apple push token保證裝置唯一,但必須有網絡情況下才能工作,該方法不依賴于裝置本身,但依賴于apple push。加上一定的業務邏輯可以解決大部分情景。
方案三:openUUID
我不知道是誰想出來的,而且還有很多部落格裡都說這個是解決方案,還弄的長篇大論,我實在看不出來這個方案和apple提供的UUID方案有什麼不同。這種方案各種無解,删除應用後還是沒法解決問題啊親。