2013-04-12 10 views
15

Próbowałem odtwarzać z numerem presence, aby wyświetlić łączną liczbę użytkowników w elemencie. Nie mogłem naprawdę dowiedzieć się, gdzie szukać. Zrobiłem coś podobnego do tego:Firebase - policz użytkowników online

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

aby spróbować i zobaczyć, czy mogę znaleźć niczego przydatny tam, ale (I trochę spodziewał) nie mogłem żadnego sensu danych.

Czy jest jakiś sposób, aby spełnić to, o co prosiłem? Pobierz całkowitą liczbę podłączonych użytkowników i np. echo to w konsoli lub elementu? A może jak pobrać listę autoryzowanych użytkowników i nieautoryzowanych?

EDYCJA: Chciałbym zachować moją pisownię po angielsku, nie jestem Amerykaninem. Dziękuję Ci.

Odpowiedz

29

.info/connected wyświetli tylko informację o tym, czy bieżący klient jest podłączony, czy nie. Aby utrzymać liczbę obecności, musisz utworzyć licznik, przechowując informacje o obecności dla każdego użytkownika i wykorzystując numer setOnDisconnect(). Na przykład:

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

chętni do pomocy! Mój kolega zwrócił uwagę na dwie poprawki: 1. Wywołanie 'onDisconnect()' powinno znajdować się wewnątrz wywołania zwrotnego '.info/connected', ponieważ musimy je wywołać ponownie, gdy ponownie się połączymy. 2. Mamy przydatną funkcję o nazwie 'numChildren()', która zwraca liczbę klawiszy w obiekcie! Zaktualizowałem urywek powyżej, aby to odzwierciedlić. – Anant

+0

Niesamowici faceci, dziękuję bardzo za pomoc, już teraz gram z tym - działa gratka! – MrE

+2

To wydaje się nieco niewygodne. Czy istnieje sposób, aby po prostu odzyskać integer? – Harry

0

Oto kod z Anant formatowane dla Androida

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

Proszę wyjaśnić, w jaki sposób ten kod odpowiada na pytanie. – JAL

+0

Tworzysz sekcję w bazie danych, aby śledzić obecność. Po dodaniu i wykonaniu spowoduje naciśnięcie klawisza reprezentującego bieżącego użytkownika na dziecko podrzędne. Firebase userRef = listRef.push(); Po odłączeniu tego użytkownika (obiekt Firebase presenceRef) zostaną one usunięte z listy. userRef.onDisconnect().removeValue(); Ten kod wyświetli w dzienniku bieżącą liczbę użytkowników aktualnie podłączonych do systemu, zakładając, że wszyscy w systemie wykonali ten kod. Zobacz https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html, aby uzyskać bardziej szczegółowe wyjaśnienie. –