如何唯一识别ios设备

在我目前的应用程序中,我必须让用户从不同的iOS设备login到他们的帐户。 目前我正在做一个令牌值的用户身份validation。 但为了支持多个设备login,我必须find另一种方式来做到这一点。

因此,我想保存设备uuid与令牌authentication+安全。 然后,我才知道我不能使用设备的uuid ,而是必须使用可能提供或不提供用户或设备信息的identifierForVendor

那么,有没有人可以提出更好和适当的方式来实现这个多个设备loginfunction为同一个用户帐户在IOS?

因为您已经知道使用设备的UUID是不允许的,但是您可以生成自己的UUID并将其存储在设备的UserDefaults中。

使用identifierForVendor并不是100%可靠的,因为它只能在iOS6及更高版本上运行,而且用户有权select不给予您,这是不好的select。

这里有一些代码我复制的互联网前不久,仍然使用它,直到今天,将尝试find来源,并更新我的答案了一下。 编辑: 来源

这将在UserDefaults中为您生成并存储一个UUID:

 - (NSString *)createUUID { CFUUIDRef theUUID = CFUUIDCreate(NULL); CFStringRef string = CFUUIDCreateString(NULL, theUUID); CFRelease(theUUID); [[NSUserDefaults standardUserDefaults] setObject:(__bridge NSString *)string forKey:@"UUID"]; [[NSUSerDefaults standardUserDefaults] synchronize]; return (__bridge NSString *)string; } 

而且每当你需要读取生成的UUID时:

 - (NSString*)UUID { return [[NSUserDefaults standardUserDefaults] ObjectForKey:@"UUID"]; } 

现在你可以select追加你自己的用户ID,这样你就可以知道UUID与哪个用户链接了。

这只是它应该如何工作的粗略草图

首先,苹果开发者指南禁止/阻止使用IDFA跟踪用户以显示有针对性的广告(和其他一些事情)。 准则明确允许开发人员使用IDFA来识别设备用于安全目的。 引用苹果的指导方针

advertisingTrackingEnabled

一个布尔值,指示用户是否有限制的广告跟踪。 (只读)

@ 属性 (非primefaces,只读,getter = isAdvertisingTrackingEnabled)BOOL advertTrackingEnabled

讨论

在执行任何广告跟踪之前检查此属性的值。 如果值为NO,则仅将广告标识符用于以下目的:频次上限,转换事件,估计唯一用户数量,安全和欺诈检测以及debugging。

您可以使用设备的IDFA用于多个设备login。 stream程会有点像这样:

  1. 用户使用设备Alogin到服务器,服务器发送一个存储在NSUserDefaults设备中的NSUserDefaults 。 该应用程序还将IDFA存储在NSUserDefaults的设备上

  2. 该令牌将用于创build一个包含IDFA的encryptionstring。 (使用令牌对IDFA进行encryption)每个请求中都会将encryption值与原始IDFA一起传递给服务器。

  3. 然后,服务器将使用IDFA和与其关联的令牌(服务器当然会存储对应于每个令牌的IDFA),以获得IDFA的encryption值,并将其与请求中接收到的encryption值进行匹配。 这样做的目的是确保没有人能侵入你的服务器,因为除了应用程序之外,任何人都不能看到令牌(你甚至可以以encryption的格式存储令牌以提高安全级别)。

  4. 无论何时向服务器发送请求, NSUserDefaults存储在设备上的IDFA的值将与当前的IDFA进行比较。

  5. 在不匹配的情况下,当前的IDFA将首先更新到服务器,然后在获得成功更新的确认之后,应用将用当前的NSUserDefaultsreplace存储在设备上的IDFA(然后业务像往常一样运行) 。

或者,您可以避免步骤3,4并在NSUserDefaults IDFA存储在设备上,但在这种情况下,用户将不得不在重置IDFA时重新login到服务器。

只要确认,令牌到IDFA的映射将是多对一的。

希望这有助于在任何不清楚/不满足用例的情况下发表评论。

您应该使用创buildUUID的标准方法。 苹果不希望你跟踪设备。

  To create a unique identifier specific to your app, you can call the CFUUIDCreate function to create a UUID, and write it to the defaults database using the NSUserDefaults class. (Source) 

如果你想使用一个库来代替滚动你自己,你应该使用这样的优秀库:

 CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); NSString *uuidString = (NSString *)CFUUIDCreateString(NULL,uuidRef); CFRelease(uuidRef);