Каждый раз, когда мое приложение обновляется из App Store, небольшое количество пользователей по какой-то причине получает новый identifierForVendor. Мои пользователи не регистрируются и не входят в систему. Все они анонимны, поэтому мне нужно разделить их по идентификаторам поставщиков.
Я подумал, что на некоторых устройствах может быть недостаточно места, в результате чего приложение будет удалено и переустановлено, но это не так, поскольку в последнем обновлении у моего друга было более 2 ГБ свободного места.
Я знаю, что identifierForVendor изменяется для пользователя, который удаляет и переустанавливает приложение. Но это не тот случай, так как приложение только что обновилось.
В чем может быть проблема? Странно то, что этого еще не произошло с устройствами команды разработчиков. Или все еще есть пользователи, которые не сталкивались с этой ошибкой после бесчисленных обновлений приложений, обновлений ОС и т. д. Это происходит только с небольшим процентом пользователей. Все пользователи iOS7+ и это происходит для разных моделей устройств и версий iOS.
Я использую этот код, чтобы получить их идентификатор:
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 в качестве серверной части, а идентификатор устройства используется в качестве имени пользователя. Когда это небольшое количество пользователей сталкивается с этой ошибкой, я вижу новое имя пользователя и созданную новую учетную запись.