天天看點

[IOS] IOS 生成裝置唯一辨別

前言

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方案有什麼不同。這種方案各種無解,删除應用後還是沒法解決問題啊親。