是否有UDID的替代方案。我的应用程序不会进入App Store,因为我正在使用企业分发。那么有没有替代品。我绑定了广告标识符,打开udid,UIID和安全UDID。但如果手机重置,那么我将获得一个新的UDID。任何帮助,将不胜感激。
答案 0 :(得分:16)
对于6.0以上的iOS,您可以使用identifierForVendor
或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设备上安装app(或来自同一供应商的其他应用程序)时,此属性中的值保持不变。当用户从设备中删除所有供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改。
答案 1 :(得分:3)
您必须创建供应商ID,然后使用钥匙串保存,并在使用日期时间重置手机后将其恢复
答案 2 :(得分:3)
尝试所有可能的替换后。广告标识符是最好的方式。在我测试时,即使手机重置后它仍然保持不变。如果用户在设置中将其关闭,则我们获得空值。除了这个故障,这是目前为止最好的替代品。如果我找到任何其他更好的替代品,将更新。
答案 3 :(得分:2)
简单,只需使用此代码:
-(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会更改。
答案 4 :(得分:1)
我使用组合APNS令牌和vendorId。检查两者以验证手机身份,并在其中一个更改时在手机和服务器中相应地更新它们。
当应用程序被卸载和/或重置并存储几个月时,两者都有可能发生变化,这两个值都会发生变化。
这将导致下次手机安装应用程序时,它将被识别为新的。
除此之外,我在服务器中运行一个进程,将任何未连接到服务器的设备标记为已删除两个月。
在这种情况下,需要用户身份验证,并再次将手机添加到客户的设备池中。
我只有一个应用程序,但是一旦我有第二个应用程序,我可能会包含advertisingId。
答案 5 :(得分:0)
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/
答案 6 :(得分:0)
您可以在使用Swift 2.2版本的ios 6+之后使用。
var uniqueIdentifier: NSString!
uniqueIdentifier = UIDevice.currentDevice().identifierForVendor?.UUIDString