swift 获取设备唯一标识(KeychainAccess存储)

需求:获取设备的唯一标识;

设备的唯一编码最好为Mac地址,但是苹果不允许获取设备的Mac地址,只能换成设备的 UUID,但 UUID 在app卸载重装后就会变动,不能很好的满足一台设备绑定一个账号的需求;那就需要处理app卸载后保证UUID不会跟着一起被重置掉;

Keychain (IOS系统钥匙串存储) 存储在iOS系统中,只有手机恢复出场设置时 Keychain 才会跟着一起被删除,app卸载重装时不会影响 keychain 的存储数据;不同App之间Keychain是不能相互访问的,但是可以通过配置Keychain-sharing来解决。因此使用 Keychain 可以解决 UUID 在一个app中保持唯一的问题。

具体解决方式:

KeychainAccess 库是基于 Keychain 封装的库;先用 pods(点击查看pods安装使用方法) 将库引入项目中

 pod 'KeychainAccess'

再封装一个工具类来存储和拉取UUID

import UIKit
import KeychainAccess

struct UUIDTool {

    static let KEYCHAIN_SERVICE:String = "com.xxxxx.xxxxx"  // 需要项目唯一性,建议使用项目的 bundleId
    static let UUID_KEY:String = "UUID_KEY"
    
    static func getUUID() -> String{
        let keychain = Keychain(service: KEYCHAIN_SERVICE)
        var uuid:String = ""
        do {
            uuid = try keychain.get(UUID_KEY) ?? ""
        }
        catch let error {
            print(error)
        }
        print("拉取的设备: \(uuid)")
        if uuid.isEmpty {
            uuid = UUID().uuidString
            do {
                try keychain.set(uuid, key: UUID_KEY)
            }
            catch let error {
                print(error)
                uuid = ""
            }
        }
        return uuid
    }    
}

使用方法

UUIDTool.getUUID()

你可能感兴趣的:(swift 获取设备唯一标识(KeychainAccess存储))