Swift

Swift IDFV + KeyChain 保存设备唯一标识(卸

2019-12-27  本文已影响0人  红色小星

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(钥匙串)使用)不考虑刷机情况

  1. 在podfile 里面加入

pod 'SAMKeychain'

  1. 控制台执行 pod install安装
  2. 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
上一篇下一篇

猜你喜欢

热点阅读