在iOS7之前可以通過系統(tǒng)方法直接獲取到用戶手機(jī)的udid 唯一標(biāo)識裸违,而之后都被蘋果了胸遇,盡管后來大家又想出獲取MAC地址的方式來做评汰,不幸的是又被禁止了村缸,后來我便又看到一種新的保存方法祠肥,用鑰匙串保存UUID來當(dāng)做用戶手機(jī)的唯一標(biāo)識。
由于現(xiàn)在只能通過[UIDevice currentDevice].identifierForVendor.UUIDString這個方法獲取標(biāo)識梯皿,但是這個不具有唯一性仇箱,當(dāng)用戶的應(yīng)用卸載后重裝的話就會生成新的UUID,所以并不能通過一個應(yīng)用來唯一標(biāo)識用戶手機(jī)是否是同一個东羹。
keychain保存UUID的話是將用戶第一次安裝應(yīng)用時所生成的UUID保存起來剂桥,等到下次用戶卸了此應(yīng)用,再重新安裝時會先從keychain中讀取這個UUID數(shù)属提,讀不到再生成新的权逗,這樣就可以保證統(tǒng)計出一個應(yīng)用真正唯一對應(yīng)一個用戶美尸。
蘋果提供了一個方法允許同一個發(fā)商的多個APP訪問各APP之間的途徑,即在調(diào)SecItemAdd添加數(shù)據(jù)的時候指定AccessGroup斟薇,即訪問組师坎。一個APP可以屬于同事屬于多個分組,添加KeyChain數(shù)據(jù)訪問組需要做一下兩件事情:
a堪滨、在APP target的bulibSetting里面設(shè)置Code Signing Entitlements胯陋,指向包含AceessGroup的分組信息的plist文件。添加plist文件的全路徑在Code Signing Entitlements后面袱箱,否則會出現(xiàn)找不到文件的錯誤
b惶岭、在工程目錄下新建一個KeychainAccessGroups.plist文件,該文件的結(jié)構(gòu)中最頂層的節(jié)點必須是一個名為“keychain-access-groups”的Array犯眠,并且該Array中每一項都是一個描述分組的NSString按灶。對于String的格式也有相應(yīng)要求,格式為:"AppIdentifier.com.***"筐咧,其中APPIdentifier就是你的開發(fā)者帳號對應(yīng)的ID鸯旁。
查找這個APPIdentifier當(dāng)時費了我不少時間,首先去開發(fā)者網(wǎng)站登錄你的開發(fā)者賬號量蕊,找到你在那里面注冊的該項目的appid铺罢,點開看,會展示出如下圖所示的樣子残炮,下圖中顯示的Prefix就是上述的APPIdentifier韭赘。