我很难弄清通过FirebaseUI进行的用户身份验证/登录与Android中Firestore数据库中数据的脱机持久性相关的工作方式。
我了解必须登录用户才能从数据库中检索其文档,但是当用户离线时会发生什么?在显示用户的文档列表(如果有)之前,如何在我的应用程序中设置用户和数据检查流程?
如果我对以下文档(FirebaseUI和Firestore脱机数据)的理解是错误的,请纠正我。
因此,我认为基本上用户可以看到3页:
应该为首次使用和退出的用户显示“首次注册/登录”页面(用户是否已经退出自己或他们的登录令牌是否已过期)。这是FirebaseUI抢救的地方。我可以仅使用getCurrentUser
方法检查两种情况吗?当用户离线时,此方法返回什么?我是否在有关管理用户的文档中某个地方错过了这一点?
对于数据库中没有任何数据的登录用户,应该显示第二个空白页面(无论是因为他们是第一次登录还是删除了所有数据)。我是否可以使用get
电话检查数据?当没有数据或必须使用什么侦听器时,它将返回什么?在获取数据的文档中,我是否错过了这一点?
对于拥有现有数据或刚刚创建数据/文档的已登录用户,应该显示第三个列表页面。这可以通过get
对该集合的调用通过对该集合的查询来获得。
最后,你会一个活动/片段内将所有这一起从下面的方式和顺序onCreate
/ onCreateView
?
第一-首次检查并注销用户:如果是,则显示(显示)第一页(即启动FirebaseUI登录意图活动)。用户注册/登录后会发生什么?用户是否被带回原始活动/片段?我该如何处理?
其次-检查数据库中的数据:如果没有数据,则显示“空”页面。如果有数据,则显示文档列表。看来这可以说之间切换可见性来处理TextView
与文本“空”和RecyclerView
在相同的布局(见本SO后)。
请帮忙!
我可以仅使用getCurrentUser方法检查这两种情况吗?当用户离线时,此方法返回什么?
如果验证过程成功,则在对象getCurrentUser()
上调用方法时,FirebaseAuth
它将返回FirebaseUser类型的对象。
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
但是在此之前,您需要firebaseAuth
通过调用静态FirebaseAuth.getInstance()方法来实例化对象,如下所示:
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
因此,如果身份验证过程成功并且您要脱机,则没关系,调用getCurrentUser()
将始终返回FirebaseUser
对象。
我是否可以使用get调用来检查数据?
是的,您应该使用get()
呼叫和第一次检查if (task.isSuccessful())
,如果数据存在于特定位置,则应该第二次检查。
当没有数据或必须使用什么侦听器时,它将返回什么?
它将返回一个空DocumentSnapshot
对象。因此,首先您需要使用get()
和addOnCompleteListener()
。
这可以通过对该集合的get调用通过对集合的查询来获得。
对,那是正确的。
最后,您是否会按照以下方式和顺序在onCreate / onCreateView中从一个活动/片段中将所有这些联系在一起?
是的,您可以从一个活动/片段中将所有这些联系在一起。
用户注册/登录后会发生什么?用户是否被带回原始活动/片段?我该如何处理?
如果用户退出,则应将用户重定向到LoginActivity
。在我的教程之一中,我逐步解释了使用Google和Firebase进行身份验证的整个过程。
检查数据库中的数据:如果没有数据,则显示“空”页面。
这是推荐的方法,您可以从Cloud Firestore数据库检索数据并在中RecyclerView
使用来显示数据FirestoreRecyclerAdapter
。因此,在这种情况下,您可以onDataChanged()
像这样重写:
@Override
public void onDataChanged() {
if (getItemCount() == 0) {
recyclerView.setVisibility(View.GONE);
emptyView.setVisibility(View.VISIBLE);
} else {
recyclerView.setVisibility(View.VISIBLE);
emptyView.setVisibility(View.GONE);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句