如何在iOS设备中获取唯一标识?

56

我曾在服务器端使用MAC地址来标识iOS设备。当我在iOS 7上运行我的应用程序时,无法检索到正确的MAC地址。作为替代,我使用了

NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];

属性。但是这个值在每次安装应用程序后也会更改。现在我想在服务器端检测特定的设备?我该如何获取iOS设备的唯一标识符?

7个回答

70

您无法再获得每个设备的唯一ID,identifierForVendor是目前为止最好的选择。苹果已经系统地禁用了识别特定设备的功能,以防止用户的ID被营销人员传播。

要获取标识符ID作为字符串,可以使用:

let deviceId = UIDevice.current.identifierForVendor?.uuidString

更新

如果你需要一个通用ID,则可以使用advertisingIdentifier选项。但是,如果用户在其设备设置中限制广告跟踪,则此值将仅返回所有零。

import AdSupport

let identifierManager = ASIdentifierManager.shared()
if identifierManager.isAdvertisingTrackingEnabled {
    let deviceId = identifierManager.advertisingIdentifier.uuidString
}

N.B. 苹果建议只有广告框架开发公司才能使用此代码,而非应用程序开发人员。如果您在非广告相关目的中使用此代码,则准备好被拒绝。


在Swift中获取设备ID,请参考以下链接:https://dev59.com/N2Ik5IYBdhLWcg3wTcjp#32181411 - Hardik Bar
1
如果有其他人像我一样,从libgdx/robovm领域来寻找在Java中实现此操作的方法: UIDevice device = UIDevice.getCurrentDevice(); String id = device.getIdentifierForVendor().asString(); - M1LKYW4Y

48

获取设备ID的最佳方法是使用identifierForVendor

UIDevice *device = [UIDevice currentDevice];

NSString  *currentDeviceId = [[device identifierForVendor]UUIDString];

更新

对于Swift 4.1,请使用

UIDevice.current.identifierForVendor?.uuidString

26

在Swift 3中获取设备ID

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

Swift 4:

let device_id = UIDevice.current.identifierForVendor!.uuidString

嗨..在我的应用程序中,我需要获取设备ID。苹果支持获取设备ID吗?我们可以提交应用到App Store吗? - Narasimha Nallamsetty
2
嗨@hardik,感谢您的回复。在测试设备时,我发现一个问题,每次卸载和重新安装应用程序后,我得到不同的UUID。一旦用户删除了我们的应用程序,我们就无法获得相同的ID。 - Narasimha Nallamsetty
嗨@hardik,有没有办法获得相同的UDID? - Jayesh Mardiya
@Jayesh,使用的是Swift还是Obj-c?如果是Swift,则此方法是正确的;否则,您可以获取以下内容:1)let UUID = NSUUID().UUIDString。 - Hardik Bar
2
Swift 3.0更新:let deviceID = UIDevice.current.identifierForVendor?.uuidString - pachun
在你的类声明之前确保导入“UIKit”,否则编译器将不知道UIDevice是什么。 - Derek

8

在Swift 3.x中获取设备ID

let deviceId = UIDevice.current.identifierForVendor?.uuidString

2

对于Swift 5

let deviceId = UIDevice.current.identifierForVendor?.uuidString

2
你可以使用这个库:https://github.com/fabiocaccamo/FCUUID 请查看持久性部分的表格,uuidForDevice将涵盖大部分需要的情况,并且它是UDID在旧版本iOS中的最佳替代品。
示例在Readme中是Objective-C的,但它也适用于Swift。我从Swift首次发布到现在(Swift 4.1)一直在使用它。

1
你需要使用UIDevice的identifierForVendor方法,如下所示:
let deviceId = UIDevice.current.identifierForVendor?.uuidString

但是,正如在这里详细解释的那样:https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor,每次重新安装应用程序(来自AppStore)都会更改ID。

一个简单的解决方案是使用Keychain存储一旦获取到的设备ID。如果Keychain项目不存在-这将是第一次安装的情况下* - 获取上述设备ID并将其存储在Keychain中。

*) 这是iOS,所以有一些注意事项:如果设备被重置或从备份中恢复,则Keychain项目可能会消失。因此,在这里没有100%的机会,但由于这种情况相当不太可能发生,所以这是您最好的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接