我想计算firebase中的在线用户并将值存储在online_users下的firebase中,当用户连接到app以增加online_users并且当用户从app断开连接到减量时。 我构建了firebase功能
export const countOnlineUser = functions.database
.ref('/UserStatus/{uid}')
.onWrite((change, context) => {
var collectionRef = change.after.ref.parent;
var countRef = collectionRef.child('online_users');
let increment = 0;
if (change.after.exists() && !change.before.exists()) {
increment = 1;
} else if (!change.after.exists() && change.before.exists()) {
increment = -1;
} else {
return null;
}
// Return the promise from countRef.transaction() so our function
// waits for this async event to complete before it exits.
return countRef.transaction((current) => {
console.log(current)
if (current == null) {
return 0;
}
else {
return (current || 0) + increment;
}
}).then(() => {
return console.log('Counter updated.');
});
});
每次用户连接到应用
时,客户端都会更新用户constructor() {
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const { uid, phoneNumber } = firebase.auth().currentUser._user
UserStore.setUID(uid)
this.setListenConnection()
}
})
setListenConnection = async () => {
this.userStatusDatabaseRef = firebaseRef(`UserStatus/${UserStore.user.uid}`)
firebaseRef('.info/connected').on('value', async connected => {
if (connected.val() === false) {
return
}
await firebaseRef(`UserStatus/${UserStore.user.uid}`).onDisconnect().remove()
this.userStatusDatabaseRef.set({ state: 'online', last_changed: firebase.firestore.FieldValue.serverTimestamp() }, { merge: true })
})
}
我对这些功能有一些问题 有时online_users是负面的,我想阻止它。 有时我进入交易当前是空的。
我该如何解决?
答案 0 :(得分:1)
Performance Monitoring公开会话或当前用户,但它似乎只适用于移动应用程序(ios / android)。
Google Analytics for Firebase数据收集通过Google Analytics for Firebase
收集的信息类型默认实施包括:
- 用户和会话数
- 会话持续时间
- 操作系统
- 设备型号
- 地理
- 首次发布
- 应用程序打开
- 应用更新
- 应用内购买
关于云功能,请查看Writing and Viewing Logs。如果它可行,那就是API。