您可以使用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 是同时连接的限制,这只是测试期。