مزامنة البيانات دون اتصال في تطبيقات Azure للأجهزة المحمولة

ما المقصود بمزامنة البيانات في وضع عدم الاتصال؟

مزامنة البيانات دون اتصال هي ميزة SDK للعميل والخادم في Azure Mobile Apps تسهل على المطورين إنشاء تطبيقات تعمل بدون اتصال بالشبكة.

عندما يكون تطبيقك في وضع عدم الاتصال، لا يزال بإمكانك إنشاء البيانات وتعديلها، والتي يتم حفظها في متجر محلي. عند عودة التطبيق إلى الإنترنت، يمكنه مزامنة التغييرات المحلية مع الواجهة الخلفية لتطبيق Azure للأجهزة المحمولة. تتضمن الميزة أيضا دعما للكشف عن التعارضات عند تغيير السجل نفسه على كل من العميل والواجهة الخلفية. يمكن بعد ذلك معالجة التعارضات إما على الخادم أو العميل.

تتمتع المزامنة في وضع عدم الاتصال بالعديد من الفوائد:

  • تحسين استجابة التطبيق عن طريق التخزين المؤقت لبيانات الخادم محليا على الجهاز
  • إنشاء تطبيقات قوية تظل مفيدة عند وجود مشكلات في الشبكة
  • السماح للمستخدمين النهائيين بإنشاء البيانات وتعديلها حتى في حالة عدم وجود وصول إلى الشبكة ، ودعم السيناريوهات ذات الاتصال القليل أو بدون اتصال
  • مزامنة البيانات عبر أجهزة متعددة واكتشاف التعارضات عند تعديل السجل نفسه بواسطة جهازين
  • الحد من استخدام الشبكة على الشبكات ذات الكمون العالي أو المزودة بقياس

توضح البرامج التعليمية التالية كيفية إضافة مزامنة دون اتصال إلى عملاء الجوال باستخدام Azure Mobile Apps:

ما المقصود بجدول المزامنة؟

للوصول إلى نقطة النهاية "/tables"، توفر مجموعات تطوير البرامج (SDK) الخاصة بعميل Azure Mobile واجهات مثل IMobileServiceTable (.NET client SDK) أو MSTable (عميل iOS). تتصل واجهات برمجة التطبيقات هذه مباشرة بالواجهة الخلفية لتطبيق Azure Mobile وتفشل إذا لم يكن لدى الجهاز العميل اتصال شبكة.

لدعم الاستخدام دون اتصال، يجب أن يستخدم تطبيقك بدلا من ذلك واجهات برمجة تطبيقات جدول المزامنة ، مثل IMobileServiceSyncTable (.NET client SDK) أو MSSyncTable (عميل iOS). تعمل جميع عمليات CRUD نفسها (إنشاء ، قراءة ، تحديث ، حذف) ضد واجهات برمجة تطبيقات جدول المزامنة ، باستثناء الآن أنها تقرأ من متجر محلي أو تكتب إليه. قبل إجراء أي عمليات جدول مزامنة، يجب تهيئة المتجر المحلي.

ما هو المتجر المحلي؟

المتجر المحلي هو طبقة ثبات البيانات على الجهاز العميل. توفر مجموعات تطوير البرامج (SDK) الخاصة بعميل Azure Mobile Apps تطبيقا افتراضيا للمتجر المحلي. على Windows و Xamarin و Android ، يعتمد على SQLite. على iOS ، يعتمد على البيانات الأساسية.

لاستخدام التنفيذ المستند إلى SQLite على Windows Phone أو Microsoft Store، تحتاج إلى تثبيت ملحق SQLite. لمزيد من المعلومات، راجع النظام الأساسي العام لـ Windows: تمكين المزامنة دون اتصال. يتم شحن Android و iOS مع إصدار من SQLite في نظام تشغيل الجهاز نفسه ، لذلك ليس من الضروري الرجوع إلى الإصدار الخاص بك من SQLite.

يمكن للمطورين أيضا تنفيذ متجرهم المحلي الخاص. على سبيل المثال ، إذا كنت ترغب في تخزين البيانات بتنسيق مشفر على عميل الهاتف المحمول ، فيمكنك تحديد متجر محلي يستخدم SQLCipher للتشفير.

ما هو سياق المزامنة؟

يقترن سياق المزامنة بكائن عميل محمول (مثل IMobileServiceClient أو MSClient) ويتتبع التغييرات التي يتم إجراؤها باستخدام جداول المزامنة. يحتفظ سياق المزامنة بقائمة انتظار عمليات، والتي تحتفظ بقائمة مرتبة بعمليات CUD (إنشاء، تحديث، حذف) التي يتم إرسالها لاحقا إلى الخادم.

يقترن مخزن محلي بسياق المزامنة باستخدام طريقة تهيئة كما هو الحال IMobileServicesSyncContext.InitializeAsync(localstore) في .NET client SDK.

كيفية عمل المزامنة في وضع عدم الاتصال

عند استخدام جداول المزامنة، تتحكم التعليمات البرمجية للعميل عند مزامنة التغييرات المحلية مع الواجهة الخلفية لتطبيق Azure للأجهزة المحمولة. لا يتم إرسال أي شيء إلى الواجهة الخلفية حتى تكون هناك دعوة لدفع التغييرات المحلية. وبالمثل ، يتم ملء المتجر المحلي ببيانات جديدة فقط عندما تكون هناك دعوة لسحب البيانات.

  • الدفع: الدفع هو عملية في سياق المزامنة ويرسل جميع تغييرات CUD منذ آخر دفعة. لاحظ أنه لا يمكن إرسال تغييرات جدول فردي فقط، لأنه بخلاف ذلك يمكن إرسال العمليات خارج الترتيب. ينفذ Push سلسلة من مكالمات REST إلى الواجهة الخلفية لتطبيق Azure Mobile App، والتي بدورها تقوم بتعديل قاعدة بيانات الخادم الخاص بك.

  • السحب: يتم تنفيذ السحب على أساس كل جدول ويمكن تخصيصه باستخدام استعلام لاسترداد مجموعة فرعية فقط من بيانات الخادم. ثم تقوم مجموعات تطوير البرامج (SDK) الخاصة بعميل Azure Mobile بإدراج البيانات الناتجة في المتجر المحلي.

  • الدفعات الضمنية: إذا تم تنفيذ سحب مقابل جدول يحتوي على تحديثات محلية معلقة، فإن السحب ينفذ push() أولا عملية سحب في سياق المزامنة. تساعد هذه الدفعة على تقليل التعارضات بين التغييرات الموجودة بالفعل في قائمة الانتظار والبيانات الجديدة من الخادم.

  • المزامنة التدريجية: المعلمة الأولى لعملية السحب هي اسم استعلام يستخدم فقط على العميل. إذا كنت تستخدم اسم استعلام غير فارغ، فإن Azure Mobile SDK يقوم بإجراء مزامنة تدريجية. في كل مرة تقوم فيها عملية سحب بإرجاع مجموعة من النتائج، يتم تخزين أحدث updatedAt طابع زمني من مجموعة النتائج هذه في جداول النظام المحلي SDK. تقوم عمليات السحب اللاحقة باسترداد السجلات فقط بعد هذا الطابع الزمني.

    لاستخدام المزامنة التزايدية، يجب على الخادم إرجاع قيم ذات مغزى updatedAt ويجب أن يدعم أيضا الفرز حسب هذا الحقل. ومع ذلك، نظرا لأن SDK يضيف فرزا خاصا به في الحقل updateAt، فلا يمكنك استخدام استعلام سحب يحتوي على جملة خاصة orderBy به.

    يمكن أن يكون اسم الاستعلام أي سلسلة تختارها، ولكن يجب أن يكون فريدا لكل استعلام منطقي في تطبيقك. وإلا، يمكن لعمليات السحب المختلفة الكتابة فوق نفس الطابع الزمني للمزامنة التزايدية ويمكن أن تعرض استعلاماتك نتائج غير صحيحة.

    إذا كان الاستعلام يحتوي على معلمة، فإن إحدى الطرق لإنشاء اسم استعلام فريد هي دمج قيمة المعلمة. على سبيل المثال ، إذا كنت تقوم بالتصفية على userid ، فقد يكون اسم الاستعلام الخاص بك كما يلي (في C #):

      await todoTable.PullAsync("todoItems" + userid,
          syncTable.Where(u => u.UserId == userid));
    

    إذا كنت تريد إلغاء الاشتراك في المزامنة التدريجية، فقم بتمرير null معرف الاستعلام. في هذه الحالة ، يتم استرداد جميع السجلات في كل مكالمة إلى PullAsync، والتي من المحتمل أن تكون غير فعالة.

  • التطهير: يمكنك مسح محتويات المتجر المحلي باستخدام IMobileServiceSyncTable.PurgeAsync. قد يكون التطهير ضروريا إذا كان لديك بيانات قديمة في قاعدة بيانات العميل ، أو إذا كنت ترغب في تجاهل جميع التغييرات المعلقة.

    تطهير مسح طاولة من المتجر المحلي. إذا كانت هناك عمليات تنتظر المزامنة مع قاعدة بيانات الخادم، فإن عملية التطهير تلقي استثناء ما لم يتم تعيين معلمة تطهير القوة .

    كمثال على البيانات القديمة على العميل ، افترض في مثال "قائمة المهام" ، يقوم Device1 فقط بسحب العناصر التي لم تكتمل. يتم وضع علامة على عنصر todoitem "شراء الحليب" مكتملا على الخادم بواسطة جهاز آخر. ومع ذلك ، لا يزال لدى Device1 todoitem "شراء الحليب" في المتجر المحلي لأنه يسحب فقط العناصر التي لم يتم وضع علامة عليها كاملة. التطهير يزيل هذا العنصر الذي لا معنى له.

الخطوات التالية