UIDevice.current.identifierForVendor?.uuidString
以上获取uuidString的方法,每次重启都会改变。
但是项目的要求是不变,并且删除app 只有也有有保留的需求。显然这个无法满足我们的需求。
使用KeyChain解决
-
keychain(钥匙串)存储在iOS系统中,并且恢复iPhone会使keychain的内容也恢复.但是删除App是不会影响keychain.
不同App之间Keychain是不能相互访问的,但是可以通过配置keychain-sharing来解决。 -
使用KeyChain保存到系统钥匙串中,然后再去获取相应的值,就可以保证删除app新装的app也能获取到第一次安装存储的值。显然是可以满足我们的需求的。
使用KeychainAccess的第三方类库来实现:
- pod 引入包
pod 'KeychainAccess'
- 封装工具类
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()
这样就可以使用OK了!~
网友评论