首先,在这种情况下,我需要知道这是第一个用户的登录名(登录后注册也算作首次登录),因此我可以将其添加到数据库中。为此,我需要进行以下检查:
func isNewUser(userMetadata: UserMetadata) -> Bool {
return userMetadata.creationDate == userMetadata.lastSignInDate && !UserDefaults.standard.hasLoggedIn
}
我需要进行UserDefaults
检查,因为在用户注销之前,creationDate和lastSignInDate将是相等的。
直到今天,当我收到这些奇怪的日志时,一切都运转良好:
(lldb) po userMetadata.creationDate
▿ Optional<Date>
▿ some : 2019-02-06 21:18:15 +0000
- timeIntervalSinceReferenceDate : 571180695.0
(lldb) po userMetadata.lastSignInDate
▿ Optional<Date>
▿ some : 2019-02-06 21:18:15 +0000
- timeIntervalSinceReferenceDate : 571180695.1040001
日期看起来一样,但是对相等性的检查失败。
我称之为isNewUser
的代码:
authListener = Auth.auth().addStateDidChangeListener { [unowned self] (auth, user) in
if let firebaseUser = user, Auth.auth().isNewUser(userMetadata: firebaseUser.metadata) {
self.handleNewUser(firebaseUser)
}
}
该文档对首次登录没有太多说明。我知道isNewUser
类中有一个AdditionalUserInfo
属性,但是我不知道该如何使用。因此,任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
firebaser here
这可能与我们正在研究的一些后端更改有关。目前,您可以在比较之前将timeIntervalSinceReferenceDate
的值四舍五入。
但是最近最好使用AdditionalUserInfo.newUser
进行此检查。您是从AuthDataResult
获得的,因此在用户登录后就可以像使用signIn(withEmail:password:completion:)
这样。在FirebaseUI中,您还可以获得AuthDataResult
,如下所示:https://github.com/firebase/FirebaseUI-iOS/tree/master/Auth#sign-in