2013-04-12 9 views
15

Ho provato a giocare con presence per far visualizzare gli utenti connessi totali in un elemento. Non riuscivo davvero a capire dove guardare. Ho fatto qualcosa di simile a questo:Firebase - Conta gli utenti online

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

per provare e vedere se riuscivo a trovare qualcosa di utile in là, ma (io kinda aspettavo che) non ho potuto dare un senso dei dati.

Esiste un modo per realizzare ciò che sto cercando? Recupera il numero totale di utenti connessi ed es. echo fuori nella console o in un elemento? O forse come recuperare un elenco di utenti autorizzati e non autorizzati?

EDIT: Vorrei mantenere la mia ortografia in inglese, non sono americano. Grazie.

risposta

29

.info/connected restituirà solo le informazioni relative al fatto che il client corrente sia connesso o meno. Per mantenere un conteggio presenza, è necessario creare un contatore memorizzando le informazioni sulla presenza per ciascun utente e utilizzando setOnDisconnect(). Per esempio:

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

felici di aiutarvi! La mia collega ha sottolineato due correzioni: 1. La chiamata 'onDisconnect()' dovrebbe essere all'interno della callback '.info/connected' perché dobbiamo chiamarla di nuovo quando ci riconnettiamo. 2. Abbiamo una comoda funzione chiamata 'numChildren()' per restituire il numero di chiavi in ​​un oggetto! Ho aggiornato lo snippet qui sopra per riflettere questo. – Anant

+0

Ragazzi fantastici, grazie tante per l'aiuto, sto già giocando con esso - funziona a meraviglia! – MrE

+2

Questo sembra un po 'invalicabile. C'è un modo per ottenere di nuovo un intero? – Harry

0

Ecco il codice da Anant formattato per 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

Si prega di approfondire come questo codice risponde alla domanda. – JAL

+0

Si sta creando una sezione nel database per tenere traccia della presenza. Quando aggiunto ed eseguito invierà una chiave che rappresenta l'utente corrente sul bambino di presenza. Firebase userRef = listRef.push(); Quando l'utente viene disconnesso, (oggetto presenza FireRef) vengono rimossi dall'elenco. userRef.onDisconnect().removeValue(); Questo codice mostrerà nel registro il numero corrente di utenti attualmente connessi al sistema, supponendo che tutti sul sistema eseguano questo codice. Vedere https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html per una spiegazione più robusta. –