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

using a unique identifier of iPhone or iOS device

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

我可以使用iphone的guid吗?即[uidevice uniqueidentifier]是否合法?法律手段苹果会接受吗?

唯一标识iPhone或iOS设备的最佳属性是什么?如果没有,那么唯一标识设备的另一种方法是什么?

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


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

这是UDID的替代方案:

您可以创建一个uiapplication、uidevice或您喜欢的类似的类别(示例弧)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@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()是这个函数吗?

1
2
3
4
5
6
7
NSString* UUID () {

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

这将生成存储在nsuserdefault中的唯一标识符,以便在应用程序需要时重用-此标识符将是唯一的,与应用程序安装无关,但可以用于跟踪设备订阅的APN服务等的数量。

之后,您可以这样使用它:

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

没有我知道的guid,你是说[UIDevice uniqueIdentifier]?您可以使用它,但它在iOS 5中已被弃用,因此您最好想出一些其他方法来识别您的设备。


创建UUID:包含UUID的字符串。用ASCII表示的UUID的标准格式是用连字符标点的字符串,例如68753A44-4d6f-1226-9c60-0050e4c00067。

1
2
3
4
5
6
7
+ (NSString *)newUUID
{
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return (NSString *)string;
}


我不会提及保密协议下的内容,但是尝试一下这个解决方案,因为作者宣称"它根据设备的MAC地址和捆绑标识符生成一个唯一的标识符。"但是要注意的是,越狱设备可以更改它们的MAC地址afaik。


iOS 6为供应商提供了标识,它可以在同一供应商的多个应用程序之间使用,尽管它标识了一个设备,但您可以将它与iCloud的密钥值存储结合使用,例如,在设备之间标识用户。

Ole Begemann在他的博客上很好地解释了这一切:http://oleb.net/blog/2012/09/udid-apis-in-ios-6/