我正在开发一个客户端iPhone应用程序,它允许用户评价各种服务。没有注册或登录。
要求是用户不能重复评价服务(尽管可以改变他们的评级)。目前的情况是,应用程序可以删除,重新安装,用户可以再次投票。
我们考虑使用设备ID,但是一位同事提到苹果建议不要这样做。如果我理解正确,以防手机返回存储,重新发布,然后新用户下载了相同的应用程序。对我来说似乎是一个非常优秀的案例,但我想可能会发生在企业内部。
是否存在限制投票到特定设备的智能方法?也许使用钥匙串?
任何指针都非常感激。
答案 0 :(得分:1)
重要的是要注意UDID和UUID之间的区别。
UDID“唯一设备ID”是特定于硬件的。它永远不会改变特定设备。出于这个原因,它已成为一个隐私问题,Apple正在阻止试图使用它的应用程序。因此,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];
}