IDFV - Identifier For Vendor(應用開發(fā)商標識符)
let idfv = UIDevice.current.identifierForVendor
官方解釋:
a UUID that may be used to uniquely identify the device, same across apps from a single vendor.
翻譯:"可用于唯一標識設備的UUID返吻,同一供應商的應用程序。"
這里的Vendor就是應用開發(fā)商,通過CFBundleIdentifier(DNS反轉格式)的前兩部分生成段标。例如:com.cjh.one和com.cjh.two得到的IDFV是一樣的晨缴。如果用戶將屬于此Vendor的所有應用卸載闻鉴,則IDFV的值會被重置筛武,即使再重裝此Vendor的應用睁枕,IDFV的值也和之前不同。
適用于對內:例如分析用戶在應用內的行為等艘蹋。
IDFA:廣告追蹤
廣告標示符锄贼,在同一個設備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設的女阀。但好在Apple默認是允許追蹤的宅荤,而且一般用戶都不知道有這么個設置,所以基本上用來監(jiān)測推廣效果浸策,是戳戳有余了冯键。
它是iOS 6中另外一個新的方法,提供了一個方法advertisingIdentifier庸汗,通過調用該方法會返回一個NSUUID實例惫确,最后可以獲得一個UUID,由系統(tǒng)存儲著的蚯舱。
不過即使這是由系統(tǒng)存儲的改化,但是有幾種情況下,會重新生成廣告標示符枉昏。如果用戶完全重置系統(tǒng)((設置程序 -> 通用 -> 還原 -> 還原位置與隱私) 陈肛,這個廣告標示符會重新生成。另外如果用戶明確的還原廣告(設置程序-> 通用 -> 關于本機 -> 廣告 -> 還原廣告標示符) 兄裂,那么廣告標示符也會重新生成句旱。
關于廣告標示符的還原,有一點需要注意:如果程序在后臺運行晰奖,此時用戶“還原廣告標示符”谈撒,然后再回到程序中,此時獲取廣 告標示符并不會立即獲得還原后的標示符匾南。必須要終止程序港华,然后再重新啟動程序,才能獲得還原后的廣告標示符午衰。
所以IDFA也不可以作為獲取唯一標識的方法立宜,來識別用戶
我采用的辦法(IDFV + keyChain(鑰匙串)使用)不考慮刷機情況
- 在podfile 里面加入
pod 'SAMKeychain'
- 控制臺執(zhí)行
pod install
安裝 - command + n 新建Swift File ,自定義個名字,比如
DeviceModelInfo
import Foundation
import UIKit
//MARK: - UIDevice擴展
let appAccountKey = "appAccountKey"
public extension UIDevice {
/**
從鑰匙串讀取idfv
*/
var keychainIdfv: String {
let idfv = identifierForVendor?.uuidString
// 說明以前存過
let lastKeyChianIdfv = SAMKeychain.password(forService: AppInfo.bundleIdentifier, account: appAccountKey)
if lastKeyChianIdfv?.count ?? 0 > 0 {
return lastKeyChianIdfv ?? ""
}else {
// 存到鑰匙串里
SAMKeychain.setPassword(idfv ?? "", forService: AppInfo.bundleIdentifier, account: appAccountKey)
}
return idfv ?? ""
}
}
調用:
let keychainIdfv = UIDevice.current.keychainIdfv