iOS获取设备唯一标识和UUID方案
以下获取uuidString的方法,每次重启都会改变。
UIDevice.current.identifierForVendor?.uuidString
但是项目的要求是不变,并且删除app 只有也有有保留的需求。显然这个无法满足我们的需求。
使用KeyChain解决
来了解一下一KeyChain。keychain(钥匙串)存储在iOS系统中,并且恢复iPhone会使keychain的内容也恢复.但是删除App是不会影响keychain.
不同App之间Keychain是不能相互访问的,但是可以通过配置keychain-sharing来解决。
使用KeyChain保存到系统钥匙串中,然后再去获取相应的值,就可以保证删除app新装的app也能获取到第一次安装存储的值。显然是可以满足我们的需求的。
下面使用KeychainAccess的第三方类库来实现。
1、pod 引入包
pod 'KeychainAccess'
2、自己写的工具类
//
// UUIDTool.swift
// KeychainDemo
//
// Created by wumeng on 2022/3/10.
//
import UIKit
import KeychainAccess
struct UUIDTool{
static let KEYCHAIN_SERVICE:String = "com.wumeng.KeychainDemo"
static let IMEI_KEY:String = "IMEI"
static func getUUID() -> String{
let keychain = Keychain(service: KEYCHAIN_SERVICE)
var uuid:String = ""
do {
uuid = try keychain.get(IMEI_KEY) ?? ""
}
catch let error {
print(error)
}
print("1111 \(uuid)")
if uuid.isEmpty {
uuid = UUID().uuidString
do {
try keychain.set(uuid, key: IMEI_KEY)
}
catch let error {
print(error)
uuid = ""
}
}
return uuid
}
}
开箱即用!
使用方法:
UUIDTool.getUUID()
大功告成!