【问题标题】:Firestore (Firebase) How to count total active/online usersFirestore(Firebase)如何计算活跃/在线用户总数
【发布时间】:2018-05-28 04:04:59
【问题描述】:

我将创建一个具有以下一些功能的应用:

  • 无需注册或登录即可使用该应用

  • 每天,我的管理员都会上传一个 10 分钟(或更短)的音频文件到后端,并设置音频可供所有用户使用的时间。例如:上午 10 点

  • 在设置时间(上午 9.55)前 5 分钟,应用程序将开始计算打开应用程序并等待播放音频文件的用户总数。

  • 活跃/在线用户的数量将是实时的

我尝试了什么:

  • 每次用户打开音频屏幕时,应用都会使用 FirebaseAuth 以匿名身份登录。当用户离开此屏幕时,使用 FirebaseAuth 注销。但是这种方法不起作用,因为当用户注销时,匿名用户仍然存在于用户表中

我的问题:

  1. 有了这些功能,我可以使用firebase/firestore来实现吗?

  2. 统计活跃用户总数的最佳方法是什么?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    您可以使用FirebaseAuth 将值写入数据库,如果身份验证返回有人正在使用该应用程序,请编写参考并继续在其上添加用户。

    我的意思是,如果有用户在线,FirebaseAuth 将写入一个名为 usersonline 的引用,值为 1 ,如果另一个用户加入,它将是 usersonline + 1 等等,然后你可以附加onChildEventListener 并使用 onChildChanged 实时更新在线用户,因此,每次该子项更改(根据用户递增)时,它都会在线显示用户。

    要减少在线用户,在他们注销并且AuthListener 不再看到已登录的用户后,您可以在每次用户注销时仅减少 1,因此,如果用户注销,AuthListener 将每次发生这种情况时,您都可以使用usersonline - 1 修改您的孩子。

    例如,当用户失去连接时,Firebase 会设法将数据写入数据库。

    // Write a string when this client loses connection
    presenceRef.onDisconnect().setValue("I disconnected!");
    

    您可以在离线功能中查看:

    https://firebase.google.com/docs/database/android/offline-capabilities

    因此,您想要实现的不是写(“我已断开连接!”)而是将 usersonline ref 减 1 ,这样您就可以像实时在线用户一样添加人员并将其从该孩子中删除。

    该文档中的这个 sn-p 非常适合实现您正在寻找的东西

    DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
    connectedRef.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot snapshot) {
        boolean connected = snapshot.getValue(Boolean.class);
        if (connected) {
          System.out.println("connected"); // tell your usersonline ref to increment by 1
        } else {
          System.out.println("not connected"); //then if the user is not longer connected just decrement your usersonline by 1
        }
      }
    
      @Override
      public void onCancelled(DatabaseError error) {
        System.err.println("Listener was cancelled");
      }
    });
    

    就同时连接而言,这是针对 Firebase 实时数据库:

    Spark 计划限制为 100,无法提高。烈焰与烈焰 计划限制每个数据库同时连接 100,000 个。 如果您需要超过 100,000 个同时连接,请联系 Firebase 支持。

    https://firebase.google.com/docs/firestore/quotas 用于 Firestore,目前 100k 是同时连接的限制,这只是测试期

    【讨论】:

    • 感谢您的快速回答。这是firebase数据库还是firestore?据我所知,实时数据库的限制是同时连接 (100)
    • 我们可以使用 Firestore 来避免计划限制吗?
    • firebase.google.com/docs/firestore/quotas for firestore, 100k 是限制,这只是测试期
    • 首先你应该做的是维护一个安全的应用程序是在一个文档中创建一个在线用户数组,这个数组将连接每个用户的 uid,你应该使用一个 firestore 函数要更新包含数组大小的另一个字段值,该函数将使用 onDocumentChangeListener 因此包含在线用户数量的字段不应该在文档中,这个方法和你的问题是用户仍然可以在线但不一定是活跃的。
    猜你喜欢
    • 2021-11-28
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-03-06
    • 2020-02-04
    • 2015-02-25
    • 2021-10-26
    相关资源
    最近更新 更多