从IOS设备向Web服务发送唯一标识符

时间:2012-08-13 08:15:26

标签: iphone objective-c ios

  

可能重复:
  Unique identifier for an iPhone app

我们正在构建一个IOS应用程序,旨在将设备的序列号用作唯一标识符,以识别设备是否获得许可。但根据this,iOS 5中不推荐使用唯一标识符。

我们可以使用任何其他标识符来唯一标识设备吗?

4 个答案:

答案 0 :(得分:5)

这就是我所做的,这也是Apple的建议

  

不要使用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;
}

答案 1 :(得分:1)

我们倾向于使用在网络上普及的cookie方法来解决这个问题,其中适用相同的规则。基本上,您的应用应该检查您的cookie是否存在;如果它不存在,请向服务器询问一个并在本地保留它。然后对每个请求发送标识符。服务器的工作是为每个新设备生成足够不同的标识符。

通过这种方式,您仍然可以跟踪个人用户,而不是通过了解他们所需的更多信息。

答案 2 :(得分:-2)

我用这个:

//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);

获得重复的可能性非常小。

答案 3 :(得分:-3)

您可以使用UDID发送服务器。它是每个设备的唯一ID。如下所示,并将其发送到服务器。

NSString *udid=[[UIDevice currentDevice]uniqueIdentifier];