50

我使用 mac 地址来识别服务器端的 iOS 设备。当使用 iOS 7 运行我的应用程序时,无法检索正确的 mac 地址。或者我用过

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

财产。但是在每次新安装应用程序后,这个值也会发生变化。现在我想在服务器端检测特定设备?如何在 iOS 中为每个设备获取一些唯一 ID?

4

6 回答 6

62

您无法再获得每台设备的唯一 ID。identifierForVendor是你将得到的最好的。Apple 系统性地禁止识别特定设备,以便营销人员无法传递用户的 ID。

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

let deviceId = UIDevice.current.identifierForVendor?.uuidString

更新

如果您想要一个通用 ID,那么您可以选择使用advertisingIdentifier. 但是,如果用户在其设备设置中限制了广告跟踪,则此值将简单地返回全零。

import AdSupport

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

注意Apple 建议仅由构建广告框架的公司使用此代码,而不是应用程序开发人员本身。如果您在代码中将其用于与广告无关的目的,请准备好拒绝您的应用。

于 2013-10-16T11:39:06.423 回答
47

获取设备 id 的最佳方式是identifierForVendor

UIDevice *device = [UIDevice currentDevice];

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

更新

对于 Swift 4.1 使用

UIDevice.current.identifierForVendor?.uuidString
于 2013-10-16T13:11:12.667 回答
26

获取设备 ID

斯威夫特 3

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

斯威夫特 4:

let device_id = UIDevice.current.identifierForVendor!.uuidString
于 2015-08-24T11:39:31.307 回答
8

在 Swift 3.x 中获取设备 ID

let deviceId = UIDevice.current.identifierForVendor?.uuidString
于 2017-03-30T07:57:18.977 回答
2

对于斯威夫特 5

let deviceId = UIDevice.current.identifierForVendor?.uuidString
于 2020-04-01T10:29:39.097 回答
2

你可以使用这个库:https ://github.com/fabiocaccamo/FCUUID

请查看持久性部分的表格。uuidForDevice将涵盖最需要的情况,它是旧版本 iOS 的 udid 的最佳替代品。

中的示例在ReadmeObjective-C 中,但它也适用于 Swift。从 Swift 第一次发布到现在(Swift 4.1),我一直在使用它。

于 2018-08-18T12:08:40.317 回答