有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何让Firestore在后台同步?

我的应用程序大多在户外使用,因此如果没有互联网,就会出现Firestore加载问题。当用户返回家中时,他将拥有wifi,但应用程序已关闭且不会同步。同样,当用户外出并打开应用程序时,可能没有互联网连接,循环继续

在后台同步Firestore的最佳方式是什么?有BroadcastReceiver选项,但声明应使用WorkManager。还有LiveData,但我找不到Java示例,所以。。。什么是最好的?(举个例子就好了)

编辑我不得不删除一些东西,因为我的问题“不够集中”


共 (1) 个答案

  1. # 1 楼答案

    so there is a Firestore load problem if there is no internet.

    当用户没有internet连接时,应该不会出现任何问题,这是因为Firestore has its own default caching mechanism

    For Android and iOS, offline persistence is enabled by default.

    你说:

    When the user comes back home, he will have wifi but the app is closed and will not sync.

    除非您正在侦听实时更改,否则它不会同步。除此之外,始终建议根据活动的生命周期删除列表器。因此,如果您正在使用addSnapshotListener(),您将附加一个侦听器,该侦听器将为数据库中发生的每个更改调用。因此,当你的应用程序关闭时,这种情况也会发生。不删除侦听器可能会产生不需要的账单。因此,必须在活动被销毁之前detach the listeners。有关更多信息,请查看以下链接:

    #1。不建议这样做。但是,JobDispatcher已过时,不再可用,而不是BroadcastReceiver类。但是如果需要,您应该使用WorkManager。如果您必须绝对使用JobDispatcher,我建议您不要使用它,那么源代码将被归档here。因此,请阅读有关how to migrate from JobDispatcher to WorkManager的内容

    #2

    Can I use test DB for production and change permissions to read-only? Does that test DB have an expiration date?

    每个数据库都有自己的Security Rules。因此,您应该根据需要选择保护您的数据。但是,没有涉及到期日期,但您可以使用以下内容:

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.time < timestamp.date(2021, 08, 05);
        }
      }
    }
    

    限制对数据库的访问,直到明天、2021年8月5日。

    #3。您也可以在没有安全规则的情况下使用数据库。但最有可能的是你应该考虑使用它们。很可能您不应该使用用户名或电子邮件地址,而应该使用来自身份验证过程的UID

    #4。是的,每一次CRUD操作都会计入您的免费配额。是的,即使查询没有结果,也至少要读取一个文档。因此,如果查询没有返回任何结果,you have to pay one document read