评论里大家都认可用identifierForVendor 然后用keychain和iCloud各保存一份. 看来这是接近最终结果的办法了.
官方文档又说了下面的话, 又有点费解. 我们只要把最后一组string忽略就可以得到不变的id了?
Comparing [[[UIDevice currentDevice] identifierForVendor] UUIDString] on multiple Enterprise applications or applications installed via Xcode (not the App Store), where the bundleIDs differ only in the last component, will result in identical strings.
开始在新系统上测试 发现这个问题很严重. 我们真的没有办法唯一确定一个用户设备了!
-
UDID肯定是不能用了. (
UIDevice.uniqueIdentifier
接口被删除 -
OpenUDID不能用了. OpenUDID是用系统粘贴板作为中间存储供所有app调用. 新的系统把粘贴板的访问权限限制在了同一个开发者的范围内,既同一个开发者的多个app在同个设备上共享粘贴
-
MAC地址不能用了. 得到的是类似
0x2FFFFFFFF
的假地址
有个方法是通过IOKit.framework
里的接口来获得手机序列号 同样的还能获得IMEI. 但是虽然IOKit在公开的API范围中,同样会被苹果拒绝!!
目前看,开发者只能用UIDevice.identifierForVendor
来获得用户ID,而官方文档中又说这个方法获得的ID在删除app重装后会改变.
如果你有什么好办法, 非常希望能推荐一下.