技術(shù)干貨丨IOS系統(tǒng)上,我們用什么來追蹤和識別用戶?-產(chǎn)品100
? ? ? 要識別用戶,首先就是要選擇一個(gè)標(biāo)識符,通過這個(gè)標(biāo)識符來識別這個(gè)用戶的設(shè)備(而不是用戶),這個(gè)標(biāo)識符要能夠保證一個(gè)設(shè)備上返回的值是一樣的,并且在其他設(shè)備上不會(huì)出現(xiàn)相同的值。
? ? ? 在iOS7之前,曾經(jīng)有過很多方法來識別用戶的設(shè)備,從最原始的設(shè)備udid、mac地址,到被各廣告統(tǒng)計(jì)平臺廣泛使用的開源方案OpenUDID。但隨著AppStore開始拒絕接受使用udid的應(yīng)用,到mac地址在iOS7上所有設(shè)備上都返回相同的值,再到iOS7上對剪貼板的限制,導(dǎo)致OpenUDID無法被不同應(yīng)用共享相同的值,注定了上面提到的這些id們不得不退出歷史的舞臺。
? ? ? 隨著新的IOS系統(tǒng)快速占據(jù)了半壁江山,設(shè)備id的控制權(quán)終于徹底回到了Apple手中,同時(shí)也讓用戶能夠把控自己的隱私,充分表明了是蘋果對用戶隱私保護(hù)的決心。好了,其實(shí)就一個(gè)問題:我們用什么來追蹤和識別用戶?
先給結(jié)論
? ? ? ?idfa: 適用于對外:例如廣告推廣,換量等跨應(yīng)用的用戶追蹤等
? ? ? ?idfv: 適用于對內(nèi):例如分析用戶在應(yīng)用內(nèi)的行為等
? ? ? PS:塵埃落定,跟著Apple走,大家不用再猶豫了。再給解釋
? ? ? ?idfa全名:advertisingIdentifier?
? ? ? 代碼:#import<AdSupport/AdSupport.h>
? ? ? ?NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
來源:iOS6.0及以后
說明:直譯就是廣告id, 在同一個(gè)設(shè)備上的所有App都會(huì)取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設(shè)的,用戶可以在 設(shè)置|隱私|廣告追蹤 里重置此id的值,或限制此id的使用,故此id有可能會(huì)取不到值,但好在Apple默認(rèn)是允許追蹤的,而且一般用戶都不知道有這么個(gè)設(shè)置,所以基本上用來監(jiān)測推廣效果,是戳戳有余了。
注意:由于idfa會(huì)出現(xiàn)取不到的情況,故絕不可以作為業(yè)務(wù)分析的主id,來識別用戶。
idfv
全名:identifierForVendor
代碼:
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
來源:iOS6.0及以后
說明:顧名思義,是給Vendor標(biāo)識用戶用的,每個(gè)設(shè)備在所屬同一個(gè)Vender的應(yīng)用里,都有相同的值。其中的Vender是指應(yīng)用提供商,但準(zhǔn)確點(diǎn)說,是通過BundleID的DNS反轉(zhuǎn)的前兩部分進(jìn)行匹配,如果相同就是同一個(gè)Vender,例如對于com.somecompany.appone,com.somecompany.apptwo 這兩個(gè)BundleID來說,就屬于同一個(gè)Vender,共享同一個(gè)idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常適合于作為內(nèi)部用戶行為分析的主id,來標(biāo)識用戶,替代OpenUDID。
注意:如果用戶將屬于此Vender的所有App卸載,則idfv的值會(huì)被重置,即再重裝此Vender的App,idfv的值和之前不同。
歷史上的英雄們
UDID
設(shè)備唯一標(biāo)識符(Unique Device Identifier)之前被各種國內(nèi)外統(tǒng)計(jì)平臺,應(yīng)用開發(fā)商廣泛使用,后Apple從2013年05月01日起拒絕接受使用UDID的應(yīng)用后,立斃!
Mac地址
每一個(gè)網(wǎng)卡都有一個(gè)唯一的標(biāo)識,即Mac地址,顯然用來標(biāo)識一個(gè)手機(jī)是綽綽有余的了,也有一些開源的方案也用到了它,國內(nèi)UMTrack等也用它作為過主id,隨著iOS7返回同樣的值后,不得不退隱江湖。
OpenUDID
在Apple拒絕UDID后,OpenUDID作為獨(dú)立于Apple的開源方案,被廣大的開發(fā)者所接受,各大統(tǒng)計(jì)廣告平臺都從UDID等方案切換到OpenUDID的方案(看來大家都不想完全被Apple束縛啊),但不幸的事,同樣由于iOS7對剪貼板的限制,導(dǎo)致同一個(gè)設(shè)備上應(yīng)用間,無法再共享一個(gè)OpenUDID,即OpenUDID作為設(shè)備唯一標(biāo)識的能力被大大削弱。也可以看到隨著iOS7的來臨,各廣告平臺都迅速更新自己的SDK,來切換到蘋果的idfa的方案上來。
其他
CFUUID、NSUUID等自己生成,自己存儲(chǔ)管理的就不細(xì)說啦。
DeviceToken
這是推送用的令牌,用戶如果沒開推送,或者拒絕了,這個(gè)就沒有了!