我有两个控制器,一个是登录,另一个是tableView控制器,我在其中显示用户信息。 当应用程序启动时,它首先检查用户是否已登录。 如果用户已登录,它将从firebase实时数据库中获取用户数据并显示在tableView中。如果没有,那么它将显示登录控制器,用户必须使用电子邮件和密码登录。 现在,一旦我登录,我就可以从firebase中看到用户数据进入TableViewController,但是如果我在没有注销的情况下关闭应用程序并在一段时间之后打开它,比如20分钟后或应用程序启动时的第二天,请检查用户是否已登录我的情况它显示登录并显示tableViewController但它是空的它不从firebase实时数据库获取用户数据。 如果我将注销并再次登录,那么我可以看到来自firebase的用户数据,但如果我关闭应用程序并在一段时间后再次打开它将不会向我的tableViewController显示任何数据。 我不希望用户每次在应用程序中登录以获取firebase数据如果用户登录它必须显示来自firebase实时数据库的数据。
以下是检查用户是否已登录的代码
if Auth.auth().currentUser?.uid == nil{
print("Logout call")
perform(#selector(handleLogout), with: nil, afterDelay: 0)
}else{
print("User Logged In")
fethUserAndSetupNavbarTitle()
}
以下代码将从firebase实时数据库中获取数据。
guard let uid = Auth.auth().currentUser?.uid else {
return
}
let dbReference = Database.database().reference().child("Users").child(uid)
dbReference.observeSingleEvent(of: .value, with: { (snapshot)
in
if let dictionary = snapshot.value as? [String:AnyObject] {
let user = Users(dictionary: dictionary)
print("setup navbar called")
self.setupNavBarWithUser(user)
}
}, withCancel: { (error) in
print(error.localizedDescription)
return
})
如果我无法描述问题,请告诉我。 提前谢谢。
答案 0 :(得分:1)
我可能知道问题是什么。 Firebase令牌在一小时左右后被禁用。 您需要启用令牌服务API才能在令牌过期后刷新令牌。 转到https://console.developers.google.com/,点击"启用API和服务",搜索令牌服务API并启用它。