适用于iOS 7.0及以上版本的iOS设备的唯一标识

寻找你的帮助

获取设备标识符时遇到问题。 其实我正在使用一个UIDevice + IdentifierAddition.h,NSString + MD5Addition.h类来获得标识符,但它返回相同的标识符为我所有的设备,iPhone 4s(iOS 7.1)和iPhone 5(iOS 7.1.1)。

任何人都可以解决这个问题。 因为我想要一个独特的设备特定的东西。 它是我的应用程序要求

重要提示:我想在应用程序商店提交这个应用程序,所以请回答一定要按照指导方针

从iOS 7开始,不再有可能获得任何唯一的设备标识符。

您的select是:

  • 创build您自己的唯一ID并将其保存在钥匙串中 。
  • 使用供应商ID ,如果同一供应商的所有应用都从设备中删除,则供应商ID将被重置。

在目标c

NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 

在Swift中

  var uniqueId=UIDevice.currentDevice().identifierForVendor.UUIDString as String println("Your device identifires =>\(uniqueId)") 

现在,在iOS 11.0以上的版本中 ,Apple已经推出了一个名为DeviceCheck API的新API,开发人员可以通过它来唯一标识一个设备。

正如文件中所提到的 :

使用DeviceCheck API与服务器到服务器API结合使用,您可以设置和查询每个设备的两位数据,同时保持用户的隐私。 您可以使用这些数据来识别已经利用您提供的促销优惠的设备,或者标记您确定为欺诈的设备。 DeviceCheck API还允许您validation您收到的令牌是否来自包含您的应用的真实Apple设备。

另外,从24分钟开始查看以下WWDC17video: https : //developer.apple.com/videos/play/wwdc2017/702/

不幸的是,当你卸载你的应用程序时,identifierForVendor会改变,以保证它不会改变,保存在钥匙串中

我用荚'SSKeychain'主页: https : //github.com/soffes/sskeychain

这是代码

  + (NSString *)getDeviceId { NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"MY_KEY"]; if (strApplicationUUID == nil) { strApplicationUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; [SSKeychain setPassword:strApplicationUUID forService:appName account:@"MY_KEY"]; } return strApplicationUUID; } 

[UIDevice uniqueIdentifier]; 已在ios 5及更高版本中弃用。

您可以使用此NSString * udid = [[UIDevice currentDevice] uniqueIdentifier]获取供应商的标识符;

并将其存储在钥匙串中,稍后再使用。

你也可以检查1)NSUUID 2)CFUUID

你会得到详细的说明在这里独特的设备识别在IOS

如果你只想识别一个设备一次,即估计唯一用户的数量,那么我build议使用ASIdentifierManager的“advertisingIdentifier”。

苹果文件