UDID 是否有替代方案。我的应用程序不会进入 App Store,因为我使用的是企业发行版。所以有没有替代品。我绑定了广告标识符、开放 udid、UIID 和安全 UDID。但是如果手机被重置,那么我将获得一个新的 UDID。任何帮助,将不胜感激。
7 回答
对于 6.0 以上的 iOS,您可以使用identifierForVendor
Or CFUUIDRef
。
-(NSString*)uniqID
{
NSString* uniqueIdentifier = nil;
if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) {
// iOS 6+
uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
// before iOS 6, so just generate an identifier and store it
uniqueIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identifierForVendor"];
if( !uniqueIdentifier ) {
CFUUIDRef uuid = CFUUIDCreate(NULL);
uniqueIdentifier = ( NSString*)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
[[NSUserDefaults standardUserDefaults] setObject:uniqueIdentifier forKey:@"identifierForVendor"];
}
}
return uniqueIdentifier;
}//
更新
作为Leon Lucardie
评论,他是对的
identifierForVendor 将在应用程序卸载/重新安装后更改。请参阅此处 当应用程序(或来自同一供应商的另一个应用程序)安装在 iOS 设备上时,此属性中的值保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值会发生变化。
在尝试了所有可能的替代品之后。广告标识符是最好的方法。即使在我测试时重置手机后它仍然保持不变。如果用户在设置中将其关闭,那么我们会得到一个空值。除了这个挂钩,这是迄今为止最好的替代品。如果我找到任何其他更好的替代品,我会更新。
您必须创建供应商 ID,然后使用钥匙串保存它,并在使用日期时间重置手机后将其取回
简单,只需使用以下代码:
-(NSString *)getUID{
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
// This is will run if it is iOS6 and above
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
// This is will run before iOS6 and you can use openUDID or other
// method to generate an identifier
return [OpenUDID value];
}
}
正如您所理解的,如果您计划支持 iOS 5,那么您应该使用 OpenUDID(Apple 甚至在 iOS 5 上也限制读取 UDID)。在这里有一些答案,您只会被Apple拒绝(我的代码已在我的几个应用程序中获得批准)。
请注意,如果您的用户删除应用程序(或所有供应商应用程序,如果有多个)并重新安装,则 identifierForVendor 会发生变化。
我使用 APNS 令牌和 vendorId 的组合。两者都被检查以验证手机身份,当其中一个发生变化时,我会在手机和服务器中相应地更新它们。
当应用程序被卸载和/或重置并存储几个月时,两者都有可能发生变化,那么这两个值都会发生变化。
这将导致下次手机安装该应用程序时,它将被识别为新应用程序。
除此之外,我在服务器中运行一个进程,将任何两个月未连接到服务器的设备标记为已删除。
在这种情况下,需要进行用户身份验证,并将手机再次添加到客户的设备池中。
我只有一个应用程序,但一旦我有了第二个应用程序,我可能会包含 adsId。
Ole 的这些博客文章应该会有所帮助:
iOS 5: http: //oleb.net/blog/2011/09/how-to-replace-the-udid/ iOS 6+: http: //oleb.net/blog/2012/09/udid-apis-in -ios-6/
您可以在 ios 6+ 之后使用 Swift 2.2 版本。
var uniqueIdentifier: NSString!
uniqueIdentifier = UIDevice.currentDevice().identifierForVendor?.UUIDString