標籤:style blog color io os 使用 ar for strong
通常情況下,IOS系統用NSUserDefaults儲存資料資訊,但是對於一些私密資訊,比如密碼、認證等等,就需要使用更為安全的keychain了。
keychain裡儲存的資訊不會因App被刪除而丟失。所以,可以利用這個keychain這個特點來儲存裝置唯一標識。
那麼,如何在應用裡使用使用keyChain呢,我們需要匯入Security.framework ,keychain的操作介面聲明在標頭檔SecItem.h裡。
直接使用SecItem.h裡方法操作keychain,需要寫的代碼較為複雜,我們可以使用已經封裝好了的工具類KeychainItemWrapper來對keychain進行操作。
KeychainItemWrapper是apple官方例子“GenericKeychain”裡一個訪問keychain常用操作的封裝類,在官網上下載了GenericKeychain項目後,
只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷貝到我們項目,並匯入Security.framework 。(xcode5中要把KeychainItemWrapper.m去除自動引用計數)
// NSMutableString *str1 =[NSMutableString string];// KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:@"com.itrun.www"];// [keychainItem resetKeychainItem];// // NSString *uuidStr = [keychainItem objectForKey:(__bridge id)kSecValueData];// if (uuidStr.length == 0) { //唯一識別碼產生的地方 NSString *myUUIDStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];// [keychainItem setObject:myUUIDStr forKey:(__bridge id)kSecValueData];// str1 = myUUIDStr;// }// else{// str1 = [keychainItem objectForKey:(__bridge id)kSecValueData];// }// MyLog(@"======%@",str1); //050BBA53-7388-4CFF-991D-FEB548065CDF //5023A8E8-233F-4391-B119-2234996537E9
但是在IOS8真機調試的時候,出錯。。
要識別使用者,首先就是要選擇一個標識符,通過這個標識符來識別這個使用者的裝置(而不是使用者),這個標識符要能夠保證一個裝置上返回的值是一樣的,並且在其他裝置上不會出現相同的值。
在iOS7之前,曾經有過很多方法來識別使用者的裝置,從最原始的裝置udid、mac地址,到被各廣告統計平台廣泛使用的開源方案OpenUDID。
但隨著AppStore開始拒絕接受使用udid的應用,到mac地址在iOS7上所有裝置上都返回相同的值,再到iOS7上對剪貼簿的限制,導致OpenUDID無法被不同應用共用相同的值,註定了上面提到的這些id們不得不退出曆史的舞台。
隨著iOS7快速佔據了半壁江山,裝置id的控制權終於徹底回到了Apple手中,同時也讓使用者能夠把控自己的隱私,充分表明了是蘋果對使用者隱私保護的決心。
好了,其實就一個問題:iOS7時代我們用什麼來追蹤和識別使用者?
先給結論
- idfa: 適用於對外:例如廣告推廣,換量等跨應用的使用者追蹤等
- idfv: 適用於對內:例如分析使用者在應用內的行為等
PS:塵埃落定,跟著Apple走,大家不用再猶豫了。
再給解釋idfa
idfv
曆史上的英雄們UDID
裝置唯一識別碼(Unique Device Identifier)之前被各種國內外統計平台,應用開發商廣泛使用,後Apple從2013年05月01日起拒絕接受使用UDID的應用後,立斃!
Mac地址
每一個網卡都有一個唯一的標識,即Mac地址,顯然用來標識一個手機是綽綽有餘的了,也有一些開源的方案也用到了它,國內UMTrack等也用它作為過主id,隨著iOS7返回同樣的值後,不得不退隱江湖。
OpenUDID
在Apple拒絕UDID後,OpenUDID作為獨立於Apple的開源方案,被廣大的開發人員所接受,各大統計廣告平台都從UDID等方案切換到OpenUDID的方案(看來大家都不想完全被Apple束縛啊),但不幸的事,同樣由於iOS7對剪貼簿的限制,導致同一個裝置上應用間,無法再共用一個OpenUDID,即OpenUDID作為裝置唯一標識的能力被大大削弱。也可以看到隨著iOS7的來臨,各廣告平台都迅速更新自己的SDK,來切換到蘋果的idfa的方案上來。
其他
CFUUID、NSUUID等自己產生,自己儲存管理的就不細說啦。
DeviceToken
這是推送用的令牌,使用者如果沒開推送,或者拒絕了,這個就沒有了!
IOS6及以後如何標識不同裝置