想要追蹤、統計用戶,自然離不開用戶唯一標識符,這是每個公司都面臨的問題。在歷史上唯一標識符很多,如UDID、MAC地址、OpenUDID等,不再一一介紹他們是怎麼掛掉的,現在好用的只剩下了idfa、idfv、UUID+keyChain。
idfa(Advertising Identifier):可以理解為廣告id,apple公司提供的用於追蹤用戶的廣告標識符。
缺點:用戶可通過設置-隱私-廣告-還原廣告標識符 還原,之後會得新的到標識符;
要求iOS>=6.0。
使用:
#import NSString *idfa= [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
idfv (identifierForVendor):apple提供給Vendor的唯一標識符,Vendor代表了應用開發商,實際使用時,一個Vendor是CFBundleIdentifier(反轉DNS格式)的前兩部分。例如,com.baidu.tieba 和 com.baidu.image 得到的idfv是相同的,因為它們的CFBundleIdentifier 前兩部分是相同的。
缺點:把同一個開發商的所有應用卸載後,再次安裝取到的idfv會不同。假設手機上裝有公司的兩款app:貼吧、
要求:iOS>=6.0
使用:
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
UUID(Universally Unique Identifier):通用唯一識別碼,每次生成均不一樣,所以第一次生成後需要保存到鑰匙串,這樣即使應用刪除再重裝仍然可以從鑰匙串得到它。
使用:
UUID生成方法很多種,這裡只寫出一種。生成一個UUID:
-(NSString*) uuid { CFUUIDRef puuid = CFUUIDCreate( nil ); CFStringRef uuidString = CFUUIDCreateString( nil, puuid ); NSString * result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString)); CFRelease(puuid); CFRelease(uuidString); return result; }將UUID儲存在鑰匙串,這裡用到了一個第三方的工具 SFHFKeychainUtils,github地址
[SFHFKeychainUtils storeUsername:@UDID andPassword:[self uuid] forServiceName:@ZYB updateExisting:1 error:nil];從鑰匙串取出UUID:
[SFHFKeychainUtils getPasswordForUsername:@UDID andServiceName:@ZYB error:nil]