2011-09-09 33 views
4

我正在订购预订应用程序。我需要从iPhone/iOS设备发送一个唯一的密钥到服务器。使用iPhone或iOS设备的唯一标识

我可以使用iPhone的GUID吗?即[UIDevice uniqueIdentifier]合法吗?法律手段将苹果接受?

用来唯一标识iPhone或iOS设备的最佳属性是什么? 如果不是,那么唯一识别设备的另一种方式是什么。

其实我需要预订参考号。由应用生成。必须是唯一的。

+0

你从哪里得到这个GUID?什么API? –

+0

我不完全确定你的意思是“它是否合法”。 – NotMe

+1

我建议你识别用户而不是设备。用户可以更改设备。 ;-) –

回答

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

4

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

+0

是的,使用这个ID做任何事情都是一个坏主意。坦率地说,我不认为苹果应该包含它。 – NotMe

+0

还有什么意思? – Mann

+0

我需要预订参考号。必须是唯一的 – Mann

1

我指的不是什么保密协议,但给一个尝试这种solution,因为笔者通告“它根据与束标识符组合设备的MAC地址的唯一标识。”但是请注意,越狱设备可以更改其MAC地址AFAIK。

+0

Apple是否接受使用此技术的应用程序? – devios1

0

与iOS 6来到identifierForVendor,可以跨多个应用从相同的供应商使用,并且虽然它识别装置可以结合的iCloud的键值存储使用它例如,以确定在不同设备的用户。

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

5

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

这是对替代UDID:

您可以创建UIApplication的,的UIDevice的类别或您prefere像这样(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];