我曾在服务器端使用MAC地址来标识iOS设备。当我在iOS 7上运行我的应用程序时,无法检索到正确的MAC地址。作为替代,我使用了
NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];
属性。但是这个值在每次安装应用程序后也会更改。现在我想在服务器端检测特定的设备?我该如何获取iOS设备的唯一标识符?
我曾在服务器端使用MAC地址来标识iOS设备。当我在iOS 7上运行我的应用程序时,无法检索到正确的MAC地址。作为替代,我使用了
NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];
属性。但是这个值在每次安装应用程序后也会更改。现在我想在服务器端检测特定的设备?我该如何获取iOS设备的唯一标识符?
您无法再获得每个设备的唯一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. 苹果建议只有广告框架开发公司才能使用此代码,而非应用程序开发人员。如果您在非广告相关目的中使用此代码,则准备好被拒绝。
获取设备ID的最佳方法是使用identifierForVendor
UIDevice *device = [UIDevice currentDevice];
NSString *currentDeviceId = [[device identifierForVendor]UUIDString];
更新
对于Swift 4.1,请使用
UIDevice.current.identifierForVendor?.uuidString
在Swift 3中获取设备ID
let device_id = UIDevice.currentDevice().identifierForVendor?.UUIDString
Swift 4:
let device_id = UIDevice.current.identifierForVendor!.uuidString
let deviceID = UIDevice.current.identifierForVendor?.uuidString
- pachun在Swift 3.x中获取设备ID
let deviceId = UIDevice.current.identifierForVendor?.uuidString
对于Swift 5
let deviceId = UIDevice.current.identifierForVendor?.uuidString
uuidForDevice
将涵盖大部分需要的情况,并且它是UDID在旧版本iOS中的最佳替代品。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%的机会,但由于这种情况相当不太可能发生,所以这是您最好的选择。