অ্যান্ড্রয়েড অ্যাপ এবং ওয়েবসারভারের মধ্যে ডেটা সিঙ্ক করুন [বন্ধ]


262

আমি একটি অ্যান্ড্রয়েড অ্যাপ এবং একটি সার্ভারের মধ্যে ডেটা (যেমন ডিবি রেকর্ড, মিডিয়া) সিঙ্ক করতে চাই। আপনি যদি দেখতে পেয়েছেন Evernoteবা অনুরূপ অ্যাপ্লিকেশন, আপনি অবশ্যই বুঝতে চাইছেন I

আমার কিছু প্রশ্ন আছে (কল্পনা করুন আমরা ডিবি রেকর্ডগুলি সিঙ্ক করতে চাই):

  1. প্রতিটি ব্যবহারকারীর নিজের জন্য সার্ভার স্পেসের একটি অংশ থাকে (যেমন Evernoteবা Dropbox)। হতে পারে ব্যবহারকারী সেলফোন দ্বারা নতুন রেকর্ড তৈরি করে এবং সার্ভারে নতুন রেকর্ড তৈরি করে। আমি এই রেকর্ডগুলি একসাথে কীভাবে মিলাতে পারি? যদি একই আইডির সাথে রেকর্ড থাকে তবে আপনি আমাকে কোন অ্যালগরিদম প্রস্তাব করবেন?

  2. ছাড়া তাদেরকে JSON , সেখানে সেলফোনের ডিভাইস এবং সার্ভারের মধ্যে পাঠাতে ডেটার জন্য কোন ভাবেই নিশ্চিত?

  3. তাহলে SyncAdapter এবং ContentProvider আমার সমস্যার সমাধান করতে পারে আমার জন্য ঠিক ব্যাখ্যা দয়া করে। (আপনি যদি আমার কাছে কিছু নমুনা বা টিউটোরিয়াল অফার করতে পারেন বা আমার অনুসন্ধানকে প্রশস্ত / গাইড করতে সহায়তা করার জন্য কোনও পরামর্শ বা কীওয়ার্ডও প্রশংসা করা হবে)।


1
প্রথমে আপনাকে সার্ভারের সাথে আপনার যোগাযোগ প্রোটোকলটি নির্ধারণ করতে (সিদ্ধান্ত নেওয়ার) দরকার - অতএব - আপনি কোন ডেটা স্থানান্তর করতে পারেন এবং কীভাবে।
hovanessyan

এটি আমার জন্য গুরুত্বপূর্ণ, এসকিউএলাইট ডেটা স্থানান্তর করুন। তবে আমি কীভাবে অন্যান্য ডেটা স্থানান্তর করব তা জানতাম। প্রোটোকল সম্পর্কে আপনার গড় বুঝতে পারি না। আরও ব্যাখ্যা করুন।
ওমিদ নাজিফি

প্রোটোকলের মাধ্যমে আমি এই সাধারণটি
উইকিপিডিয়া.

1
কোনিসিঙ্ক চেষ্টা করুন, কনিলেবসের একটি পণ্য যা বিভিন্ন প্ল্যাটফর্ম (অ্যান্ড্রয়েড, উইন্ডোজ, আইওএস), ওয়েবসার্ভারস, ডেটা সরবরাহকারী (বিক্রয়বাহিনী, এসএপি সরবরাহকারী), ডাটাবেসগুলি (স্কেলসারভার, মাইএসকিএল ...) জুড়ে শেষ থেকে শেষের সমাধান সরবরাহ করে
সাইমাদান

উত্তর:


311

আমি আপনার সমস্ত প্রশ্নের উত্তরটি বৃহত্তর প্রশ্নে সম্বোধন করে চেষ্টা করব: আমি কীভাবে কোনও ওয়েবসভার এবং একটি অ্যান্ড্রয়েড অ্যাপের মধ্যে ডেটা সিঙ্ক করতে পারি?


আপনার ওয়েবসারভার এবং একটি অ্যান্ড্রয়েড অ্যাপের মধ্যে ডেটা সিঙ্ক করার জন্য আপনার অ্যান্ড্রয়েড ডিভাইসে বেশ কয়েকটি বিভিন্ন উপাদান প্রয়োজন।

ক্রমাগত স্টোরেজ:

আপনার ফোনটি ওয়েব সার্ভারের কাছ থেকে প্রাপ্ত ডেটাটি এইভাবে সংরক্ষণ করে। এটি সম্পাদনের জন্য একটি সম্ভাব্য পদ্ধতি হ'ল স্ক্লাইট ডেটাবেসের সাহায্যে আপনার নিজস্ব কাস্টম সামগ্রী সরবরাহ করা । সামগ্রী সরবরাহকারীর জন্য একটি শালীন টিউটোরিয়াল এখানে পাওয়া যাবে: http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

একটি সামগ্রীর সরবরাহকারী আপনার সঞ্চিত ডেটার সাথে ইন্টারঅ্যাক্ট করার জন্য একটি সামঞ্জস্যপূর্ণ ইন্টারফেস সংজ্ঞায়িত করে। আপনি চাইলে এটি অন্যান্য অ্যাপ্লিকেশনগুলিকে আপনার ডেটার সাথে ইন্টারঅ্যাক্ট করার অনুমতিও দিতে পারে। আপনার কন্টেন্টপ্রোভাইডারের পিছনে স্ক্লাইট ডাটাবেস, ক্যাশে বা যেকোন স্বেচ্ছাসেবী সংগ্রহস্থল হতে পারে।

যদিও আমি অবশ্যই একটি ব্যবহার সুপারিশ করবে ContentProvider একটি SQLite ডাটাবেস সঙ্গে আপনি আপনি চেয়েছিলেন কোন জাভা ভিত্তিক সংগ্রহস্থলের প্রক্রিয়া ব্যবহার করতে পারে।

ডেটা ইন্টারচেঞ্জ ফর্ম্যাট:

এটি আপনার ওয়েবসারভার এবং আপনার অ্যান্ড্রয়েড অ্যাপের মধ্যে ডেটা প্রেরণের জন্য আপনি যে ফর্ম্যাটটি ব্যবহার করেন এটি। এই দিনগুলিতে দুটি জনপ্রিয় ফর্ম্যাটগুলি হ'ল এক্সএমএল এবং জেএসএন। আপনার ফর্ম্যাটটি চয়ন করার সময়, আপনার কী ধরণের সিরিয়ালাইজেশন লাইব্রেরি উপলব্ধ তা নিয়ে ভাবা উচিত। আমি জানি যে জসন সিরিয়ালাইজেশনের জন্য একটি চমত্কার গ্রন্থাগার রয়েছে যার নাম জিএসন: https://github.com/google/gson , যদিও আমি নিশ্চিত XML- এর জন্য অনুরূপ লাইব্রেরি রয়েছে।

সিঙ্ক্রোনাইজেশন পরিষেবা

আপনি এমন এক ধরণের অ্যাসিনক্রোনাস টাস্ক চাইবেন যা আপনার সার্ভার থেকে নতুন ডেটা পেতে পারে এবং সার্ভারের সামগ্রীকে প্রতিবিম্বিত করতে মোবাইল সামগ্রীকে রিফ্রেশ করতে পারে। আপনি যখনই সামগ্রীতে স্থানীয় পরিবর্তন করবেন এবং এই পরিবর্তনগুলি প্রতিবিম্বিত করতে চান তখন আপনি সার্ভারকেও জানাতে চাইবেন। সহজেই এই প্যাটার্নটি সমাধান করার উপায় হিসাবে অ্যান্ড্রয়েড সিঙ্কএডাপ্টার প্যাটার্ন সরবরাহ করে । আপনাকে ব্যবহারকারীর অ্যাকাউন্টগুলি নিবন্ধিত করতে হবে এবং তারপরে অ্যান্ড্রয়েড আপনার জন্য প্রচুর যাদু সম্পাদন করবে এবং আপনাকে স্বয়ংক্রিয়ভাবে সিঙ্ক করার অনুমতি দেবে। এখানে একটি ভাল টিউটোরিয়াল: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/


আপনি কীভাবে রেকর্ডগুলি একই কিনা তা সনাক্ত করতে পারেন তবে সাধারণত আপনি একটি অনন্য আইডি দিয়ে আইটেম তৈরি করেন যা আপনি অ্যান্ড্রয়েড ডিভাইস এবং সার্ভার উভয়তেই সঞ্চয় করেন। আপনি একই রেফারেন্সটি উল্লেখ করছেন তা নিশ্চিত করতে আপনি এটি ব্যবহার করতে পারেন। তদাতিরিক্ত, আপনি সর্বদা সর্বাধিক নতুন ডেটা পেয়ে যাচ্ছেন তা নিশ্চিত করার জন্য আপনি "আপডেট_এট" এর মতো কলামের বৈশিষ্ট্যগুলি সংরক্ষণ করতে পারেন, বা আপনি নতুনভাবে লিখিত ডেটাতে দুর্ঘটনাক্রমে লেখেন না।


3
বিপুল পরিমাণে তথ্য কী? আমি কীভাবে সিঙ্ক করতে পারি?
প্রতীক বুটানি

4
খুব সুন্দরভাবে ব্যাখ্যা করা হয়েছে আমার কেবল একটি নোট আছে ... সিঙ্কএডাপ্টার -> "প্রচুর যাদু সম্পাদন করুন"। আমি আশা করি আপনি এটি কালো যাদু হিসাবে উল্লেখ করছেন ... এটি সম্পূর্ণ খারাপ।
এমআরড্রিগস

@ এমড্রড্রিগস: সিঙ্কএডাপ্টার বিকাশকারীদের জন্য কালো যাদু হতে পারে তবে এটি স্থায়িত্ব এবং কার্যকারিতার জন্য যাদু করতে পারে, এটি অন্যান্য
লিবসের

2
অ্যান্ড্রয়েড ডিভাইসের সাথে এটি ওয়েবসাইসিসকে কী সিঙ্ক করতে হবে? বসন্ত দিয়ে কি সম্ভব?
jublikon

58

আমরা যদি আজকে নিয়ে চিন্তা করি , গৃহীত উত্তরগুলি খুব পুরানো। যেমনটি আমরা জানি যে আমাদের কাছে অনেকগুলি নতুন গ্রন্থাগার রয়েছে যা আপনাকে এই ধরণের অ্যাপ্লিকেশন তৈরি করতে সহায়তা করতে পারে।

আপনার নিম্নলিখিত বিষয়গুলি শিখতে হবে যা আপনাকে অবশ্যই সহায়তা করবে:

  • সিঙ্কএডাপ্টার: আপনার অ্যাপ্লিকেশানের সিঙ্ক অ্যাডাপ্টার উপাদানটি ডিভাইস এবং সার্ভারের মধ্যে ডেটা স্থানান্তর করে এমন কার্যগুলির জন্য কোডকে এনপ্যাপুলেট করে । আপনার অ্যাপ্লিকেশনটিতে আপনি নির্ধারিত সময়সূচী এবং ট্রিগারগুলির উপর ভিত্তি করে সিঙ্ক অ্যাডাপ্টার কাঠামোটি সিঙ্ক অ্যাডাপ্টার উপাদানটিতে কোড চালায়।

  • রাজ্য : রাজ্যটি একটি মোবাইল ডাটাবেস: এসকিউএলাইট এবং কোর ডেটার পরিবর্তে।

  • রেট্রোফিট প্রকার নিরাপদ Android এবং জাভা Square দ্বারা জন্য HTTP ক্লায়েন্ট, ইনকর্পোরেটেড শিখতে হবে একটি স্মার্ট-ওয়ে-থেকে-ব্যবহার-রেট্রোফিট

এবং ডাটাবেসের জন্য আপনার সিঙ্ক যুক্তি যেমন: সার্ভারে মাইএসকিউএল ডাটাবেসের সাথে অ্যান্ড্রয়েড ফোনে এসকিউএল ডাটাবেস কীভাবে সিঙ্ক করবেন?

সকল নতুন শিক্ষার্থীর জন্য শুভকামনা। :)


একটি স্মার্ট-উপায়-থেকে-ব্যবহার-পুনঃনির্মাণের লিঙ্কটি মারা গেছে
গ্রেগ হলস্ট

@ গ্রেগহলস্ট আপডেট হয়েছে।
প্রতীক বুটানি

3
এখনও নিচে। নাকি লগইন দরকার? আর্কাইভ.আরগতে এটি রয়েছে: web.archive.org/web/20160316222227/https://futurestud.io/blog/…
ববপল

24

আপনি যদি এটি নিজের লেখেন তবে এগুলি মনে রাখার কয়েকটি বিষয়

ডিভাইস এবং সিঙ্ক সার্ভারের মধ্যে যথাযথ প্রমাণীকরণ

ডিভাইস এবং সার্ভারের মধ্যে একটি সিঙ্ক প্রোটোকল। এটি সাধারণত 3 টি ধাপে, প্রমাণীকরণ, ডেটা এক্সচেঞ্জ, স্ট্যাটাস এক্সচেঞ্জ (কোন অপারেশনগুলি কাজ করেছে এবং কোনটি ব্যর্থ হয়েছে)

আপনার পেডলোড ফর্ম্যাটটি চয়ন করুন। আসল ডেটা উপস্থাপনের জন্য আমি সিএসএমএল ভিত্তিক এক্সএমএল জেএসএন ভিত্তিক ফর্ম্যাটটির সাথে মিশ্রিত করার পরামর্শ দিচ্ছি। তাই প্রোটোকলের জন্য সিঙ্কএমএল এবং আসল ডেটা আদান-প্রদানের জন্য জেএসএন। ডেটা ম্যানিপুলেট করার সময় জেএসএন অ্যারে ব্যবহার করা সর্বদা পছন্দ করা হয় কারণ জেএসএন অ্যারে ব্যবহার করে ডেটা অ্যাক্সেস করা সহজ।

উভয় ক্লায়েন্ট এবং সার্ভারে ডেটা পরিবর্তনের উপর নজর রাখা। আপনি আইডির একটি চেঞ্জলগ বজায় রাখতে পারেন যা একটি সিঙ্ক সেশনের সময় পরিবর্তন এবং এগুলি বেছে নিতে পারে। এছাড়াও, পরিবর্তনগুলি সাফ করুন কারণ অবজেক্টগুলি সফলভাবে সিঙ্ক্রোনাইজ হয়েছে। আপনি সিঙ্ক্রোনাইজেশন স্থিতি, অর্থাৎ সিঙ্কের শেষ সময়টি নিশ্চিত করতে বুলিয়ান পরিবর্তনশীলও ব্যবহার করতে পারেন। শেষ ব্যবহারকারীদের জন্য শেষ সিঙ্কটি শেষ হওয়ার সময়টি সনাক্ত করা সহায়ক হবে।

সার্ভারে ডেটা পরিবর্তনের সাথে সাথে একটি সিঙ্ক সেশন শুরু করতে সার্ভার থেকে ডিভাইসে যোগাযোগ করার একটি উপায় থাকা দরকার। আপনি সি 2 ডিএম ব্যবহার করতে পারেন বা আপনার নিজস্ব ক্রমাগত টিসিপি ভিত্তিক যোগাযোগ লিখতে পারেন। টিসিপি অ্যাপ্রোচ অনেকটা নির্বিঘ্ন

একাধিক ডিভাইস জুড়ে ডেটা পরিবর্তনগুলি প্রতিলিপি করার একটি উপায়

এবং শেষ কিন্তু সর্বনিম্ন নয়, দ্বন্দ্বগুলি সনাক্ত এবং পরিচালনা করার একটি উপায়

আশা করি এটি একটি ভাল সূচনা পয়েন্ট হিসাবে সহায়তা করবে।


14

@ গ্রান্টিজো সামগ্রিকভাবে একটি দুর্দান্ত ব্যাখ্যা প্রদান করে। কারা লোকেরা আসলে এই জিনিসগুলি করছে তা যদি আপনি জানতে চান তবে আমি আপনাকে ২০১৪ সালের গুগল আইও অ্যাপ্লিকেশনটির জন্য গুগল কীভাবে দেখেছিল তা একবার পর্যালোচনা করতে পরামর্শ দিই (তারা প্রকাশিত হওয়া এই অ্যাপসের উত্স কোডটি সর্বদা গভীরভাবে বিবেচনা করা উচিত There সেখান থেকে অনেক কিছু শিখতে হবে)।

এটি সম্পর্কে একটি ব্লগ পোস্ট এখানে রয়েছে: http://android-developers.blogspot.com.br/2014/09/conferences-data-sync-gcm-google-io.html

মূলত, অ্যাপ্লিকেশনটির দিকে: সিগন্যালিংয়ের জন্য জিসিএম, ডেটা আনার জন্য বিষয়বস্তু সরবরাহকারীর সাথে সঠিকভাবে কথা বলার জন্য সিঙ্ক অ্যাডাপ্টার যা জিনিসগুলিকে স্থির করে তুলবে (হ্যাঁ, এটি অ্যাপের অন্যান্য অংশ থেকে সরাসরি অ্যাক্সেস থেকে ডিবিকে পৃথক করে)।

এছাড়াও, আপনি যদি 2015 এর কোডটি একবার দেখতে চান: https://github.com/google/iosched ios


গুগল আইও অ্যাপ্লিকেশনটির সোর্স কোডটি আইএমওতে বেশ কার্যকর!
রিচিক

10

উদাহরণস্বরূপ, যদি আপনি টেবিল সিঙ্ক করতে চান todoTableথেকে MySqlথেকেSqlite

প্রথমত, একটি কলাম নাম তৈরি version (type INT)মধ্যে todoTableউভয়ের জন্য SqliteএবংMySql এখানে চিত্র বর্ণনা লিখুন

দ্বিতীয়ত, একটি database_versionকলামের নাম সহ একটি টেবিলের নাম তৈরি করুনcurrentVersion(INT)
এখানে চিত্র বর্ণনা লিখুন

ইন MySql, আপনি যখন আইটেমে কোনও নতুন আইটেম যুক্ত করবেন todoTableবা আপডেট করবেন, আপনাকে অবশ্যই এই আইটেমটির সংস্করণটি +1 করে আপগ্রেড করতে হবে এবং এছাড়াও আপগ্রেড করতে হবেcurrentVersion এখানে চিত্র বর্ণনা লিখুন

ইন Android, আপনি যখন সিঙ্ক করতে চান (ম্যানুয়াল প্রেস সিঙ্ক বোতাম বা পিরিয়ড সময়ের সাথে চালিত কোনও পরিষেবা দ্বারা):

আপনি Sqliteসার্ভারে কারেন্ট ভার্সন (বর্তমানে এটি 1) এর মাধ্যমে অনুরোধটি প্রেরণ করবেন ।
তারপরে সার্ভারে, আপনি আবিষ্কার করেন যে কোনও আইটেমের MySqlসংস্করণ মান বর্তমানের সংস্করণ Sqlite(1) এর চেয়ে বেশি রয়েছে তারপরে অ্যান্ড্রয়েডের প্রতিক্রিয়া (উদাহরণস্বরূপ সংস্করণ 2 সহ আইটেম 3 অ্যান্ড্রয়েডের প্রতিক্রিয়া জানাবে)

ইন SQLite, আপনি todoTableবর্তমান সংস্করণে নতুন আইটেম যুক্ত এবং আপডেট করবেন


1
আপনার ধারণা উজ্জ্বল তবে এখনও টেবিলের নকশা সঠিকভাবে বুঝতে পারছেন না। বিশ্রাম পরিষেবা এবং যথাযথ সিঙ্ক্রোনাইজেশন পরিষেবার পাশাপাশি এটি কাজ করে
অহসানালী সুথার

6

parseplatform.org । এটি ওপেনসোর্স প্রকল্প।

(পাশাপাশি আপনি back4app.com এ উপলব্ধ বাণিজ্যিক প্যাকেজের জন্য যেতে পারেন ))

এটি একটি খুব সোজা ফরোয়ার্ড এবং ব্যবহারকারী বান্ধব সার্ভার পার্শ্ব ডাটাবেস পরিষেবা যা একটি দুর্দান্ত অ্যান্ড্রয়েড ক্লায়েন্ট সাইড এপিআই দেয়


অফার যে নিখরচায় পরিকল্পনা কি?
প্রখর মোহন শ্রীবাস্তব


4
আপনি এখনও parse.com কার্যকারিতা ব্যবহার করতে পারেন, কিন্তু আপনার নিজের সার্ভারে, তারা
খোলা হয়েছে

3

এটির জন্য একটি সার্ভার সাইড অ্যাপ্লিকেশন রয়েছে যা ডেটার জন্য অপেক্ষা করে। HttpRequestজাভাতে অবজেক্ট ব্যবহার করে ডেটা প্রেরণ করা যেতে পারে বা আপনি নিজের TCP/IPডেটা ট্রান্সফার ইউটিলিটি লিখতে পারেন । আপনার কাছে JSONউপযুক্ত মনে হয় এমন ফর্ম্যাট বা অন্য কোনও ফর্ম্যাট ব্যবহার করে ডেটা প্রেরণ করা যেতে পারে । এছাড়াও সংবেদনশীল তথ্য থাকলে সার্ভারে প্রেরণের আগে ডেটা এনক্রিপ্ট করা যায়। সমস্ত সার্ভার অ্যাপ্লিকেশনটি যা করতে হবে তা হল কেবলমাত্র প্রবেশ করার জন্য অপেক্ষা HttpRequestsকরতে হবে এবং ডেটা বিশ্লেষণ করতে এবং এটি আপনার যে কোনও জায়গায় সংরক্ষণ করতে হবে।


স্থানীয় অ্যাপ এবং সার্ভারে আপডেট হওয়া ডেটা কীভাবে চেক করবেন? এবং একসাথে একত্রিত কিভাবে? আমি জেএসএন বা যেকোন কিছুতে রেকর্ডগুলি তাদের মার্জ করার জন্য আবেদনের জন্য প্রেরণ করা ভাল নয়। আপনি কি মনে করেন?
ওমিদ নাজিফি

2
আপনি হ্যাঁ বা না এর জন্য কোনও ইনটুল / বুল 1/0 সহ "সার্ভারে" এর মতো একটি পতাকা ব্যবহার করতে পারেন। যখন কোনও রেকর্ড / ফাইল / ব্লকের ডেটা প্রেরণ করা হয়, সার্ভারে সাফল্যের জন্য যাচাই করুন এবং কিছুটা হ্যাঁতে ফ্লিপ করুন। তারপরে যদি আপনি এসকিউএলাইটের মতো কিছু ব্যবহার করে থাকেন তবে কোনও নতুন রেকর্ড প্রেরণের জন্য আপনি "মাই_ টেবিল থেকে যেখানে নির্বাচিত = 0" টাইপ জিনিস করতে পারেন
ইভান আর।

1

আমি হেসিয়ান এর অনুরূপ বাইনারি ওয়েবসার্ভিস প্রোটোকল ব্যবহার করার পরামর্শ দেব । এটি খুব ভালভাবে কাজ করে এবং তাদের অ্যান্ড্রয়েড বাস্তবায়ন রয়েছে। এটি কিছুটা ভারী হতে পারে তবে আপনি যে অ্যাপ্লিকেশনটি তৈরি করছেন তার উপর নির্ভর করে। আশাকরি এটা সাহায্য করবে.


1

@ গ্রান্টিজো অ্যান্ড্রয়েড সিঙ্ক উপাদানগুলির একটি দুর্দান্ত ওভারভিউ দেয়।

সিঙ্কম্যানেজারআন্ড্রয়েড লাইব্রেরি অ্যান্ড্রয়েড সিঙ্ক ফ্রেমওয়ার্ক (অ্যাবস্ট্র্যাক্টথ্রেডসাইঙ্কএডাপ্টার.অনপ্রেরফর্মসাইঙ্ক) এ প্লাগ করতে একটি সহজ 2-উপায় সিঙ্ক প্রয়োগকরণ সরবরাহ করে।

https://github.com/sschendel/SyncManagerAndroid

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.