公司需求要蘋果去獲取IMEI當(dāng)時(shí)我是崩潰的但是我還不能直接說這個(gè)做不了。因?yàn)橹皇侵涝趇OS5以后方法被廢除該方法 但是為什么這樣做以及這樣的做的產(chǎn)生的影響等等 還真不知道 所以寫下這篇文章,話不多說直切主題。
一 關(guān)于IMEI 及常用相關(guān)概念
IMEI,IMSI:
IMEI(International Mobile Equipment Identity)是國(guó)際移動(dòng)設(shè)備身份碼的縮寫,國(guó)際移動(dòng)裝備辨識(shí)碼,是由15位數(shù)字組成的”電子串號(hào)”,它與每臺(tái)手機(jī)一一對(duì)應(yīng),而且該碼是全世界唯一的。每一部手機(jī)在組裝完成后都將被賦予一個(gè)全球唯一的一組號(hào)碼,這個(gè)號(hào)碼從生產(chǎn)到交付使用都將被制造生產(chǎn)的廠商所記錄。手機(jī)用戶可以在手機(jī)中查到自己手機(jī)的IMEI碼。重點(diǎn)來了 !iOS5以后不能再獲取了,但通過私有Api能獲取,這是在網(wǎng)上能查到的。Git上的erica的UIDevice擴(kuò)展文件,以前可用但由于IOKit framework沒有公開,所以也無(wú)法使用。就算手動(dòng)導(dǎo)入,依舊無(wú)法使用,看來獲取IMEI要失敗了,同時(shí)失敗的還有IMSI。
UUID
每次運(yùn)行都會(huì)發(fā)生變化,最理想的就是保存在keychain里面,以此作為標(biāo)識(shí)用戶設(shè)備的唯一標(biāo)識(shí)符,這也是我們目前使用頻率最多的。具體代碼可以百度谷歌 反正網(wǎng)上一搜一大把。
其他的像IDFA、IDFV可以簡(jiǎn)單了解一下就可以了(其實(shí)是我沒用過???♀?),IDFA:廣告標(biāo)示符,它是由系統(tǒng)存儲(chǔ)著的。IDFV:iOS6.0及以后使用,是給Vendor標(biāo)識(shí)用戶用的,vendor:賣主,小販。經(jīng)過測(cè)試發(fā)現(xiàn)com.test.app1和com.test.app2具有相同的idfv,而如果是com.app1和com.app2則是兩個(gè)不同的idfv。準(zhǔn)確點(diǎn)說,就是通過BundleID的反轉(zhuǎn)的前兩部分進(jìn)行匹配,如果相同就是同一個(gè)Vender,共享同一個(gè)idfv的值。
實(shí)現(xiàn)方法 NSString *idfv = [[UIDevice currentDevice].identifierForVendor UUIDString];
二、蘋果為什么開始拒絕 iOS 應(yīng)用獲取設(shè)備的 UDID ?之前為什么允許?
UDID本來是為了方便一個(gè)應(yīng)用來統(tǒng)計(jì)用戶行為的,但是因?yàn)槭且粋€(gè)唯一ID,而且直接看不到跟用戶隱私的關(guān)系,所以是開放出來的。但是,當(dāng)有大量的App在市場(chǎng)中,而UDID對(duì)于每個(gè)App都是一樣的時(shí)候,用戶的隱私其實(shí)受到了一定程度的侵犯。假設(shè)有很多App聯(lián)合在一起,因?yàn)閁DID是統(tǒng)一的,那么他們就可以拼湊出用戶的隱私出來。所以從這個(gè)角度蘋果去掉了UDID的支持,而每個(gè)應(yīng)用可以自行生成自己的UUID,所以,單一app的統(tǒng)計(jì)仍舊不會(huì)發(fā)生問題。所以主要的原因是隱私問題。
補(bǔ)充:目前想要真正意義上的獲取手機(jī)唯一標(biāo)識(shí)是不可能的。只能說UUID + keychain 能滿足99%以上的需求,但本人親測(cè)后發(fā)現(xiàn)如果手機(jī)進(jìn)行重置后keychain 中的UUID 還是會(huì)改變的,還有網(wǎng)上說版本升級(jí)也會(huì)丟失keychain 數(shù)據(jù)。
@end