我使用Mac地址来识别iOS设备的唯一标识,但是从iOS7系统始终返回02:00:00:00:00:00的值。我为上述问题搜索了三个选项:
由于IOUnitFramework未经appstore批准,因此无法在我的应用程序中使用它。并且供应商标识和广告标识返回了很长的值。
有没有其他可能的方法来唯一识别ios设备?
提前致谢
在钥匙串中存储唯一标识符是另一种选择。但我们无法直接从我们的ios设备访问钥匙串。那么有没有其他方法可以对设备进行唯一识别?
答案 0 :(得分:3)
不,Apple不允许您再次识别设备。这与用户隐私有关。由于您是not identifying the user but a device。
另外,请勿使用ASIdentifierManager
识别设备,Apple现在拒绝使用此功能识别设备的应用程序。 ASIdentifierManager
仅用于广告目的。
剩下的唯一选择是[[UIDevice currentDevice] identifierForVendor]
或将自己的自定义创建ID保存到钥匙串。
保存到您自己的密钥链创建ID将确保如果用户删除该应用程序并在以后重新安装它,您仍然可以访问该值。
答案 1 :(得分:1)
您可以使用设备的UDID来唯一识别iPhone设备
从此方法创建UIID
- (NSString *)createUUID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
[[NSUserDefaults standardUserDefaults] setObject:(__bridge NSString *)string forKey:@"UUID"];
[[NSUSerDefaults standardUserDefaults] synchronize];
return (__bridge NSString *)string;
}
在需要设备UDID
的地方使用- (NSString*)UUID
{
return [[NSUserDefaults standardUserDefaults] ObjectForKey:@"UUID"];
}
答案 2 :(得分:1)
您可以查看this link和this link。它向您显示了识别iOS设备的多种方法。它们有点过时,但 identifierForVendor 和 advertisingIdentifier 仍然有效。
广告标识符主要用于广告目的,但Apple鼓励使用此标识符满足任何需求。
advertisingIdentifier是新AdSupport.framework的一部分。 ASIdentifierManager单例公开广告标识符和调用方法,返回NSUUID类的实例。
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
供应商的标识符也返回UUID字符串:
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
答案 3 :(得分:1)
有很多方法可以获得唯一标识符。您可以像某些人推荐的那样获得identifierForVendor,或者像mokujin推荐的那样创建一个UUID。即使有外部源库,如SecureUDID,OpenUDID ......但所有这些都有同样的问题,如果你删除你的应用程序并重新安装,你将获得不同的标识符。
我一直在一家大公司工作,他们使用MDM(Mobile Iron),这样你就可以获得真正的UDID。我认为你没有在你的项目中使用MDM,所以我建议你为我和其他用户使用这里推荐的选择之一并将其保存在你的钥匙串中。在这之后,你应该检查你的钥匙串中是否有这个值,如果没有,你应该得到它并保留它。
不要将其保存在您的NSUserDefaults中,因为如果您删除了应用,那么保留的信息将被删除。
要使用您的钥匙串,我建议您使用Apple KeychainItemWrapper
中的此类答案 4 :(得分:1)
但是,如果您出厂重置手机,此设备ID将会重置。
您将在此处获得详细说明unique device identification in iOS