Этот код работает стабильно в течение года. Однако в одном случае недавно updateChildValues не записывал userDetails в базу данных, но блок else (профиль пользователя успешно создан) все еще выполнялся, приводя к профилю пользователя, который просто содержал значение result.token в ключе fcm-token. Если запись ref.updateChildValues прошла успешно, создается профиль с содержимым userDetails и токеном FCM.
Какие обстоятельства могли вызвать это?
let userDetails: Dictionary<String, Any> = ["userName" : chosenName, "user-level" : BASIC, "email-addr" : emailAddr, ACC_CREATE_DATE_STR : timeStamp, ACC_LAST_ACTIVITY_STR : timeStamp]
ref.updateChildValues(userDetails, withCompletionBlock: { (error, ref) in
if let err = error {
let createAlert = UIAlertController(title: "Error", message: "Please try again\n\(err.localizedDescription)", preferredStyle: .alert)
createAlert.addAction(UIAlertAction(title: "Got it", style: .default, handler: nil))
self.present(createAlert, animated: true, completion: nil)
} else {
// user profile created successfully
InstanceID.instanceID().instanceID(handler: { (result, error) in
if let error = error {
print("Error fetching FCM token: \(error)")
} else if let result = result {
ref.child("fcm-token").setValue(result.token)
}
self.dismiss(animated: true, completion: nil)
})
}
})