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

Use*_*ser 164 uuid uniqueidentifier swift ios8

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

我需要在数据库中使用ID,并在社交应用程序中作为我的Web服务的API密钥.跟踪日常使用的设备并将其查询限制在数据库中的东西.

谢谢!

Ato*_*mix 359

你可以使用这个(Swift 3):

UIDevice.current.identifierForVendor!.uuidString
Run Code Online (Sandbox Code Playgroud)

对于旧版本:

UIDevice.currentDevice().identifierForVendor
Run Code Online (Sandbox Code Playgroud)

或者如果你想要一个字符串:

UIDevice.currentDevice().identifierForVendor!.UUIDString
Run Code Online (Sandbox Code Playgroud)


在用户卸载应用程序后,不再能够唯一地识别设备.文件说:

在iOS设备上安装app(或来自同一供应商的其他应用程序)时,此属性中的值保持不变.当用户从设备中删除所有该供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改.


您可能还想阅读Mattt Thompson的这篇文章了解更多详情:http://nshipster.com/uuid-udid-unique-identifier/

更新Swift 4.1,您需要使用:

UIDevice.current.identifierForVendor?.uuidString
Run Code Online (Sandbox Code Playgroud)

  • 应用程序卸载后,此号码不再相同.有没有办法在应用程序卸载后跟踪设备? (12认同)
  • 更好的问题是,如果卸载后将其删除,当ID不再使用时,如何删除服务器上的帐户? (4认同)
  • 对.我认为这是显而易见的事情,但我把它包括在答案中. (2认同)
  • @UmairAfzal 很多东西在模拟器中不起作用。你在真机上试过吗? (2认同)

Jay*_*bey 10

您可以使用UIDevice类中存在的identifierForVendor公共属性

let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString
        print("UUID: \(UUIDValue)")
Run Code Online (Sandbox Code Playgroud)

编辑 Swift 3:

UIDevice.current.identifierForVendor!.uuidString
Run Code Online (Sandbox Code Playgroud)

结束编辑

属性层次结构的截图

  • 这只是@Atomix 答案的副本 (4认同)

ilu*_*_GR 10

您可以使用devicecheck(在Swift 4中) Apple文档

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" ...
    }
}
Run Code Online (Sandbox Code Playgroud)

典型用法:

通常,您使用DeviceCheck API确保新用户尚未在同一设备上以其他用户名兑换商品.

服务器动作需要:

参见WWDC 2017 - Session 702

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

您的关联服务器将此令牌与您从Apple收到的身份验证密钥组合在一起,并使用该结果请求访问每个设备位.

  • 如果我理解正确的话,令牌生成是使用 DCDevice.generateToken() 执行的,并且每次调用都会生成一个唯一的随机 device_token。因此,device_token 不是持久的,而是短暂的。我不明白的是服务器如何将临时令牌与设备关联起来。 (2认同)

Swi*_*per 9

适用于Swift 3.X最新工作代码,易于使用;

   let deviceID = UIDevice.current.identifierForVendor!.uuidString
   print(deviceID)
Run Code Online (Sandbox Code Playgroud)

  • 这已在接受的答案中显示. (7认同)
  • 每当使用卸载并再次安装应用程序时,这都会发生变化。 (4认同)
  • 这只是@Atomix和JayprakasDubey答案的副本 (4认同)

Pri*_*tel 5

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

print(UIDevice.current.identifierForVendor!.uuidString)
Run Code Online (Sandbox Code Playgroud)

输出

在此输入图像描述

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

 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"
Run Code Online (Sandbox Code Playgroud)