在初始加载时,firebase告诉我,如果用户通过这样的触发事件登录:
firebase.auth().onAuthStateChanged(func...)
我想检查一下,如果firebase还在检查它。与页面加载时的show spinner一样,等待firebase检查用户,然后显示app或login / register表单,考虑用户是否找到。
现在我只需要显示页面,然后是init firebase,之后,如果firebase找到了用户,则重定向到应用程序。
答案 0 :(得分:2)
快捷键4
方法1
检查用户的自动创建时间是否等于上次登录时间(如果确实是他们的首次登录,则将是第一个登录时间)
//Current user metadata reference
let newUserRref = Auth.auth().currentUser?.metadata
/*Check if the automatic creation time of the user is equal to the last
sign in time (Which will be the first sign in time if it is indeed
their first sign in)*/
if newUserRref?.creationDate?.timeIntervalSince1970 == newUserRref?.lastSignInDate?.timeIntervalSince1970{
//user is new user
print("Hello new user")
}
else{
//user is returning user
print("Welcome back!")
}
方法2
或者,您可以在App Delegate中设置全局变量。如果用户已经存在,那么我从事的大多数应用程序都会使用Firebase自动登录。表示它不会更新lastSignInDate值,因此仍将用户显示为新用户。
因此,首先在类上方的AppDelegate中创建一个变量,如下所示:
var newUser = false
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate{
然后,每当调用函数创建新的Firebase用户时,请将newUser设置为true:
newUser = true
最后,制作一条if语句,以过滤您的主控制器正在接收哪个用户:
Override func viewDidLoad() {
super.viewDidLoad()
if newUser == true{
print("welcome new user")
showOnboarding()
}
else{
print("Welcome back!")
}
}
现在,只要现有用户登录,该变量将保持为
答案 1 :(得分:1)
传递给onAuthStateChanged
的侦听器将使用null
或User
实例的参数进行调用。
因此,可以安全地假设Firebase正在检查您调用initializeApp
与调用onAuthStateChanged
的侦听器之间的身份验证状态。在调用initializeApp
时显示微调器,并在调用侦听器时隐藏它。
答案 2 :(得分:0)
您可以使用成功登录后返回的FIRAuthDataResult对象通过 additionalUserInfo 属性来确定用户是否是新用户:
Auth.auth().signIn(with: credential) { (authResult, error) in
if let error = error {
print(error.localizedDescription)
return
}
// User is signed in
// ...
//Check if new user
if let isNewUser: Bool = authResult?.additionalUserInfo?.isNewUser {
if isNewUser {
print("new user")
}
}
}