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 用于其他数据存储及其工作正常。
任何帮助,将不胜感激。谢谢
如果写入的 then
和 catch
都没有被调用,这通常意味着客户端没有连接到服务器。
我建议检查以确保您的应用有网络连接,并且您已经为您的数据库配置了(正确的)URL。
我在弹出的 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 用于其他数据存储及其工作正常。 任何帮助,将不胜感激。谢谢
如果写入的 then
和 catch
都没有被调用,这通常意味着客户端没有连接到服务器。
我建议检查以确保您的应用有网络连接,并且您已经为您的数据库配置了(正确的)URL。