Firebase 实时数据库显示奇怪的行为

Firebase Realtime database showing strange behavior

我在弹出的 expo 应用程序中使用 react-native-firebase,并尝试在我的聊天应用程序中构建一个存在检测系统,该系统将检测消息接收者是否在线,如果不在线,则 he/she上次在线。数据将按如下方式存储在 firebase 实时数据库中:

{
 lastSeen:[{
   [userId]:{
    state: boolean
    time: serverTimeStamp
   }
 }]
}

问题是 firebase 控制台从不显示数据,只有当收件人在线时,应用程序才会显示此数据(即使它在控制台中不可见),但如果用户离线,则不会返回任何内容,也不会生成错误。我已经在 realtimeDB 规则中将 read 和 write 设置为 true 。这是我正在使用的代码:

import database from "@react-native-firebase/database";

export const updateUserLastSeen = (userId) => {
  const userStatusDatabaseRef = database().ref("/lastSeen/" + userId);
  console.log("updatelast", userId);
  userStatusDatabaseRef
    .set({
      state: true,
      time: database.ServerValue.TIMESTAMP,
    })
    .then(() => console.log("online"))
    .catch((e) => console.log(e));
  // database()
  //   .ref(".info/connected")
  //   .on("value", function (snapshot) {
  //     if (snapshot.val() == false) {
  //       return;
  //     }

  userStatusDatabaseRef
    .onDisconnect()
    .set({
      state: false,
      time: database.ServerValue.TIMESTAMP,
    })
    .then(function () {
      console.log("disconnect configured");
      // userStatusDatabaseRef.set({
      //   state: true,
      //   time: database.ServerValue.TIMESTAMP,
      // });
    });
  // });
};

export const checkUserLastSeen = (userId, setUserLastSeen) => {
  console.log("check last", userId);
  database()
    .ref("/lastSeen/" + userId)
    .on("value", (snapshot) => {
      setUserLastSeen(snapshot.val());
      console.log("User data: ", snapshot.val());
    });
  console.log("after check last");
};

我尝试了 firebase 文档和 rnfirebase 文档中的代码。在上面的代码中,none 的“then”或“catch”函数在 updateUserLastSeen 中被调用,但在 checkUserLastSeen 中“on”仅在 userId 的持有者在线时被调用。此外,我仅出于此目的使用实时数据库,而将云 firestore 用于其他数据存储及其工作正常。 任何帮助,将不胜感激。谢谢

如果写入的 thencatch 都没有被调用,这通常意味着客户端没有连接到服务器。

我建议检查以确保您的应用有网络连接,并且您已经为您的数据库配置了(正确的)URL。