提问者:小点点

Firebase中的.IsNewUser方法始终返回false


我尝试使用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()
        }
    }

谢谢你的帮助!


共1个答案

匿名用户

只有当当前登录与创建帐户同时发生时,IsNewUser属性才为true。因此它只发生在调用createuser(...之后,而不会在调用signin(...时发生。

原因是它基本上比较了该用户的元数据中的LastSigninDateCreationDate,前者是在创建帐户时设置的。因此,对于在控制台中创建的用户,isNewUser属性在应用程序中实际上永远不会为真。

如果要确定用户是否是最近创建的,最好将LastSigninDateCreationDate与您认为“新”的内容进行比较。

如果您想确定您以前是否见过这个用户,那么您通常会在第一次看到它时在某个后端存储中跟踪他们的用户ID。