2013-04-12 4 views
15

Я попытался сыграть с presence, чтобы отобразить общее количество подключенных пользователей в элементе. Я не мог понять, где искать. Я сделал что-то похожее на это:Firebase - Подчислите пользователей онлайн

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

попробовать и посмотреть, если я мог бы найти что-нибудь полезное там, но (я вроде ожидал), я не мог сделать какой-либо смысл данных.

Есть ли способ стать соучастником того, что мне нужно? Извлечь общее количество подключенных пользователей и, например. эхо в консоли или в элемент? Или, может быть, как получить список авторизованных пользователей и несанкционированных?

EDIT: Я хотел бы сохранить свое правописание на английском языке, я не американец. Спасибо.

ответ

29

.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

рад помочь! Мой коллега указал на две поправки: 1. Вызов 'onDisconnect()' должен быть в обратном вызове '.info/connected', потому что мы должны повторить его при повторном подключении. 2. У нас есть удобная функция под названием 'numChildren()' для возврата количества ключей в объект! Я обновил фрагмент выше, чтобы отразить это. – Anant

+0

Удивительные ребята, большое спасибо за помощь, сейчас я играю с ней уже - работает! – MrE

+2

Это кажется немного незаменимым. Есть ли способ получить целое число обратно? – Harry

0

Вот код из 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); 
} 
+0

Просьба уточнить, как этот код отвечает на вопрос. – JAL

+0

Вы создаете раздел в своей базе данных для отслеживания присутствия. При добавлении и выполнении он будет вызывать ключ, представляющий текущего пользователя, на дочерний элемент присутствия. Firebase userRef = listRef.push(); Если этот пользователь отключен, (объект Firebase existsRef), они будут удалены из списка. userRef.onDisconnect().removeValue(); Этот код отображает в журнале текущее количество пользователей, подключенных к системе в настоящее время, при условии, что все в системе выполнили этот код. См. Https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html для более надежного объяснения. –

Смежные вопросы