刚刚发现,UIDevice uniqueIdentifier属性在iOS 5中已弃用,在iOS 7及以上版本中不可用。似乎没有可供选择的方法或属性。
我们现有的许多应用程序都紧密依赖于这个属性来唯一地识别特定的设备。今后我们该如何处理这个问题?
2011-2012年的文件建议:
特殊注意事项
不要使用uniqueIdentifier属性。创建特定的唯一标识符
你可以调用CFUUIDCreate函数来创建一个UUID,然后写入
使用NSUserDefaults类将它转换到默认数据库。
但是,如果用户卸载和重新安装应用程序,这个值就不一样了。
根据@moonlight提出的链接,我做了几次测试,这似乎是最好的解决方案。正如@DarkDust所说,该方法将检查始终可用的en0。
有两种选择:
uniqueDeviceIdentifier (MAC+CFBundleIdentifier的MD5)
和uniqueGlobalDeviceIdentifier(MAC的MD5),这些总是返回相同的值。
下面是我所做的测试(用真正的设备):
#import "UIDevice+IdentifierAddition.h"
NSLog(@"%@",[[UIDevice currentDevice] uniqueDeviceIdentifier]);
NSLog(@"%@",[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]);
XXXX21f1f19edff198e2a2356bf4XXXX - (WIFI)UDID
XXXX7dc3c577446a2bcbd77935bdXXXX - (WIFI)GlobalAppUDID
XXXX21f1f19edff198e2a2356bf4XXXX - (3G)UDID
XXXX7dc3c577446a2bcbd77935bdXXXX - (3G)GlobalAppUDID
XXXX21f1f19edff198e2a2356bf4XXXX - (GPRS)UDID
XXXX7dc3c577446a2bcbd77935bdXXXX - (GPRS)GlobalAppUDID
XXXX21f1f19edff198e2a2356bf4XXXX - (AirPlane mode)UDID
XXXX7dc3c577446a2bcbd77935bdXXXX - (AirPlane mode)GlobalAppUDID
XXXX21f1f19edff198e2a2356bf4XXXX - (Wi-Fi)after removing and
reinstalling the app XXXX7dc3c577446a2bcbd77935bdXXXX (Wi-Fi) after
removing and installing the app
希望对大家有用。
编辑:
正如其他人指出的那样,这个解决方案在iOS 7中不再有用,因为uniqueIdentifier不再可用,查询MAC地址现在总是返回02:00:00:00:00:00
您可能想要考虑使用OpenUDID,它是已弃用UDID的临时替代品。
基本上,要匹配UDID,需要以下特性:
唯一的或足够唯一的(低概率碰撞是
可能是可以接受的)
跨重启、恢复、卸载的持久性
在不同供应商的应用程序中可用(通过CPI网络获取用户很有用)-
OpenUDID实现了上述功能,甚至有一个内置的选择退出机制供以后考虑。
检查http://OpenUDID.org,它指向相应的GitHub。
希望这能有所帮助!
作为旁注,我将回避任何MAC地址的替代方案。虽然MAC地址似乎是一种诱人的通用解决方案,但要确保这个唾手可得的果实是有毒的。MAC地址是非常敏感的,在你说“提交这个应用程序”之前,苹果可能会非常反对访问这个地址……MAC网络地址用于对wlan (private lan)或其他vpn (virtual private network)中的某些设备进行认证。它甚至比以前的UDID更敏感!