为什么iOS应用程式更新时会获得新的标识符FORVendor?

每当我的应用程序从App Store更新时,由于某些原因,一小部分用户获得了一个新的标识符FORVendor.我的用户不注册或登录.它们都是匿名的,所以我需要通过他们的供应商ID分隔它们.

我认为在某些设备上可能没有足够的空间,导致应用程序被删除和重新安装,但事实并非如此,因为在上次更新中,我的一个朋友拥有超过2GB的空白空间.

我知道,对于删除并重新安装该应用程序的用户,更改了identifierForVendor.但是情况并非如此,因为应用程式刚刚更新.

问题是什么?奇怪的是,这还没有发生在开发团队设备上.或者仍然有用户在无数的应用更新,操作系统更新等之后没有遇到此错误.这只会发生在一小部分用户中.所有用户都是iOS7,它适用于不同的设备型号和iOS版本.

我使用这段代码来获取他们的ID:

static let DeviceId = UIDevice.currentDevice().identifierForVendor.UUIDString

然后我将它们保存到NSUserDefaults中:

NSUserDefaults.standardUserDefaults().setBool(true,forKey: "User" + DeviceId)
NSUserDefaults.standardUserDefaults().synchronize()

然后在每次新的登录时检查用户是否存在:

static func doesUserExist() -> Bool {
    var userDefaultValue: AnyObject? = NSUserDefaults.standardUserDefaults().valueForKey("User" + DeviceId)

    if defaultValue == true {
        println("Userdefaults already has this guy,moving on")
        FirstTime = false
        return true
    } else {
        println("First time in the app!")
        FirstTime = true
        return false
    }
}

如果用户确实存在,则启动登录过程.如果用户不存在,则显示注册过程.我使用Parse.com作为后端,deviceID用作用户名.当这么少的用户遇到这个错误时,我看到一个新的用户名和一个新的帐户创建.

解决方法

在5月和7月之间更新应用程序商店中的应用程序时,会出现一个错误,影响了计算的标识符.苹果声称已经解决了这个问题,并推出另一个更新应该在关键日期之前恢复原始价值.
参考: https://openradar.appspot.com/22677034

请注意,有些用户仍然观察到这个问题甚至更新了七月后的几周.因此,仍然有可能在某些情况下仍然存在错误,或者将来可能会随时重现错误.因此,如果您将此数据用作加密的一部分,最好将其保存到钥匙串.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...