Tôi đang sử dụng phụ trợ Firebase cho ứng dụng Android của mình. Tôi muốn xây dựng hệ thống hiện diện của người dùng cho cuộc trò chuyện của mình. Với mục đích này, tôi đã lấy mẫu từ căn cứ hỏa lực Hướng dẫnFirebase: khi onDisconnect kích hoạt sự kiện?
final Firebase myConnectionsRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/users/joe/connections");
// stores the timestamp of my last disconnect (the last time I was seen online)
final Firebase lastOnlineRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/users/joe/lastOnline");
final Firebase connectedRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
boolean connected = snapshot.getValue(Boolean.class);
if (connected) {
// add this device to my connections list
// this value could contain info about the device or a timestamp too
Firebase con = myConnectionsRef.push();
con.setValue(Boolean.TRUE);
// when this device disconnects, remove it
con.onDisconnect().removeValue();
// when I disconnect, update the last time I was seen online
lastOnlineRef.onDisconnect().setValue(ServerValue.TIMESTAMP);
}
}
@Override
public void onCancelled(FirebaseError error) {
System.err.println("Listener was cancelled at .info/connected");
}
});
Vấn đề là tôi không biết khi nào onDisconnect sự kiện sẽ bị sa thải ?!
Mỗi khi tôi mở ứng dụng, tôi viết TRUE cho nút "người dùng/joe/kết nối" nhưng khi tôi đóng ứng dụng, không có gì sẽ xảy ra. Khi tôi tắt WIFI, thông số boolean cũng sẽ không bị xóa. onDisconnect-event chỉ được kích hoạt khi tôi dừng ứng dụng của mình hoặc cài đặt lại ứng dụng này hoặc khi nào tôi không thể xác định được.
Vì vậy, khi tôi hiểu đúng, tôi phải xử lý các sự kiện thủ công như vậy:
1) đóng ứng dụng của tôi;
2) tắt WiFi;
3) có thể một cái gì đó khác
để tạo tính năng Hiện diện trong ứng dụng của tôi? Nhưng sau đó khi có onDisconnect-event để được kích hoạt?
Tôi không hiểu. Khi người dùng nhấn nút BACK và đóng tất cả các hoạt động, onDisconnect() sẽ không kích hoạt. Nhưng trong tình huống này, người dùng nên cân nhắc nhé, phải không? – iForests
@iForests Tôi nghĩ rằng 'Khi người dùng nhấn nút BACK và đóng tất cả hoạt động' sẽ được xử lý trong _ActivityLifecycleCallbacks_ – rookieDeveloper
@Frank_van_Puffelen mất bao lâu để máy chủ phát hiện ra rằng máy khách đã biến mất? và điều này là không thực tế cho máy chủ để mất vài phút vì đi offline nên ngay lập tức kích hoạt các chức năng liên quan trong máy chủ Firebase để người dùng hiểu được tình trạng của nhau. –