2012-07-05 16 views
44

क्या कोई ऐसी रणनीति है जो वर्तमान फ़ायरबेस ऑफ़र के भीतर काम करेगी यह पता लगाने के लिए कि क्या सर्वर कनेक्शन गुम हो गया है और/या फिर से प्राप्त हुआ है?पता लगाएं कि क्या फ़ायरबेस कनेक्शन गुम हो गया है/वापस प्राप्त किया गया है

मैं मोबाइल उपकरणों के लिए कुछ ऑफलाइन आकस्मिकताओं पर विचार कर रहा हूं और मुझे यह निर्धारित करने के लिए एक विश्वसनीय माध्यम चाहिए कि फायरबेस डेटा परत कब उपलब्ध हो।

उत्तर

64

यह एक सामान्यतः अनुरोधित सुविधा है, और हमने आपको यह करने के लिए एक एपीआई अपडेट जारी किया है!

var firebaseRef = new Firebase('http://INSTANCE.firebaseio.com'); 
firebaseRef.child('.info/connected').on('value', function(connectedSnap) { 
    if (connectedSnap.val() === true) { 
    /* we're connected! */ 
    } else { 
    /* we're disconnected! */ 
    } 
}); 

पूर्ण दस्तावेज़ https://firebase.google.com/docs/database/web/offline-capabilities पर उपलब्ध हैं।

+2

माइकल, बहुत धन्यवाद। आपकी टीम हमेशा एक कदम आगे प्रतीत होती है। – Kato

+1

एक और मुद्दा यह है कि जब आप वास्तव में कनेक्शन को बनाए रखना चाहते हैं, लेकिन आपके सर्वर नीचे जाते हैं ... और नए कनेक्शन का अनुरोध करने की बजाय, यह बार-बार 'डाउन' सर्वर से पुनः कनेक्ट करने का प्रयास करता है। :( –

+0

मामले में मामला: http://screencast.com/t/ByFTXdJP6c –

11

अपडेट किया गया: कई उपस्थिति-संबंधी सुविधाओं के लिए, यह एक ग्राहक को पता है के लिए जब यह ऑनलाइन या ऑफलाइन है उपयोगी है। फायरबेस रीयलटाइम डाटाबेस क्लाइंट /.info/connected पर एक विशेष स्थान प्रदान करते हैं जिसे ग्राहक के कनेक्शन स्थिति में हर बार अपडेट किया जाता है।

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); 
connectedRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    boolean connected = snapshot.getValue(Boolean.class); 
    if (connected) { 
     System.out.println("connected"); 
    } else { 
     System.out.println("not connected"); 
    } 
    } 

    @Override 
    public void onCancelled(DatabaseError error) { 
    System.err.println("Listener was cancelled"); 
    } 
}); 
+0

हैलो, मैं अपने प्रोजेक्ट में फायरबेस जोड़ने की कोशिश कर रहा हूं और मुझे हमेशा "कनेक्ट नहीं" मिलता है। कोई विचार क्या गलत हो सकता है? –

+0

वही है। कोई सुझाव ? –

+0

यह एंड्रॉइड प्लेटफार्म –

3

मैं इस महीने की पिछले कुछ में बदल लगता है: यहाँ एक उदाहरण है। वर्तमान में दिए गए निर्देशों का यहां हैं: https://firebase.google.com/docs/database/web/offline-capabilities

योग में:

var presenceRef = firebase.database().ref("disconnectmessage"); 
// Write a string when this client loses connection 
presenceRef.onDisconnect().set("I disconnected!"); 

और:

var connectedRef = firebase.database().ref(".info/connected"); 
connectedRef.on("value", function(snap) { 
    if (snap.val() === true) { 
    alert("connected"); 
    } else { 
    alert("not connected"); 
    } 
}); 

मैं मानता हूँ मैं कैसे संदर्भ सेट कर रहे हैं, या क्या बारे में बहुत कुछ पता नहीं है इसका मतलब है (क्या आप उन्हें पतली हवा से बाहर कर रहे हैं या क्या आपको पहले से ही उन्हें पहले से ही बनाना होगा?) या उनमें से कौन सा सर्वर पर कुछ अंतराल के विपरीत कुछ ट्रिगर करेगा, लेकिन अगर लिंक अभी भी चालू है जब आप इसे पढ़ते हैं, ए थोड़ा और पढ़ने में मदद मिल सकती है।

+0

फ़ायरबेस एक नोएसQL जेएसओएन डेटा स्टोर है, इसलिए इसमें कोई स्कीमा नहीं है। इस प्रकार, आप उन्हें पतली हवा से निकाल सकते हैं, एक मूल्य निर्धारित कर सकते हैं, और फिर वे मौजूद हैं:) – Kato

+0

ईमानदार होने के लिए ... मुझे केवल 8 साल के एसक्यूएल के बाद नोएसक्यूएल के आसपास अपने सिर को लपेटने में काफी समय लगा ... लेकिन यह वास्तव में कमाल है। – Eduard

1

एंड्रॉयड आप बस एक ही समारोह बुलाया द्वारा उपयोगकर्ता ऑफ़लाइन कर सकते हैं के लिए onDisconnect()

मैं अपने चैट एप्लिकेशन जहां उपयोगकर्ता ऑफ़लाइन पाने के लिए नेटवर्क कनेक्शन खो या उपयोगकर्ता इंटरनेट से डिस्कनेक्ट स्वचालित रूप से अगर जरूरत में से एक में ऐसा किया

DatabaseReference presenceRef = FirebaseDatabase.getInstance().getReference("USERS/24/online_status"); 

presenceRef.onDisconnect().setValue(0); 

नेटवर्क यहाँ से डिस्कनेक्ट पर मैं उपयोगकर्ता की online_status 0 जिसका क्रमांक firebase में 24 है बनाने रहा हूँ।

getReference("USERS/24/online_status") वह ऑफ़लाइन है जो आपको ऑफलाइन/ऑनलाइन पर अपडेट करने की आवश्यकता है।

आप में offline capabilities

नोट इसके बारे में पढ़ सकते हैं कि firebase समय के आसपास अमल करने के लिए onDisconnect() फ़ंक्शन 2-10 मिनट लगते हैं।

संबंधित मुद्दे