2013-04-12 19 views
15

Ich habe versucht mit etwa presence zu spielen, damit es die gesamten verbundenen Benutzer in einem Element anzeigen. Ich konnte nicht wirklich herausfinden, wo ich suchen sollte. Ich habe etwas Ähnliches wie folgt aus:Firebase - Zähle Online-Benutzer

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

Um zu versuchen und zu sehen, ob ich etwas Nützliches dort finden konnte, aber (ich erwartet hatte es irgendwie) konnte ich keinen Sinn der Daten machen.

Gibt es eine Möglichkeit, mich zu Komplizen zu machen? Holen Sie die Gesamtzahl der verbundenen Benutzer und z. echo es in der Konsole oder zu einem Element aus? Oder vielleicht, wie man eine Liste der autorisierten Benutzer und nicht autorisierten holt?

EDIT: Ich möchte meine Rechtschreibung auf Englisch behalten, ich bin nicht amerikanisch. Vielen Dank.

Antwort

29

.info/connected gibt nur Informationen darüber zurück, ob der aktuelle Client verbunden ist oder nicht. Um eine Anwesenheitszählung aufrechtzuerhalten, müssen Sie einen Zähler erstellen, indem Sie Anwesenheitsinformationen für jeden Benutzer speichern und setOnDisconnect() verwenden. Zum Beispiel:

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

glücklich zu helfen! Mein Kollege wies auf zwei Korrekturen hin: 1. Der 'onDisconnect()' Aufruf sollte innerhalb des '.info/connected' Callbacks sein, da wir ihn beim erneuten Verbinden erneut aufrufen müssen. 2. Wir haben eine praktische Funktion namens 'numChildren()', um die Anzahl der Schlüssel in einem Objekt zurückzugeben! Ich habe das obige Snippet aktualisiert, um dies widerzuspiegeln. – Anant

+0

Awesome Jungs, vielen Dank für die Hilfe, ich spiele jetzt schon damit - funktioniert ein Genuss! – MrE

+2

Dies scheint ein wenig unskalierbar. Gibt es eine Möglichkeit, eine Ganzzahl zurück zu bekommen? – Harry

0

Hier ist der der Code von Anant formatiert für 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

Bitte erläutern Sie, wie dieser Code die Frage beantwortet. – JAL

+0

Sie erstellen einen Abschnitt in Ihrer Datenbank, um Anwesenheit zu verfolgen. Wenn es hinzugefügt und ausgeführt wird, drückt es einen Schlüssel, der den aktuellen Benutzer darstellt, auf das Präsenz-Kind. Firebase userRef = listRef.push(); Wenn dieser Benutzer getrennt wird (Firebase-Objekt presenceRef), werden sie aus der Liste entfernt. userRef.onDisconnect().removeValue(); Dieser Code zeigt im Protokoll die aktuelle Anzahl der Benutzer an, die derzeit mit dem System verbunden sind, vorausgesetzt, dass alle Benutzer auf dem System diesen Code ausgeführt haben. Siehe https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html für eine robustere Erklärung. –