处理FirebaseUI登录和离线Firestore数据?

丹尼斯815

我很难弄清通过FirebaseUI进行的用户身份验证/登录与Android中Firestore数据库中数据的脱机持久性相关的工作方式。

我了解必须登录用户才能从数据库中检索其文档,但是当用户离线时会发生什么?在显示用户的文档列表(如果有)之前,如何在我的应用程序中设置用户和数据检查流程?

如果我对以下文档(FirebaseUIFirestore脱机数据)的理解是错误的,请纠正我

因此,我认为基本上用户可以看到3页:

  1. 注册/登录页面
  2. 用户数据库中没有数据时为空页
  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在我的教程之一中,我逐步解释了使用GoogleFirebase进行身份验证的整个过程

检查数据库中的数据:如果没有数据,则显示“空”页面。

是推荐的方法,您可以从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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章