概念
这里讲到的 UIID 和 UDID 是我们开发过程中抽象出来的两个概念。我们可以认为:
-
UIID: user installed ID, 也就是用户在app安装周期内,当前app内记录本机的唯一标识符。 -
UDID: user device ID,用户在非刷机前提下,当前app内记录的本机的唯一标识符
区别在于他们的生命周期。
-
UIID: 在APP卸载以后,标识符消失。重新安装app后生成一个新的 -
UDID: 不随卸载而改变,除非刷机。
背景
看到这里,肯定会觉得奇怪。
我们通过
iTunes或其他的 第三方工具看到的本机识别码明明是固定的。 为什么会说刷机之后改变了?
iOS 5 开始,已经不允许开发者直接获取设备上的 UDID 因为涉及用户的隐私。
从那之后,有过许许多多的替代方案用作设备的唯一识别码。我们文首提到的 UIID 和 UDID 就是针对这种方案下做的。
其实,定义唯一标识符的协议方式有很多种。你可以使用自定义的方式,例如加上时间戳、多位随机数等等。特别是跟业务逻辑相关的识别码,一定有一套自己的协议。
而 UIID和UDID最大的区别在于存储方式和使用时长的区别。
UIID
根据上文的阐述,这个 ID 是存在 app 安装的周期内的。那么我们可以认为他是一个存在 app 所在沙盒内的一个字符串。我们可以存在 cache 或 NSUserDefault 中
UDID
很多文章中使用了 IDFA 的方式来进行唯一的标识符 直译就是广告 ID, 在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,用户可以在 设置|隐私|广告追踪 里重置此id的值,或限制此id的使用,故此id有可能会取不到值.
至于持久化,我们可以借用 keychain来作为保存的对象。
下面是一段 swift 的代码
import AdSupport
import KeychainAccess // 第三方库
fileprivate let keychainServiceName = "igg.gameAssistant.uuid.service"
fileprivate let UDIDKey = "igg.gameAssistant.udid"
fileprivate let keychain = Keychain(service: keychainServiceName)
func createUDID() -> String {
let isUserOpenAdTrackingFuction = ASIdentifierManager.shared().isAdvertisingTrackingEnabled
var UUIDString = ""
if isUserOpenAdTrackingFuction {
UUIDString = ASIdentifierManager.shared().advertisingIdentifier.uuidString.lowercased()
} else {
UUIDString = UUID().uuidString.lowercased()
}
keychain[UDIDKey] = UUIDString
return keychain[UDIDKey]!
}











网友评论