如何在Swift中获得设备的唯一ID ?
我需要一个ID在数据库中使用,并在我的社交应用程序中作为我的web服务的API-key。一些东西来跟踪这个设备的日常使用情况,并限制其对数据库的查询。
如何在Swift中获得设备的唯一ID ?
我需要一个ID在数据库中使用,并在我的社交应用程序中作为我的web服务的API-key。一些东西来跟踪这个设备的日常使用情况,并限制其对数据库的查询。
当前回答
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)
}
}
}
其他回答
斯威夫特2.2
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let userDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey("ApplicationIdentifier") == nil {
let UUID = NSUUID().UUIDString
userDefaults.setObject(UUID, forKey: "ApplicationIdentifier")
userDefaults.synchronize()
}
return true
}
//Retrieve
print(NSUserDefaults.standardUserDefaults().valueForKey("ApplicationIdentifier")!)
在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"
if (UIDevice.current.identifierForVendor?.uuidString) != nil
{
self.lblDeviceIdValue.text = UIDevice.current.identifierForVendor?.uuidString
}
从iOS 11开始,你可以使用苹果的api: DeviceCheck
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)
}
}
}