如何在Swift中获取设备的唯一标识符?
我需要一个ID用于数据库,并作为我的社交应用程序中Web服务的API密钥。这样可以跟踪该设备的每日使用情况并限制其对数据库的查询。
如何在Swift中获取设备的唯一标识符?
我需要一个ID用于数据库,并作为我的社交应用程序中Web服务的API密钥。这样可以跟踪该设备的每日使用情况并限制其对数据库的查询。
你可以使用以下代码(Swift 3):
UIDevice.current.identifierForVendor!.uuidString
对于旧版本:
UIDevice.currentDevice().identifierForVendor
或者如果你需要一个字符串:
UIDevice.currentDevice().identifierForVendor!.UUIDString
用户卸载应用程序后,不再有一种唯一标识设备的方法。文档中表示:
只要在iOS设备上安装了该应用程序(或来自同一供应商的其他应用程序),此属性中的值就保持不变。当用户从设备上删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值将更改。
您还可以阅读Mattt Thompson撰写的这篇文章,以获取更多详细信息:
http://nshipster.com/uuid-udid-unique-identifier/
Swift 4.1更新:您需要使用以下代码:
UIDevice.current.identifierForVendor?.uuidString
您可以在 Swift 4 中使用 devicecheck 苹果文档
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-Session 702(24:06)
更多来自Santosh Botre文章- iOS设备的唯一标识符
您的相关服务器将此令牌与从Apple收到的身份验证密钥组合,并使用结果请求访问每个设备位。
generateToken
生成的数据令牌不够用吗? - Yonathan Goriachnick针对Swift 3.X最新的可用代码,易于使用;
let deviceID = UIDevice.current.identifierForVendor!.uuidString
print(deviceID)
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"
Swift 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")!)
UserDefaults
部分,你可以使用它,你的MDM系统可以更改它,并且你可以在应用程序端读取:
对于设备ID,你可以决定将你的键命名为UserDefaults.standard.object(forKey: "com.apple.configuration.managed")
deviceID
(但它可以是任何名称),并从上述的UserDefaults
中读取它。然后在MDM端,你将把这个变量设置为设备的ID。deviceID
并将其设置为由您的MDM系统提供的序列号变量。然后,MDM系统将使用该键和不同的值更新特殊的托管UserDefaults部分,具体取决于安装它的设备,从而允许您从应用程序中访问该值。if (UIDevice.current.identifierForVendor?.uuidString) != nil
{
self.lblDeviceIdValue.text = UIDevice.current.identifierForVendor?.uuidString
}