如何从iOS应用获取设备ID?

15

我怎样才能在iOS应用程序中获取用户设备的唯一标识符?

6个回答

51

使用这个

    UIDevice *device = [UIDevice currentDevice];
    NSString *uniqueIdentifier = [device uniqueIdentifier];

更新

由于苹果公司已经废弃了唯一标识符,所以现在以下代码(来自Melvin Sovereign的评论)是合适的:

NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

那么现在你应该使用什么?还是说现在根本无法识别唯一的设备了? - CWSpear
9
新的 iOS5+ 方法:[[[UIDevice currentDevice] identifierForVendor] UUIDString] - Melvin Sovereign
2
我认为每次获取identifierForVendor时,您将获得不同的值。 - Iqbal Khan
2
每次重新安装应用程序时,您将获得新的UUID。 - Garnik
生成的 UUIDString 应该被缓存吗?还是获取它的成本很低廉? - 最白目
这个设备 ID 可以改变吗? - Premal Khetani

6
有趣的是,自iOS 5以来,苹果已经弃用了uniqueIdentifier。以下是相关的TechCrunch文章: http://techcrunch.com/2011/08/19/apple-ios-5-phasing-out-udid/ 苹果建议您不再唯一地标识设备,而是标识用户。在大多数情况下,这是一个很好的建议,但仍然有一些情况需要全局唯一的设备ID。这些场景在广告中非常常见。因此,我编写了一个极其简单的库,完全复制了现有的行为。
在毫不掩饰地自我推销的同时,我将在此处链接它,希望有人发现它有用。同时,我欢迎所有反馈和批评: http://www.binpress.com/app/myid/591

3

1
有趣的是,自iOS 5以来,苹果已经弃用了uniqueIdentifier。以下是相关的TechCrunch文章: http://techcrunch.com/2011/08/19/apple-ios-5-phasing-out-udid/ 苹果建议您不再唯一标识设备,而是标识用户。在大多数情况下,这是很好的建议,但有些情况需要一个全局唯一的设备ID。这些情况在广告中非常普遍。 - Sam Stewart
在 iOS 7 及以上版本中使用:NSString *identifer = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; - AmyNguyen

2
在 Swift 中
var uniqueId=UIDevice.currentDevice().identifierForVendor.UUIDString as String
println("Your device identifires =>\(uniqueId)")

2
您可以使用NSUUID *identifierForVendor
[[UIDevice currentDevice] identifierForVendor]

0

我知道这是一个相当陈旧的问题,但这是我解决问题的方式。如果创建“唯一设备令牌”的线程永远不停止,则可能会失败,但对我而言它有效。

-(NSString*)getUniqueDeviceToken
{
    __block NSString* UDTToReturn = @"UDTCouldNotBeCreatedSuccessfully,PlatformNotSupported,Simulator,iOSVer<11";
    dispatch_semaphore_t semaphoretowaitforudtcreation = dispatch_semaphore_create(0);
    if ([DCDevice.currentDevice isSupported])
    {
        [DCDevice.currentDevice generateTokenWithCompletionHandler:^(NSData * _Nullable token, NSError * _Nullable error)
        {
            if (error)
            {
                UDTToReturn = error.description;
                dispatch_semaphore_signal(semaphoretowaitforudtcreation);
            }
        
            else
            {
                UDTToReturn = [token base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
                dispatch_semaphore_signal(semaphoretowaitforudtcreation);
            }
        }];
    }
dispatch_semaphore_wait(semaphoretowaitforudtcreation, DISPATCH_TIME_FOREVER);
return UDTToReturn;
}

这段代码在做什么?它是获取设备的唯一标识符还是生成UUID?另外,是否有Swift版本? - Yonathan Goriachnick
我创建/使用此代码来创建“唯一设备令牌”,并将其保存到我的iOS设备(iPhone、iPad)的本地文件中。自201?年以来,苹果不允许开发人员使用“uuid”。某种程度上可以说它创建了一个特定于设备的数字,但是当您重新安装设备上的应用程序时,它可能会更改。该代码仅存在于obj-c代码中,但也可以轻松地在swift中使用。整个“识别设备”主题并不容易理解。如果您想要某种类型的“使用信息”来自您的应用程序,则必须注册到“APNs”。 - user9742813

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