2013-05-29 13 views
6

मैं वर्तमान में एंड्रॉइड/आईओएस के लिए एक परीक्षण अनुप्रयोग बनाने के लिए कोणीय जेएस और फोनगैप का उपयोग कर रहा हूं।डिवाइस ऑनलाइन होने पर फ़ायरबेस के साथ ऑफलाइन डेटाबेस को सिंक कैसे करें?

ऐप फ़ायरबेस डेटाबेस में संग्रहीत केवल टेक्स्ट डेटा का उपयोग करता है। मैं चाहता हूं कि ऐप का अपना स्थानीय डेटाबेस हो (डिवाइस ऑफ़लाइन होने पर उपयोग किया जाता है) और कभी-कभी (जब डिवाइस ऑनलाइन हो) फ़ायरबेस डेटाबेस के साथ सिंक हो।

ऑफ़लाइन मोड फोनगैप/कॉर्डोवा के स्टोरेज एपीआई का उपयोग करता है। क्या मैं बस डिवाइस के ऑनलाइन राज्य की जांच कर सकता हूं और समय-समय पर ऑनलाइन डेटाबेस बैकअप ले सकता हूं?

इस पर कोई संकेत है कि मैं इसे कैसे प्राप्त कर सकता हूं? पिछली बार एक समान सवाल पूछा गया था, जवाब "अभी तक नहीं" था ... (here) ... क्योंकि यह एक काल्पनिक फायरबेस सुविधा पर केंद्रित था।

उत्तर

10

यदि फ़ायरबेस प्रारंभ में ऑनलाइन है और अस्थायी रूप से इसके कनेक्शन को खो देता है, तो बाद में फिर से कनेक्ट हो जाता है, यह तब स्थानीय डेटा को सिंक करेगा। तो कई मामलों में, एक बार फायरबेस ऑनलाइन हो जाने पर, आप केवल आउटेज के दौरान फायरबेस को धक्का दे सकते हैं।

सही ऑफ़लाइन उपयोग के लिए, आप शायद डिवाइस की स्थिति की निगरानी करना चाहेंगे, और .info/connected भी देखेंगे जब फ़ायरबेस कनेक्ट होता है।

new Firebase('URL/.info/connected').on('value', function(ss) { 
    if(ss.val() === null) /* firebase disconnected */ 
    else /* firebase reconnected */ 
}); 

तरह से वर्तमान में Firebase टूलसेट के साथ इस लक्ष्य को हासिल करने के लिए, जब तक यह सच ऑफ़लाइन भंडारण का समर्थन करता है,

  1. स्थानीय डेटा सरल और छोटे
  2. जब डिवाइस ऑनलाइन आता है, परिवर्तित रहेगा स्थानीय स्तर पर उपयोग set() JSON
  3. को
  4. डाटा संग्रहित उचित पथ
में Firebase में डेटा को बचाने के लिए

इसके अतिरिक्त, यदि डिवाइस ऑफ़लाइन होने पर ऐप लोड हो जाता है, तो किसी कारण से, आप डेटा ("प्रारंभ करने" के लिए सेट() को कॉल करके (प्राइम "फायरबेस को" प्राइम "कर सकते हैं। फिर आप फायरबेस को सामान्य के रूप में उपयोग कर सकते हैं (जैसे कि यह ऑनलाइन था) जब तक कि यह भविष्य में किसी भी समय ऑनलाइन नहीं आ जाता है (आप अपनी स्थानीय प्रतिलिपि को उस मामले को संभालने के लिए भी स्टोर करना चाहते हैं जहां यह कभी नहीं करता)।

जाहिर है, बेहतर बेहतर है। समवर्ती संशोधन, स्थानीय भंडारण आकार की सीमाएं, और कई अन्य कारक जल्दी से किसी ऑफ़लाइन स्टोरेज समाधान जटिल और समय लेने के लिए जमा हो जाएंगे।

+0

सुझावों के लिए धन्यवाद, मैं इसे तुरंत लागू करने की कोशिश करूंगा। करने के लिए अगली बात ऑफ़लाइन शुरू करने में सक्षम होगी ... –

+0

हाय, मुझे समझ में नहीं आता कि आप किसके साथ क्या मतलब है ... आप फायरबेस द्वारा "प्राइम" कर सकते हैं ... Thx – david

+0

फायरबेस प्रमाणीकरण से निपटने के लिए कोई भी समाधान ? टोकन को स्थानीय रूप से कैशिंग करना और एप्लिकेशन को लटकाने के बिना लॉगिन की इजाजत देना? – MrYellow

0

कुछ समय के बाद, मैं काटो का जवाब @ करने के लिए .02 जोड़ना चाहते हैं:

ऑप्ट बजाय snapshot.val() === null बुलाने की snapshot.exists() कॉल करने के लिए। documentation अंक के रूप में, मौजूद है() snapshot.val() को शून्य से तुलना करने से थोड़ा अधिक कुशल है।

और यदि आप डेटा अपडेट करना चाहते हैं तो update() विधि का उपयोग करना चाहते हैं, तो set(), क्योंकि आखिरी बार आपके फ़ायरबेस डेटा को ओवरराइट कर देगा। आप here पढ़ सकते हैं।

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