首页 > 解决方案 > firebase 统计在线用户并在全球计数器中更新

问题描述

我想计算firebase中的在线用户并将值存储在firebase中的online_users下,当用户连接到应用程序以增加online_users以及当用户从应用程序断开连接以减少时。我建立了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 是负面的,我想阻止它。有时我得到的交易电流是空的。

我该如何解决?

标签: node.jsfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


性能监控会公开会话或当前用户,但它似乎仅适用于移动应用程序 (ios/android)。

Google Analytics for Firebase 数据收集 通过 Google Analytics for Firebase 收集的信息类型

默认实现包括:

  • 用户数和会话数
  • 会话持续时间
  • 操作系统
  • 设备型号
  • 地理
  • 首次发射
  • 应用程序打开
  • 应用更新
  • 应用内购买

至于云功能,请查看写入和查看日志。如果可行,这将是 API。


推荐阅读