将iPhone应用程序上的投票限制在特定的iPhone设备上

将iPhone应用程序上的投票限制在特定的iPhone设备上,iphone,udid,Iphone,Udid,我正在开发一个客户端iPhone应用程序,它允许用户对各种服务进行评分。没有注册或登录 要求是用户不能重复对服务进行评级(尽管可以更改其评级)。由于目前的情况,该应用程序可以被删除、重新安装,用户可以再次投票 我们考虑过使用设备id,但是一位同事提到苹果公司建议不要这样做。如果我理解正确的话,手机被退回商店,重新发行,然后新用户下载了相同的应用程序。对我来说,这似乎是一个相当边缘的案例,但我猜可能发生在企业内部 有没有一种聪明的方法将投票限制在特定的设备上?也许是用钥匙链 非常感谢任何指针。注意

我正在开发一个客户端iPhone应用程序,它允许用户对各种服务进行评分。没有注册或登录

要求是用户不能重复对服务进行评级(尽管可以更改其评级)。由于目前的情况,该应用程序可以被删除、重新安装,用户可以再次投票

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

有没有一种聪明的方法将投票限制在特定的设备上?也许是用钥匙链


非常感谢任何指针。

注意UDID和UUID之间的区别非常重要

UDID“唯一设备id”是特定于硬件的。对于特定的设备,它从不改变。出于这个原因,它已经成为一个隐私问题,苹果正在阻止试图使用它的应用程序。结果,苹果生成了一个可选择退出的“设备id”散列,特别是用于广告用途。这个新的ID散列称为IFA,在iOS 6.0+中可用

UUID“通用唯一id”不是特定于硬件的。它是用于标识设备的哈希;但不是一个绝对值。例如,PhoneGap基于设备属性生成UUID;这是执行device.uuid时得到的结果。如果删除应用并重新安装,您将获得一个新的id哈希。UUID没有被苹果阻止

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

这是我们使用的代码。如果IFA不可用,请获取OpenUDID。您必须安装OpenUDID,请在此处阅读更多信息


我也有类似的需求。如果一个被黑客攻击的应用每次都向我发送生成的UUID而不是原始UUID,会发生什么?有一种方法可以从安装的原始应用程序中识别UUID?当用户将操作系统从5.0更新到6.0时发生了什么?首次从OpenUDID获取UDID,然后在ios 6和更高版本中使用identifierForVendor。
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];
}