2013-04-12 35 views
15

Tôi đã thử chơi với presence để làm cho nó hiển thị tổng số người dùng được kết nối trong một phần tử. Tôi không thể tìm ra nơi để tìm. Tôi đã làm một điều gì đó tương tự như thế này:Firebase - Đếm số người dùng trực tuyến

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

Để thử xem liệu tôi có thể tìm thấy bất kỳ thứ gì hữu ích trong đó không, nhưng (tôi mong đợi) Tôi không thể hiểu được dữ liệu.

Có cách nào để hoàn thành những gì tôi theo sau không? Tìm nạp tổng số người dùng được kết nối và ví dụ: echo nó ra trong giao diện điều khiển hoặc một phần tử? Hoặc có thể cách lấy danh sách người dùng được ủy quyền và không được ủy quyền?

EDIT: Tôi muốn giữ chính tả bằng tiếng Anh, tôi không phải là người Mỹ. Cảm ơn bạn.

Trả lời

29

.info/connected sẽ chỉ trả về thông tin về việc liệu khách hàng hiện tại có được kết nối hay không. Để duy trì số lượng hiện diện, bạn cần phải tạo bộ đếm bằng cách lưu trữ thông tin hiện diện cho từng người dùng và sử dụng setOnDisconnect(). Ví dụ:

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

hạnh phúc để giúp đỡ! Đồng nghiệp của tôi chỉ ra hai sửa đổi: 1. Cuộc gọi 'onDisconnect()' phải nằm trong cuộc gọi lại '.info/connected' bởi vì chúng ta phải gọi lại khi chúng ta kết nối lại. 2. Chúng ta có một hàm tiện dụng gọi là 'numChildren()' để trả về số lượng các khóa trong một đối tượng! Tôi đã cập nhật đoạn mã ở trên để phản ánh điều này. – Anant

+0

Những người tuyệt vời, cảm ơn bạn rất nhiều vì sự giúp đỡ, tôi đang chơi với nó bây giờ đã - làm việc một điều trị! – MrE

+2

Điều này có vẻ hơi không thể đánh giá được. Có cách nào để lấy lại một số nguyên không? – Harry

0

Đây là mã từ Anant định dạng dành cho 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

Vui lòng giải thích cách mã này trả lời câu hỏi. – JAL

+0

Bạn đang tạo một phần trong cơ sở dữ liệu của mình để theo dõi sự hiện diện. Khi được thêm vào và thực hiện nó sẽ đẩy một phím đại diện cho người dùng hiện tại lên con hiện diện. người dùng FirebaseRef = listRef.push(); Khi người dùng đó bị ngắt kết nối, (đối tượng Firebase hiện diệnRef), họ sẽ bị xóa khỏi danh sách. userRef.onDisconnect().removeValue(); Mã này sẽ hiển thị trong nhật ký số lượng người dùng hiện đang kết nối với hệ thống, giả sử mọi người trên hệ thống đã thực thi mã này. Xem https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html để có giải thích mạnh mẽ hơn. –

Các vấn đề liên quan