Firebase数据库无法离线加载数据

Mar*_*Bak 5 android firebase firebase-realtime-database

我有一个在离线模式下(通过调用FirebaseDatabase.getInstance().setPersistenceEnabled(true))使用Firebase数据库的应用。在数据库中,只有当其他节点的值设置为true时,用户才能访问该节点,规则如下所示:

{
  "rules": {
    ".write": "auth != null",
    ".read": "false",
    "mynode": {
      "$dataId": {
        ".read": "auth != null && root.child('userAccessNode/' + auth.uid + '/' + $dataId).val() == true"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

设备连接到互联网时,它可以正常工作。但是,当我在设备上打开飞行模式时,回调addValueEventListener(ValueEventListener)不会返回任何内容-错误也没有价值,只是挂起,直到我再次打开互联网连接为止。

我确保在脱机之前都已检索到两个节点,所以我确定所讨论的节点和保存访问信息的节点都已缓存。

对于具有简单规则(例如(auth!= null))的其他节点,脱机模式可以正常工作,但在这种情况下不可行。

我做错什么了吗?你知道我该怎么做吗?脱机时(取决于其他节点的)规则评估如何工作?

Dou*_*son 2

Firebase 实时数据库安全规则始终在服务器端进行评估。这可以防止恶意客户端绕过这些规则。