使用 iPhone 或 iOS 设备的唯一标识符

4

我正在制作一款订单预订应用程序。我需要从iPhone/iOS设备向服务器发送一个唯一的密钥。

我能使用iPhone的GUID吗?即[UIDevice uniqueIdentifier],这是合法的吗?合法意味着苹果会接受吗?

什么是用于唯一标识iPhone或iOS设备的最佳属性?如果不行,还有什么其他方法可以唯一地识别设备。

实际上,我需要由应用程序生成的预订参考号。必须是唯一的。


你从哪里获取这个 GUID?是哪个 API? - p.campbell
我不完全确定你所说的“是否合法”是什么意思。 - NotMe
1
我建议您识别用户而不是设备。用户可以更改设备。;-) - Sandro Meier
我需要应用程序生成的预订参考号。必须是唯一的。那么我该怎么做呢? - Mann
5个回答

5

苹果公司宣布,从2013年5月开始将拒绝使用UDID跟踪用户行为的应用程序。

以下是UDID的替代方案:

您可以像下面这样创建一个UIApplication、UIDevice或其他您喜欢的类别(ARC示例):

@interface UIApplication (utilities)
- (NSString*)getUUID;
@end

@implementation UIApplication (utilities)

- (NSString*)getUUID {

    NSUserDefaults *standardUserDefault = [NSUserDefaults standardUserDefaults];

    static NSString *uuid = nil;

    // try to get the NSUserDefault identifier if exist
    if (uuid == nil) {

        uuid = [standardUserDefault objectForKey:@"UniversalUniqueIdentifier"];
    }

    // if there is not NSUserDefault identifier generate one and store it
    if (uuid == nil) {

        uuid = UUID ();
        [standardUserDefault setObject:uuid forKey:@"UniversalUniqueIdentifier"];
        [standardUserDefault synchronize];
    }

    return uuid;
}

@end

UUID() 是一个函数,用于生成唯一的标识符。

NSString* UUID () {

    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
    CFRelease(uuidRef);
    return (__bridge NSString *)uuidStringRef;
}

这将生成一个唯一标识符并存储在NSUserDefault中,以便在应用程序需要时重复使用 - 此标识符将与应用程序安装相关联而不是设备,但例如可以用于跟踪订阅APN服务的设备数量等...

之后,您可以按以下方式使用它:

    NSString *uuid = [[UIApplication sharedApplication] getUUID];

4

据我所知,没有GUID,你是指[UIDevice uniqueIdentifier]吗?你可以使用它,但它在iOS 5中将被弃用,因此最好想出其他识别设备的方法。


是的,使用那个ID进行任何操作都不是一个好主意。坦白地说,我认为苹果公司根本不应该将其包含在内。 - NotMe
你绝对不应该将设备ID用作图书参考编号!相反,应该生成一个GUID,你可以在stackoverflow上搜索相关内容。 - Mike Weller

3
创建UUID:一个包含UUID的字符串。在ASCII中表示UUID的标准格式是由连字符分隔的字符串,例如68753A44-4D6F-1226-9C60-0050E4C00067。
+ (NSString *)newUUID
{
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return (NSString *)string;
}

2
这可以通过 [UIDevice uniqueIdentifier] 生成。这将是唯一的,但苹果不允许使用设备ID。 - Mann

1

我不会涉及NDA下的内容,但可以尝试使用此solution,因为作者宣传称“它基于设备的MAC地址与包标识符生成唯一标识符。”然而,请注意越狱设备可以更改其MAC地址,据我所知。


0
随着iOS 6的到来,引入了identifierForVendor,它可以在同一供应商的多个应用程序中使用,尽管它标识了一个设备,但例如可以与iCloud的键值存储结合使用以识别用户跨设备。Ole Begemann在他的博客上很好地解释了这一切: http://oleb.net/blog/2012/09/udid-apis-in-ios-6/

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