我尝试使用firebase的isNewUser方法,但它总是返回false。据我所知,它只适用于通过Firebase控制台创建的帐户,这正是我的情况。只要用户点击“连接”并且他的信息正确,该函数就会被调用。
func sign_in_handler() {
if self.email != "" && self.pass != "" {
Auth.auth().signIn(withEmail: self.email, password: self.pass) { (result, error) in
if err != nil {
self.error = err!.localizedDescription
self.alert.toggle()
return
}
guard let isNew = res?.additionalUserInfo?.isNew else {return}
print("\nIs new user? \(isNew)\n")
if newUserStatus == true{
UserDefaults.standard.set(true, forKey: "status")
NotificationCenter.default.post(name: NSNotification.Name("status"), object: nil)
}
else{
UserDefaults.standard.set(true, forKey: "status")
NotificationCenter.default.post(name: NSNotification.Name("status"), object: nil)
}
}
} else {
self.error = "Wrong informations."
self.alert.toggle()
}
}
谢谢你的帮助!
只有当当前登录与创建帐户同时发生时,IsNewUser
属性才为true。因此它只发生在调用createuser(...
之后,而不会在调用signin(...
时发生。
原因是它基本上比较了该用户的元数据
中的LastSigninDate
和CreationDate
,前者是在创建帐户时设置的。因此,对于在控制台中创建的用户,isNewUser
属性在应用程序中实际上永远不会为真。
如果要确定用户是否是最近创建的,最好将LastSigninDate
和CreationDate
与您认为“新”的内容进行比较。
如果您想确定您以前是否见过这个用户,那么您通常会在第一次看到它时在某个后端存储中跟踪他们的用户ID。