我是Firebase的新手,在主视图上使用gmail唱歌。用户唱歌后,我将基于documentId保存 userinfo ,如果用户已经存在(已经用gmail登录),则无需保存信息,只需更新存在的信息即可。因此,我尝试了一些代码,但没有达到我的期望。
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if let error = error{
print(error.localizedDescription)
return
}
guard let authentication = user.authentication else { return }
let credential = GoogleAuthProvider.credential(withIDToken: (authentication.idToken)!, accessToken: (authentication.accessToken)!)
Auth.auth().signIn(with: credential, completion: { (user, error) in
if let error = error {
print("Login erro \(error.localizedDescription)")
return
}
在这里,我检查了Firestore中的所有文档ID
self.db.collection("pruser").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
// print("\(document.documentID) => \(document.data())")
print("\(document.documentID)")
在这里,我必须检查现有的文档ID和当前用户 文件编号。如果已经存在更新信息,则如果未设置文档ID上的值,但是尝试使用此代码时
self.ref = self.db.collection("pruser").document()
let doc = self.ref?.documentID
print("printdoucment id ",doc!)
}
}
}
}
用户ID:vnRsxNjJePfwRcAWOLy1iByhV352
文件ID:PKKLapD9xE9kNNvntI8XuserId:vnRsxNjJePfwRcAWOLy1iByhV352
文件ID: pxjiVXEgbZgFke3Mijk5
当我用现有电子邮件登录时, documentid 也有所不同,每次登录时间 DocumentId 都不同,如何实现此问题?
答案 0 :(得分:1)
aergistal's answer每次调用都会生成一个新的文档ID。如果需要的话,必须给它传递一个参数以指定文档ID。
ffmpeg
答案 1 :(得分:0)
尝试将其添加到viewDidLoad():
GIDSignIn.sharedInstance()?.presentingViewController = self
GIDSignIn.sharedInstance()?.delegate = self
将7-11行替换为:
Auth.auth().signIn(with: credentials) {
(authResult, error) in
if let error = error {
print(error.localizedDescription)
}else{
print("Log in successful")
这应该登录用户。
对于DocumentID,我认为您的代码中没有将每个用户链接到每个DocumentID。您需要根据用户ID更改或读取DocumentID。