swift firebase创建不带childByAutoId的子项
我有一个在线iOS应用程序,我需要知道用户的姓名和号码以及在线用户的姓名和号码,因此我让用户结构有一个childByAutoID,以便在创建时添加子姓名和号码。但问题是,我试图统计在线用户并将其显示在我的ViewController上,因此我的想法是在登录时添加在线用户json结构,在注销时删除,因此我将name+phone作为在线用户结构中的姓名和号码的父级,但我每次尝试从注销Viewcontroller访问它时,var name+number返回为空,因此如果没有子ID,我无法将其从firebase数据库中删除 我不想对在线用户使用childByAutoId,因为我不知道如何存储密钥,因为我使用的是异步函数,这使得如何检索密钥变得太复杂swift firebase创建不带childByAutoId的子项,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我有一个在线iOS应用程序,我需要知道用户的姓名和号码以及在线用户的姓名和号码,因此我让用户结构有一个childByAutoID,以便在创建时添加子姓名和号码。但问题是,我试图统计在线用户并将其显示在我的ViewController上,因此我的想法是在登录时添加在线用户json结构,在注销时删除,因此我将name+phone作为在线用户结构中的姓名和号码的父级,但我每次尝试从注销Viewcontroller访问它时,var name+number返回为空,因此如果没有子ID,我无法将其从fire
//1st view controller
func getID() -> String {
return String(nameField.text! + numberField.text!)
}
@IBAction func linkTapped(_ sender: Any) {
if (nameField.text != nil && numberField.text != nil) {
let alert = UIAlertController(title: "Phone Number", message: "Is this your phone number? \n \(numberField.text!)", preferredStyle: .alert)
let action = UIAlertAction(title: "Yes", style: .default) { (UIAlertAction) in
PhoneAuthProvider.provider().verifyPhoneNumber("+1 " + self.numberField.text!, uiDelegate: nil) {
(verificationID, error) in
if error != nil {
print("error: \(String(describing: error?.localizedDescription))")
print(self.numberField.text ?? "no number entered")
} else {
getID()
let defaults = UserDefaults.standard
defaults.set(verificationID, forKey: "authVID")
defaults.synchronize()
self.performSegue(withIdentifier: "code", sender: Any?.self)
let ref = Database.database().reference().child("Users").childByAutoId()
let values = ["Name": self.nameField.text, "Phone": self.numberField.text]
ref.updateChildValues(values as [AnyHashable : Any], withCompletionBlock: { (err, ref) in
if err != nil {
print(err as Any)
return
}
print("user saved into firebase db")
})
let ref2 = Database.database().reference().child("Online Users")
let onlineRef = ref2.child(self.getID())
onlineRef.updateChildValues(values as [AnyHashable : Any])
}
}
}
let cancel = UIAlertAction(title: "No", style: .cancel, handler: nil)
alert.addAction(action)
alert.addAction(cancel)
self.present(alert, animated: true, completion: nil)
} else {
let alert = UIAlertController(title: "You left me empty", message: "please fill your name and number", preferredStyle: .alert)
self.present(alert, animated: true, completion: nil)
}
}
//第二视图控制器
@IBAction func signOutFunction(_ sender: Any) {
do {
try Auth.auth().signOut()
let newVar = ViewController()
let ref = Database.database().reference().child("Online Users")
ref.child(newVar.getID()).removeValue()
self.view.window!.rootViewController?.dismiss(animated: true, completion: nil)
} catch let error {
print("not signed in...", error)
}
}