IDFV - Identifier For Vendor(应用开发商标识符)
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就是应用开发商,通过CFBundleIdentifier(DNS反转格式)的前两部分生成。例如:com.cjh.one和com.cjh.two得到的IDFV是一样的。如果用户将属于此Vendor的所有应用卸载,则IDFV的值会被重置,即使再重装此Vendor的应用,IDFV的值也和之前不同。
适用于对内:例如分析用户在应用内的行为等。
IDFA:广告追踪
广告标示符,在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的。但好在Apple默认是允许追踪的,而且一般用户都不知道有这么个设置,所以基本上用来监测推广效果,是戳戳有余了。
它是iOS 6中另外一个新的方法,提供了一个方法advertisingIdentifier,通过调用该方法会返回一个NSUUID实例,最后可以获得一个UUID,由系统存储着的。
不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。
关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。
所以IDFA也不可以作为获取唯一标识的方法,来识别用户
我采用的办法(IDFV + keyChain(钥匙串)使用)不考虑刷机情况
- 在podfile 里面加入
pod 'SAMKeychain'
- 控制台执行
pod install
安装 - command + n 新建Swift File ,自定义个名字,比如
DeviceModelInfo
image.png
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
网友评论