दिलचस्प पोस्ट
परिपत्र सी + + हेडर में शामिल हैं Xpath का प्रयोग करके नोड की स्थिति खोजें NHibernate.MappingException: कोई persister नहीं: XYZ अजीब अवांछित Xcode लॉग छिपाएं एसवीजी एनीमेशन IE11 पर काम नहीं कर रहा है एक वेबसाइट का परीक्षण करने का सबसे अच्छा तरीका क्या PHP नामस्थान में वेरिएबल्स होते हैं? Redux @connect डेकोरेटर में '@' (प्रतीक में) क्या है? किसी बॉर्डर के बिना किसी फ़ॉर्म को कैसे ले जाना और उसका आकार बदलना है? साफ़कर यूसीएम पीडीएफ फाइलों को मर्ज करने का प्रयास कर रहा है php मेल विशेष अक्षर utf8 दस्तावेज़ से कुछ फ़ील्ड को बाहर कैसे करें PyInstaller (–onefile) के साथ डेटा फ़ाइलों को बंडल करना नीचे के डॉट्स के साथ एंड्रॉइड व्यूपैगर onclick विकल्प टैग IE और क्रोम पर काम नहीं कर रहा है

एंड्रॉइड ऐप और वेबसर्वर के बीच डेटा को सिंक करें

मैं एक एंड्रॉइड ऐप और एक सर्वर के बीच डेटा (जैसे कि डीबी रिकॉर्ड, मीडिया) को सिंक करना चाहता हूं। यदि आपने Evernote या समान अनुप्रयोग देखा है, तो आप निश्चित रूप से समझ सकते हैं कि मेरा क्या मतलब है।

मेरे पास कुछ सवाल है (कल्पना करें कि हम डीबी रिकॉर्ड सिंक करना चाहते हैं):

  1. प्रत्येक उपयोगकर्ता के पास खुद के लिए सर्वर स्पेस का हिस्सा है (जैसे कि Evernote या Dropbox )। शायद उपयोगकर्ता सेलफोन द्वारा नए रिकॉर्ड बनाता है और सर्वर में नए रिकॉर्ड बनाता है मैं इन अभिलेखों को कैसे मिला सकता हूं? यदि एक ही आईडी के साथ रिकॉर्ड हैं तो आप मुझे किस सुझाव देते हैं?

  2. JSON को छोड़कर, क्या सेलफोन डिवाइस और सर्वर के बीच डेटा भेजने के लिए कोई तरीका है?

  3. यदि SyncAdapter और ContentProvider मेरी समस्याओं को हल कर सकता है, तो कृपया मेरे लिए बिल्कुल समझाएं (यदि आप मुझे कुछ नमूने या ट्यूटोरियल दे सकते हैं या मेरी खोज के विस्तार / मार्गदर्शन में मदद करने के लिए कोई सलाह या कीवर्ड भी सराहना की जाएगी)।

वेब के समाधान से एकत्रित समाधान "एंड्रॉइड ऐप और वेबसर्वर के बीच डेटा को सिंक करें"

मैं बड़े सवाल को संबोधित करते हुए अपने सभी सवालों का जवाब देने की कोशिश करूंगा: मैं वेबसर्वर और एंड्रॉइड ऐप के बीच डेटा को कैसे सिंक कर सकता हूं?


अपने वेबसर्वर और एंड्रॉइड ऐप के बीच डेटा को सिंक करना आपके एंड्रॉइड डिवाइस पर कुछ अलग-अलग घटकों की आवश्यकता है।

लगातार भंडारण:

यह आपके फोन वास्तव में वेबसर्वर से प्राप्त आंकड़ों को कैसे संग्रहीत करता है यह पूरा करने का एक संभावित तरीका यह है कि वह अपने स्वयं के कस्टम सामग्री प्रदाता को एक स्क्लिट डेटाबेस द्वारा समर्थित करता है। सामग्री प्रदाता के लिए एक सभ्य ट्यूटोरियल यहां पाया जा सकता है: http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

एक ContentProvider आपके संचित डेटा के साथ इंटरैक्ट करने के लिए एक सुसंगत इंटरफ़ेस को परिभाषित करता है। यदि आप चाहें तो यह अन्य एप्लिकेशन आपके डेटा के साथ बातचीत करने की अनुमति भी दे सकता है आपके ContentProvider के पीछे एक SQLite डेटाबेस, एक कैश, या किसी भी मनमाना भंडारण तंत्र हो सकता है।

हालांकि मैं निश्चित रूप से एक Sqlite डेटाबेस के साथ एक ContentProvider का उपयोग करने की सिफारिश करेगा, लेकिन आप चाहते थे कि किसी भी जावा आधारित संग्रहण तंत्र का उपयोग कर सकते हैं।

डेटा इंटरचेंज प्रारूप:

यह प्रारूप आपके वेबसर्वर और आपके एंड्रॉइड ऐप के बीच डेटा भेजने के लिए है इन दो सबसे लोकप्रिय प्रारूप हैं ये एक्सएमएल और जेएसओएन हैं। जब आप अपना प्रारूप चुनते हैं, तो आपको उस बारे में सोचना चाहिए कि किस प्रकार की क्रमबद्धता पुस्तकालय उपलब्ध हैं मुझे पता है कि जीएसएन धारावाहिककरण के लिए एक शानदार पुस्तकालय है जिसे जीएसएन: https://github.com/google/gson कहते हैं , हालांकि मुझे यकीन है कि XML के समान पुस्तकालय मौजूद हैं I

सिंक्रनाइज़ेशन सेवा

आपको किसी प्रकार का अतुल्यकालिक कार्य चाहिए जो आपके सर्वर से नया डेटा प्राप्त कर सकता है और सर्वर की सामग्री को प्रतिबिंबित करने के लिए मोबाइल सामग्री को ताज़ा कर सकता है। जब भी आप सामग्री में स्थानीय परिवर्तन करते हैं और उन परिवर्तनों को प्रतिबिंबित करना चाहते हैं, तब भी आप सर्वर को सूचित करना चाहेंगे। एंड्रॉइड SyncAdapter पैटर्न को आसानी से इस पैटर्न को हल करने के लिए एक तरीका प्रदान करता है। आपको उपयोगकर्ता खातों को पंजीकृत करने की आवश्यकता होगी, और फिर एंड्रॉइड आपके लिए बहुत सारे जादू प्रदर्शन करेगा, और आपको अपने आप समन्वयित करने की अनुमति देगा। यहां एक अच्छा ट्यूटोरियल है: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/


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

अगर हम आज के बारे में सोचते हैं , तो उत्तर बहुत ही पुरस्कृत है। जैसा कि हम जानते हैं कि हमारे पास कई नए लाइब्रेरी हैं जो आपको इस प्रकार के अनुप्रयोग बनाने में मदद कर सकते हैं।

आपको निम्न विषयों को सीखना चाहिए जो आपकी मदद करेंगे:

  • SyncAdapter: आपके एप में सिंक एडेप्टर घटक डिवाइस और सर्वर के बीच डेटा स्थानांतरित करने वाले कार्यों के लिए कोड को एनक्यूलेट करता है। शेड्यूलिंग के आधार पर और आप अपने ऐप में उपलब्ध कराते हैं, सिंक एडेप्टर फ्रेमवर्क सिंक एडेप्टर घटक में कोड चलाता है।

  • RealM : Realm एक मोबाइल डेटाबेस है: SQLite और कोर डेटा के लिए एक प्रतिस्थापन

  • एंड्रॉइड और जावा द्वारा स्क्वायर के लिए प्रकार-सुरक्षित HTTP क्लाइंट को रेट्रोफ़िट करें, एक स्मार्ट-टू-टू-टू-यूज-रिस्ट्रॉफ़्ट अवश्य अवश्य अवश्य जानें

और डेटाबेस के लिए आपके सिंक लॉजिक की तरह: सर्वर पर MySQL डाटाबेस के साथ एंड्रॉइड फोन पर SQLite डेटाबेस सिंक कैसे करें?

सभी नयी शिक्षार्थी के लिए सर्वश्रेष्ठ भाग्य 🙂

यदि आप इसे स्वयं लिखते हैं तो ये कुछ दिमागें रखने के लिए हैं

डिवाइस और सिंक सर्वर के बीच उचित प्रमाणीकरण

डिवाइस और सर्वर के बीच एक सिंक प्रोटोकॉल यह आम तौर पर 3 चरणों, प्रमाणीकरण, डाटा एक्सचेंज, स्टेटस एक्सचेंज (जो कामकाज में काम किया और जो असफल रहा)

अपने पेलोड प्रारूप को चुनें मैं सिंकएमएल आधारित एक्सएमएल को वास्तविक डेटा के प्रतिनिधित्व के लिए JSON आधारित प्रारूप के साथ मिश्रित करता हूं। तो प्रोटोकॉल के लिए SyncML, और वास्तविक डेटा के लिए JSON विमर्श किया जा रहा है। JSON Array का उपयोग करते समय डेटा को जोड़ते समय हमेशा पसंदीदा होता है क्योंकि यह JSON सरणी का उपयोग कर डेटा तक पहुंचना आसान है।

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

सर्वर पर डेटा परिवर्तन के रूप में एक सिंक सत्र शुरू करने के लिए सर्वर से डिवाइस पर संवाद करने का एक तरीका होना चाहिए। आप सी 2 डीएम का उपयोग कर सकते हैं या अपना खुद का सतत टीसीपी आधारित संचार लिख सकते हैं। टीसीपी दृष्टिकोण बहुत सीमलेस है

कई डिवाइसों में डेटा परिवर्तनों को दोहराने का एक तरीका

और अंतिम लेकिन कम से कम, संघर्ष का पता लगाने और संभाल करने का एक तरीका है

आशा है कि यह एक अच्छा प्रारंभिक बिंदु के रूप में मदद करता है।

@ ग्रांटिस्मो समग्र पर एक महान स्पष्टीकरण प्रदान करता है। यदि आप जानना चाहते हैं कि लोग वास्तव में यह काम कर रहे हैं तो मैं आपको सुझाव देता हूं कि Google ने 2014 के Google IO App के लिए कैसे किया (यह हमेशा इन ऐप के स्रोत कोड पर एक गहरी नज़र डालने के लायक है जो वे जारी करते हैं। वहां से बहुत कुछ सीखना है)

यहां इस बारे में एक ब्लॉग पोस्ट है: http://android-developers.blogspot.com.br/2014/09/conference-data-sync-gcm-google-io.html

मूल रूप से, आवेदन पक्ष पर: सिग्नलिंग के लिए जीसीएम, डेटा प्राप्ति के लिए सिंक एडेप्टर और सामग्री प्रदाता के साथ ठीक से बात करने के लिए जो चीजें लगातार बनाए रखेगी (हाँ, यह ऐप के अन्य हिस्सों से सीधे पहुंच से डीबी को अलग करता है)।

इसके अलावा, यदि आप 2015 के कोड पर एक नज़र रखना चाहते हैं: https://github.com/google/iosched

मैं आप को ढुलाई का सुझाव दे सकता हूँ पूर्ण सिंक्रनाइज़ेशन समर्थन के साथ डेटाबेस-के-एक-सेवा है

उनके पास एक निःशुल्क स्तरीय है

Parseplatform.org को देखें यह ओपनसोर्स परियोजना है

(साथ ही आप back4app.com पर उपलब्ध वाणिज्यिक पैकेज के लिए जा सकते हैं।)

यह एक बहुत ही सरल और उपयोगकर्ता के अनुकूल सर्वर साइड डेटाबेस सेवा है जो एक महान एंड्रॉइड क्लाइंट साइड एपीआई देती है

यह पूरा करने के लिए एक सर्वर साइड एप्लिकेशन है जो डेटा के लिए प्रतीक्षा करता है। डेटा जावा में HttpRequest वस्तुओं का उपयोग करके भेजा जा सकता है या आप अपनी स्वयं की TCP/IP डेटा ट्रांसफर उपयोगिता लिख ​​सकते हैं। डेटा को JSON प्रारूप या किसी अन्य प्रारूप का उपयोग करके भेजा जा सकता है जो आपको उपयुक्त लगता है। इसके अलावा डेटा को सर्वर पर भेजने से पहले एन्क्रिप्ट किया जा सकता है अगर इसमें संवेदनशील जानकारी है सभी सर्वर अनुप्रयोगों को करना है, बस HttpRequests के आने के लिए इंतजार करना और डेटा को पार्स करना और इसे कहीं भी स्टोर करना है।

उदाहरण के लिए, आप तालिका को todoTable करना चाहते हैं, MySql से todoTable तक टेबल

सबसे पहले, एक स्तंभ नाम version (type INT) को todoTable में todoTable , दोनों Sqlite और MySql यहां छवि विवरण दर्ज करें

दूसरा, एक स्तंभ नाम currentVersion(INT) एक कॉलम नाम currentVersion(INT) साथ बनाएँ
यहां छवि विवरण दर्ज करें

MySQL में, जब आप todoTable लिए एक नया आइटम todoTable या आइटम को अपडेट करते हैं, तो आपको इस आइटम के संस्करण को +1 से अपग्रेड करना होगा और वर्तमान संस्करण को अपग्रेड करना currentVersion यहां छवि विवरण दर्ज करें

एंड्रॉइड में, जब आप सिंक करना चाहते हैं (मैन्युअल प्रेस सिंक बटन या अवधि के साथ चलाने वाली सेवा से):

आप SQL सर्वर के साथ अनुरोध वर्तमान संस्करण (वर्तमान में 1 है) भेज देंगे।
फिर सर्वर में, आप पाते हैं कि MySql में किस आइटम में Sqlite वर्जन (1) से अधिक संस्करण मान है, तो एंड्रॉइड पर प्रतिक्रिया (इस उदाहरण में संस्करण 3 के साथ आइटम 3 एंड्रॉइड पर प्रतिक्रिया देगा)

SQLite में, आप todoTable नया आइटम जोड़ या अद्यतन todoTable और वर्तमान संस्करण को अपग्रेड करेंगे

मैं हेसन के समान द्विआधारी webservice प्रोटोकॉल का उपयोग करने का सुझाव दूंगा यह बहुत अच्छी तरह से काम करता है और उनके पास एक एंड्रॉइड कार्यान्वयन है यह थोड़ा भारी हो सकता है, लेकिन उस पर निर्भर करता है जो आप निर्माण कर रहे हैं। उम्मीद है की यह मदद करेगा।

Google क्लाउड मेसेजिंग का उपयोग क्यों न करें? यहां लिंक है: http://developer.android.com/google/gcm/index.html

@Grantismo एंड्रॉइड सिंक घटकों के एक महान सिंहावलोकन देता है

सिंक मैनेजर एंड्रॉइड लाइब्रेरी एंड्रॉइड सिंक फ़्रेमवर्क (एब्स्ट्रेटट्रेड्रेड सिंकएडैप्टर.ऑपरपरसिंक्स) में प्लग करने के लिए एक सरल 2-रास्ता सिंक कार्यान्वयन प्रदान करता है।

https://github.com/sschendel/SyncManagerAndroid