Firebase -统计在线用户

Firebase - Count online users

本文关键字:用户 在线 统计 Firebase      更新时间:2023-09-26

我尝试使用presence使其在元素中显示连接的总用户。我真不知道如何使它工作。

我还尝试了以下操作:

    var dataUlist = new Firebase('https://<url>.firebaseio.com/.info/connected');
    dataUlist.on('value', function(snap) {
        console.log(snap);
    });

我想看看能不能找到有用的东西,但我不知道这些数据是怎么工作的。

有没有办法帮我做我想做的事?获取连接用户的总数,然后在控制台或元素中回显它?

.info/connected将只返回当前客户端是否连接的信息。为了维持一个状态计数,您需要通过存储每个用户的状态信息并使用setOnDisconnect()来创建一个计数器。例如:

var listRef = new Firebase("https://<url>.firebaseio.com/presence/");
var userRef = listRef.push();
// Add ourselves to presence list when online.
var presenceRef = new Firebase("https://<url>.firebaseio.com/.info/connected");
presenceRef.on("value", function(snap) {
  if (snap.val()) {
    // Remove ourselves when we disconnect.
    userRef.onDisconnect().remove();
    userRef.set(true);
  }
});
// Number of online users is the number of objects in the presence list.
listRef.on("value", function(snap) {
  console.log("# of online users = " + snap.numChildren());
});    

这是Anant为Android格式化的代码

public void getDbCount() {
    Firebase listRef = new Firebase("https://<your-firebase-database>.firebaseio.com/presence/");
    final Firebase userRef = listRef.push();
    // Add ourselves to presence list when online.
    Firebase presenceRef = new Firebase("https://<your-firebase-database>.firebaseio.com/.info/connected");
    ValueEventListener myPresence = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            // Remove ourselves when we disconnect.
            userRef.onDisconnect().removeValue();
            userRef.setValue(true);
        }
        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.e("DBCount", "The read failed: " + firebaseError.getMessage());
        }
    };
    presenceRef.addValueEventListener(myPresence);
    // Number of online users is the number of objects in the presence list.
    ValueEventListener myList = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            // Remove ourselves when we disconnect.
            Log.i("DBCount", "# of online users = " + String.valueOf(snapshot.getChildrenCount()));
        }
        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.e("DBCount", "The read failed: " + firebaseError.getMessage());
        }
    };
    listRef.addValueEventListener(myList);
}