2010-12-08 48 views
2

我正在一个客户端iPhone应用程序,它允许用户评价各种服务。没有注册或登录。限制对iPhone应用程序投票到一个特定的iPhone设备

要求是用户不能重复评定服务(虽然可以改变他们的评价)。目前,该应用程序可能会被删除,重新安装,用户可以再次投票。

我们考虑过使用设备ID,但是一位同事提到苹果公司建议不要这样做。如果我的理解正确,以防万一电话被退回到商店,重新发布,然后新用户下载了相同的应用程序。对我来说,这似乎是一个很好的案例,但我猜想可能发生在企业内部。

是否有一种智能的方式来限制对特定设备的投票?也许使用钥匙串?

任何指针非常赞赏。

回答

1

重要的是要注意UDID和UUID之间的区别。

UDID“唯一设备ID”是硬件特定的。它永远不会改变一个特定的设备。出于这个原因,它已成为一个隐私问题,苹果正在阻止试图使用它的应用程序。因此,Apple已经生成了一个选择退出的“设备ID”哈希,特别是对于广告使用。这个新的ID散列称为IFA,可在iOS 6.0或更高版本中使用。

UUID“通用唯一ID”不是硬件特定的。它是用来识别设备的散列。但不是绝对的价值。例如,PhoneGap根据设备属性生成一个UUID;这是您在执行device.uuid时所得到的结果。如果你删除了应用程序并重新安装,你会得到一个新的ID散列。 UUID没有被Apple阻止。

我认为您的案例中最好的解决方案是使用IFA,OpenUDID作为iOS < 6.0的备份。

这是我们使用的代码。如果IFA不可用,请获取OpenUDID。你必须安装OpenUDID,在这里阅读更多关于https://github.com/ylechelle/OpenUDID

NSString* uuid = nil; 
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) { 
    // IOS 6 new Unique Identifier implementation, IFA 
    uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // Before iOS6 (or if IFA disabled) you shoud use a custom implementation for uuid 
    // Here I use OpenUDID (you have to import it into your project) 
    // https://github.com/ylechelle/OpenUDID 
    NSString* openUDID = [OpenUDID value]; 
    uuid = [OpenUDID value]; 
} 
+0

我有类似的需求。如果一个被黑客攻击的应用程序每次发送一个生成的UUID而不是原始的UUID,会发生什么?有从安装的原始应用程序确定UUID的方法吗? – 2013-05-29 17:15:51