离线用户可以在Firebase Realtime数据库中执行特定于其uid的数据库事务吗?

时间:2018-10-18 10:15:01

标签: android firebase firebase-realtime-database firebase-authentication offline-caching

情况:

用户在没有互联网连接的情况下启动应用程序。我尝试在启动活动中匿名认证它们,并在具有以下规则结构的数据库中执行对引用 '/ users / $ uid' 的数据库写操作:

{
  "rules": {
    "users": {
      "$user_id": {
        ".write": "$user_id === auth.uid",
        ".read": "$user_id === auth.uid"
      }
    }
  }
}

因此,如果发生这种情况,并且用户随后上网,则实际上将执行排队的数据库事务-还是我需要手动重新进行身份验证并重试数据库事务?

我不确定如果用户处于脱机状态是否会生成用于匿名身份验证的 uid ,所以我认为数据库引用无法解析。

  

参考链接:

     

https://firebase.google.com/docs/auth/android/anonymous-auth   https://firebase.google.com/docs/database/android/offline-capabilities

2 个答案:

答案 0 :(得分:1)

我将数据保存在共享首选项或本地数据库中(取决于您要保存的数据类型)。

此后,要么启动后台服务并尝试每隔10分钟连接到您的实时数据库,要么下一次您希望用户打开应用程序并检查是否需要检查身份验证。

对于后台服务,我建议使用AlarmManger。

答案 1 :(得分:0)

因此,在测试之后,我发现:

  • 如果用户从一开始就没有连接,则在重新启动之间不能依赖uid
  • 在本地执行的数据库事务(因为您具有setPersistence(true))将与用户排队并与远程同步,无论用户是否具有连接性,但如果使用的DatabaseReference包含对当前用户uid的引用,则不会,因为在重新启动之间(例如在问题中所述的情况下)不能依靠此。

要解决此问题,我正在通过SharedPreferences使用本地存储来获取最基本的数据,并在实例化引用用户uid的DatabaseReference之前等待连接。