【问题标题】:Send a unique Identifier from IOS Device to a webservice [duplicate]将唯一标识符从 IOS 设备发送到 Web 服务 [重复]
【发布时间】:2012-08-13 08:15:25
【问题描述】:

可能重复:
Unique identifier for an iPhone app

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

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

【问题讨论】:

标签: iphone objective-c ios


【解决方案1】:

这是我做的,也是苹果的建议

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

【讨论】:

  • 这就是我要找的,谢谢..
  • 我发现了一个问题,比如如果用户卸载应用并重新安装会怎样。下一次,应用程序正在创建一个未经过身份验证的新 UUID,该 UUID 存储在服务器端。如何解决这个问题。
【解决方案2】:

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

通过这种方式,您仍然可以跟踪单个用户,而不是通过对他们的了解超出您的需要。

【讨论】:

  • 为什么不为应用程序创建一个唯一的 id 并将其用作用户 id? CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
  • 我想如果你愿意相信它是真正全球独一无二的,它在功能上是一样的。但是,我宁愿让服务器决定,这样它就可以保证不会与我的应用程序的其他用户发生冲突(可能包括 GUID 中的自动递增组件)
  • 它是全球唯一的,或者至少 2 相似的概率太低了。检查代码。它不仅以高精度使用时间,而且还有其他领域的构建方式。只是说因为这更容易实现并且使用更少的资源。唯一的缺点是,如果用户删除了应用程序,那么这个 id 就会丢失。因此,如果发生这种情况,您必须将其发回给用户。
【解决方案3】:

我用这个:

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

得到重复的概率非常小。

【讨论】:

  • ...并且仍然比 CFUUID 等适当的 UUID 实现大几个数量级。不要重新发明轮子。
【解决方案4】:

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

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

【讨论】:

  • 该方法已弃用,不应在新应用中使用。考虑使用CFUUID API 创建您自己的 UUID。
  • 但它仍然适用于 IOS 4.0。并且没有提到用户使用 IOS 4 或 5
猜你喜欢
  • 2013-10-01
  • 2015-08-31
  • 2018-06-30
  • 2014-04-05
  • 1970-01-01
  • 2013-10-07
  • 2019-04-25
  • 1970-01-01
  • 2013-06-05
相关资源
最近更新 更多