可能重复:
iPhone 应用程序的唯一标识符
我们正在构建一个 IOS 应用程序,该应用程序旨在使用设备的序列号作为唯一标识符来识别设备是否获得许可。但据此,唯一标识符在 iOS 5 中已弃用。
是否有任何其他标识符可以用来唯一标识设备?
可能重复:
iPhone 应用程序的唯一标识符
我们正在构建一个 IOS 应用程序,该应用程序旨在使用设备的序列号作为唯一标识符来识别设备是否获得许可。但据此,唯一标识符在 iOS 5 中已弃用。
是否有任何其他标识符可以用来唯一标识设备?
这就是我所做的,这也是苹果的建议
不要使用 uniqueIdentifier 属性。要创建特定于您的应用程序的唯一标识符,您可以调用 CFUUIDCreate 函数来创建 UUID,并使用 NSUserDefaults 类将其写入默认数据库。
- (NSString *)getUUID {
NSString *string = [[NSUserDefaults standardUserDefaults] objectForKey:@"deviceUUID"];
if (string == nil) {
CFUUIDRef uuid;
CFStringRef uuidStr;
uuid = CFUUIDCreate(NULL);
uuidStr = CFUUIDCreateString(NULL, uuid);
string = [NSString stringWithFormat:@"%@", uuidStr];
[[NSUserDefaults standardUserDefaults] setObject:string forKey:@"deviceUUID"];
[[NSUserDefaults standardUserDefaults] synchronize];
CFRelease(uuidStr);
CFRelease(uuid);
}
return string;
}
我们倾向于使用网络上流行的 cookie 方法来解决这个问题,该方法适用相同的规则。基本上,您的应用程序应该检查您的 cookie 是否存在;如果它不存在,请向服务器索取一个并将其保存在本地。然后对于每个请求,发送标识符。为每个新设备生成一个足够不同的标识符是服务器的工作。
通过这种方式,您仍然可以跟踪单个用户,而不是通过对他们的了解超出您的需要。
我用这个:
//create a 30 digits random alphanumeric string
NSString *symbols = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
NSMutableString *randStr = [NSMutableString stringWithCapacity: 30];
for (int i=0; i<30; i++)
[randStr appendFormat: @"%C", [symbols characterAtIndex: rand()%[symbols length]]];
NSLog(@"Pseudo UUID = %@", randStr);
获得重复的可能性非常小。
您可以使用 UDID 发送服务器。它是每个设备的唯一 ID。如下所示并将其发送到服务器。
NSString *udid=[[UIDevice currentDevice]uniqueIdentifier];