获取iOS 8设备的序列号
对于内部应用程序,我们使用以下代码UIDevice+serialNumber来获取设备序列号。 但是,似乎在iOS 8中,注册表项“IOPlatformSerialNumber”为空。 可以通过其他方式获取序列号吗?获取iOS 8设备的序列号
Apple设备的序列号可在设置 - >常规 - >关于 - >序列号下找到。
问题在于如何以编程方式获取此内容,而不是通过设置。 – 2014-09-19 05:53:29
答:不可以
目前有浮动的解决方案围绕滥用.mobileconfig,但他们补充由于其他问题的性质。
UUID被删除的原因。请参阅2011年美国国会的有关隐私和苹果召唤的新闻,以了解为什么必须改变这一点。 http://arstechnica.com/apple/2011/04/apple-google-asked-to-join-judiciary-hearing-on-mobile-device-privacy/
滥用底层行军端口获取设备序列号作为UUID的替代不是解决方案。现在滥用移动配置,并猜测将工作多久。
您有很多体面的方式来处理您以前使用设备标识的任何情况。特别是在拥有加密技术和MDM的企业环境中,绝对没有必要跟踪这样的设备。
正如Helger所述,由于安全/隐私的原因,UDID在iOS 6+中不再可用。相反,使用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
后存储他们钥匙圈和以后使用。因为重新安装应用程序时钥匙串的值不会更改。
我曾经为此使用Open UDID。不知道它是否仍然有效。
我知道UUID,谢谢。但是,我的问题是关于如何获取序列号(不是UDID或UUID)。我会很好的使用私有API的解决方案,因为这个应用程序是通过企业许可证分发的。 – quentinadam 2015-10-02 11:06:08
从iOS 8开始,IOPlatformSerialNumber属性被删除,现在检索其值的调用返回nil。对不起,如果我误解了。 – iAhmed 2015-10-02 12:01:49
在ObjC中获取uuid最简单的方法是:'[[NSUUID UUID] UUIDString]'。也没有使用'@ autoreleasepool'和'synchronize'的目的。分解变量'[NSUserDefaults standardUserDefaults]'和[[NSBundle mainBundle] bundleIdentifier]'可以简化代码并减少拼写错误的可能性。对于代码安全性来说,最好的做法是总是使用大括号“'{}'”和所有'if'语句。 – zaph 2015-10-02 13:42:43
iOS中不再可能直接检索设备序列号。
但是,如果它只是一个企业内部的应用程序,这是我工作的公司将要实现的是:
在设备配置,复制序列号和设置设备名称为序列号。
然后使用Apple的UIDevice API来检索设备名称。
你的意思是,你想要设备ID/UDID。?对。? – 2014-09-19 04:33:31
您可以创建一个唯一的随机ID来标识设备,除非您重置设备,否则它不会更改。如果你想实现这个我可以提供代码。 – souvickcse 2014-09-19 06:33:10
我想要实际的序列号。这不适用于应用商店应用,它适用于内部应用。我们需要串行代码而不是UUID,因为这是通过移动设备管理与用于管理应用程序的序列代码链接的。 – quentinadam 2014-09-19 08:21:29