【发布时间】:2012-08-13 08:15:25
【问题描述】:
【问题讨论】:
-
和this
标签: iphone objective-c ios
【问题讨论】:
标签: iphone objective-c ios
这是我做的,也是苹果的建议
不要使用 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];
【讨论】:
CFUUID API 创建您自己的 UUID。