1

我正在尝试修补Apple 发现的这个安全漏洞。只是,他们提供的示例代码(VerificationController)使用了这一行:

[UIDevice currentDevice].uniqueIdentifier

已被弃用,并且应用商店已拒绝应用。知道这是否还可以吗?或者这里发生了什么?

4

4 回答 4

4

Apple 更新了示例代码,删除了使用 UDID 的行。

iOS 上的应用内购买收据验证

于 2013-04-29T00:49:11.273 回答
1

UDID 与 UUID

据我了解,Apple 不希望开发人员再访问 UDID(唯一设备标识符),因为它不在应用程序的沙箱中。

想一想用户获得新的 iOS 设备(具有不同的 UDID)的情况。仅仅因为有新设备并不一定意味着有新用户。此外,如果某人获得了其他人以前使用过的设备,我们不想假设因为我们拥有相同的设备,所以必须是同一个用户使用它。

Apple 建议为您的应用程序使用 UUID(通用唯一标识符)。Apple 之前允许您使用 UDID 的唯一原因是因为他们还没有实现 UUID 或者没有考虑到上述情况(据我所知)。UUID 是为您要跟踪的对象(例如用户)生成的。

基本上,Apple 的心态是您应该跟踪用户(或其他实例),而不是设备。


生成 UUID

要生成 UUID,请尝试将以下内容作为类方法包含在内:

+ (NSString *)GetUUID
{
  CFUUIDRef uuidReference = CFUUIDCreate(kCFAllocatorDefault);
  NSString *theUUID = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidReference) autorelease];
  CFRelease(uuidReference);
  return theUUID;
}

根据我的经验,我在方法中调用了这个方法,init并将结果存储NSString为刚刚创建的实例的属性。

于 2012-07-24T16:07:19.863 回答
0

您从哪里听说应用程序因为使用它而被拒绝?也许他们恶意使用它,但它是一个公共 API。 另外,请查看您链接到的页面上的注释。

注意:此清单使用符号 kSecTrustInfoExtendedValidationKey 和 SecTrustCopyInfo,它们不是公共 API。您的应用可以将它们用于此特定目的。

如果他们甚至愿意让您为此目的使用私有 API,我怀疑他们会关心公共 API。

于 2012-07-24T15:47:48.690 回答
0

Apple 对 UDID 的问题始终是他们认为它是私人信息,因此他们拒绝将其发送到例如服务器的应用程序,而无需事先征得许可。如果您只是在本地使用它,我认为您不会遇到麻烦。

于 2012-07-24T16:10:19.170 回答