我正在制作一款订单预订应用程序。我需要从iPhone/iOS设备向服务器发送一个唯一的密钥。
我能使用iPhone的GUID吗?即[UIDevice uniqueIdentifier],这是合法的吗?合法意味着苹果会接受吗?
什么是用于唯一标识iPhone或iOS设备的最佳属性?如果不行,还有什么其他方法可以唯一地识别设备。
实际上,我需要由应用程序生成的预订参考号。必须是唯一的。
我正在制作一款订单预订应用程序。我需要从iPhone/iOS设备向服务器发送一个唯一的密钥。
我能使用iPhone的GUID吗?即[UIDevice uniqueIdentifier],这是合法的吗?合法意味着苹果会接受吗?
什么是用于唯一标识iPhone或iOS设备的最佳属性?如果不行,还有什么其他方法可以唯一地识别设备。
实际上,我需要由应用程序生成的预订参考号。必须是唯一的。
苹果公司宣布,从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];
据我所知,没有GUID,你是指[UIDevice uniqueIdentifier]
吗?你可以使用它,但它在iOS 5中将被弃用,因此最好想出其他识别设备的方法。
+ (NSString *)newUUID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return (NSString *)string;
}