每次从 App Store 更新我的应用程序时,都会有少数用户出于某种原因获得一个新的identifierForVendor 。我的用户没有注册或登录。它们都是匿名的,所以我需要通过它们的供应商 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 作为后端,设备 ID 用作用户名。当少量用户遇到此错误时,我会看到创建了一个新用户名和一个新帐户。