对于内部应用程序,我们使用以下代码UIDevice+serialNumber来获取设备序列号。然而,在iOS 8中,注册表项"IOPlatformSerialNumber“似乎是空的。是否可以通过其他方式获得序列号?
发布于 2015-10-02 15:16:23
答案是:不。
目前围绕滥用.mobileconfig有一些浮动的解决方案,但由于它们的性质,它们增加了其他问题。
删除UUID是有原因的。看看有关隐私的新闻和2011年美国参议员对苹果的召唤,以了解为什么必须改变这一点。http://arstechnica.com/apple/2011/04/apple-google-asked-to-join-judiciary-hearing-on-mobile-device-privacy/
滥用底层的三月端口来获取设备序列号作为UUID的替换不是解决方案。现在滥用移动配置也是如此,猜猜它会工作多久。
您有很多像样的方法来处理以前使用设备标识的任何情况。特别是在企业环境中,如果您使用加密技术,并且MDM绝对没有必要跟踪这样的设备。
发布于 2016-09-13 23:48:50
在iOS中,不再能够直接检索设备序列号。
然而,如果这仅仅是一个内部企业应用程序,我工作的公司将实现以下内容:
在设备配置过程中,复制序列号并将设备名称设置为序列号。
然后使用苹果的UIDevice API检索设备名称。
发布于 2015-10-02 15:41:15
正如赫尔格如上所述,由于安全/隐私原因,iOS 6+中不再提供UDID。请改用identifierForVendor或advertisingIdentifier请检查UDID Replacement APIs
对于iOS 8+
+ (NSString *)deviceUUID
{
if([[NSUserDefaults standardUserDefaults] objectForKey:[[NSBundle mainBundle] bundleIdentifier]])
return [[NSUserDefaults standardUserDefaults] objectForKey:[[NSBundle mainBundle] bundleIdentifier]];
@autoreleasepool {
CFUUIDRef uuidReference = CFUUIDCreate(nil);
CFStringRef stringReference = CFUUIDCreateString(nil, uuidReference);
NSString *uuidString = (__bridge NSString *)(stringReference);
[[NSUserDefaults standardUserDefaults] setObject:uuidString forKey:[[NSBundle mainBundle] bundleIdentifier]];
[[NSUserDefaults standardUserDefaults] synchronize];
CFRelease(uuidReference);
CFRelease(stringReference);
return uuidString;
}
}您可以在那之后使用identifierForVendor,将它们存储到密钥链中,以便以后使用。因为重装app时,keychain的值不会发生变化。
我过去常常使用Open UDID来实现这一目的。不知道它还能不能用。
https://stackoverflow.com/questions/25926251
复制相似问题