firebase统计在线用户并在全球柜台更新

时间:2018-06-10 08:04:23

标签: node.js firebase firebase-realtime-database google-cloud-functions

我想计算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 })
        })
    }

enter image description here

我对这些功能有一些问题 有时online_users是负面的,我想阻止它。 有时我进入交易当前是空的。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

Performance Monitoring公开会话或当前用户,但它似乎只适用于移动应用程序(ios / android)。

  

Google Analytics for Firebase数据收集通过Google Analytics for Firebase

收集的信息类型      

默认实施包括:

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

关于云功能,请查看Writing and Viewing Logs。如果它可行,那就是API。