Firebase - подсчет онлайн-пользователей
Я попытался сыграть с presence
, чтобы отобразить общее количество подключенных пользователей в элементе. Я не мог понять, где искать. Я сделал что-то похожее на это:
var dataUlist = new Firebase('https://<url>.firebaseio.com/.info/connected');
dataUlist.on('value', function(snap) {
console.log(snap);
});
Чтобы попытаться посмотреть, могу ли я найти что-нибудь полезное там, но (я его ожидал), я не мог представить никаких данных.
Есть ли способ сделать то, что я делаю после? Извлечь общее количество подключенных пользователей и, например. эхо в консоли или в элемент? Или, может быть, как получить список авторизованных пользователей и несанкционированных?
РЕДАКТОР: Я хотел бы сохранить правописание на английском языке, я не американец. Спасибо.
Ответы
Ответ 1
.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());
});
Ответ 2
Вот код от 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);
}