मैं अपने एंड्रॉइड एप्लाइज़न के लिए फायरबेस-बैकएंड का उपयोग कर रहा हूं। मैं अपनी चैट के लिए एक उपयोगकर्ता उपस्थिति प्रणाली बनाना चाहता हूं। इस प्रयोजन के लिए मैं Firebase गाइडफायरबेस: जब घटना को डिस्कनेक्ट करें?
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");
}
});
मुसीबत से पैटर्न लिया है मैं नहीं जानता है जब onDisconnect गतिविधि सक्रिय की हैं ?!
हर बार जब मैं ऐप खोलता हूं तो मैं नोड को सत्य लिखता हूं "उपयोगकर्ता/जो/कनेक्शन" लेकिन जब मैंने ऐप बंद किया तो कुछ भी खुश नहीं होगा। जब मैंने वाईफ़ाई बंद कर दिया तो बूलियन पैरामीटर भी हटाया नहीं जाएगा। ऑन डिस्कनेक्ट-इवेंट केवल तभी निकाल दिया गया जब मैंने अपने ऐप को मजबूती से रोक दिया या इस ऐप को फिर से इंस्टॉल किया या कुछ और जब मैं निर्धारित नहीं कर सका।
तो, के रूप में मैं सही समझ में मैं मैन्युअल रूप से इस तरह की घटनाओं को संभालने के लिए है:
1) मेरी ऐप को बंद;
2) वाईफाई बंद करें;
3) हो सकता है किसी और
कुछ मेरे एप्लिकेशन में उपस्थिति सुविधा बनाने के लिए? लेकिन फिर पर डिस्कनेक्ट-इवेंट को निकाल दिया जाएगा?
- ग्राहक स्पष्ट रूप से सर्वर से डिस्कनेक्ट
- ग्राहक बस गायब हो जाता है
आप अनुप्रयोग को मारने जब:
मुझे यह नहीं मिला। जब कोई उपयोगकर्ता बैक बटन दबाता है और सभी गतिविधियों को बंद करता है, तो ऑनडिस्कनेक्ट() आग नहीं होता है। लेकिन इस स्थिति में, उपयोगकर्ता को ऑफ़लाइन विचार करना चाहिए, है ना? – iForests
@IForests मुझे लगता है कि 'जब कोई उपयोगकर्ता बैक बटन दबाता है और सभी गतिविधियों को बंद करता है' को _ActivityLifecycleCallbacks_ – rookieDeveloper
@Frank_van_Puffelen में संभाला जाना चाहिए, यह पता लगाने के लिए सर्वर के अधिकतम में कितना समय लग सकता है कि ग्राहक चला गया है? और यह सर्वर के लिए मिनटों का समय लेने में व्यावहारिक नहीं है क्योंकि ऑफ़लाइन जाने से तुरंत फ़ायरबेस सर्वर में संबंधित फ़ंक्शंस को ट्रिगर करना चाहिए ताकि उपयोगकर्ता एक-दूसरे की स्थिति को समझ सकें। –