如何在Swift中获得设备的唯一ID ?

我需要一个ID在数据库中使用,并在我的社交应用程序中作为我的web服务的API-key。一些东西来跟踪这个设备的日常使用情况,并限制其对数据库的查询。


当前回答

你可以在UIDevice类中使用identifierForVendor公共属性

let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString
        print("UUID: \(UUIDValue)")

编辑 斯威夫特3:

UIDevice.current.identifierForVendor!.uuidString

最后编辑

其他回答

class func uuid(completionHandler: @escaping (String) -> ()) {
    if let uuid = UIDevice.current.identifierForVendor?.uuidString {
        completionHandler(uuid)
    }
    else {
        // If the value is nil, wait and get the value again later. This happens, for example, after the device has been restarted but before the user has unlocked the device.
        // https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor?language=objc
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
            uuid(completionHandler: completionHandler)
        }
    }
}

在swift 4,5 您可以使用下面的代码获取UUID。

print(UIDevice.current.identifierForVendor!.uuidString)

输出

除此之外,您可以从连接的设备获得多个属性。

 UIDevice.current.name             // e.g. "My iPhone"
 UIDevice.current.model            // e.g. @"iPhone", @"iPod touch"
 UIDevice.current.localizedModel   // localized version of model
 UIDevice.current.systemName       // e.g. @"iOS"
 UIDevice.current.systemVersion    // e.g. @"15.5"

从iOS 11开始,你可以使用苹果的api: DeviceCheck

我试过了

let UUID = UIDevice.currentDevice().identifierForVendor?.UUIDString

而不是

let UUID = NSUUID().UUIDString

这很有效。

你可以使用devicecheck(在Swift 4中) 苹果公司的文档

func sendEphemeralToken() {
        //check if DCDevice is available (iOS 11)

        //get the **ephemeral** token
        DCDevice.current.generateToken {
        (data, error) in
        guard let data = data else {
            return
        }

        //send **ephemeral** token to server to 
        let token = data.base64EncodedString()
        //Alamofire.request("https://myServer/deviceToken" ...
    }
}

典型的用法:

通常,您使用DeviceCheck api来确保新用户没有在同一设备上以不同的用户名赎回优惠。

服务器动作需求:

参见WWDC 2017 -第702场(24:06)

更多来自Santosh Botre文章- iOS设备的唯一标识符

您的相关服务器将此令牌与您从Apple收到的验证密钥结合起来,并使用结果请求访问每个设备位。