Berke Özyaşar
مدونة

تطبيق لمواقع البناء يعمل دون اتصال أولًا: كيف صمّمنا Şantiyepro

كيف يُصمَّم تطبيق يعمل في مواقع بناء لا يتوفر فيها الإنترنت؟ ملاحظات حول بنية offline-first والمزامنة والاختبار من خلال Şantiyepro ذي الوحدات الـ56.

·
الصفحة الرئيسية لموقع Şantiyepro

Şantiyepro تطبيق لإدارة مواقع البناء موجّه لقطاع الإنشاءات، وهو منتجنا الخاص الذي نطوّره مع فريقنا. يضم 56 وحدة، من الحضور إلى الصندوق والحسابات الجارية، ومن سجلات الأعمال المنفذة إلى المستخلصات ومتابعة الخرسانة والصحة والسلامة المهنية؛ ويعمل على Android وiOS، وله أيضًا WebPanel للوصول من الحاسوب المكتبي. وأبرز ما يميّز المنتج أنه يعمل دون اتصال بالكامل. أنا Berke Özyaşar؛ وفي هذا المقال أشرح أسباب هذا القرار وما يجب الانتباه إليه عند تطوير تطبيق يعمل دون اتصال أولًا.

الإنترنت في موقع البناء ليس أمرًا مسلّمًا به

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

لذلك فالمبدأ الأساسي في Şantiyepro هو: يعمل التطبيق بالكامل دون حاجة إلى الإنترنت، وتُحفظ البيانات على الهاتف أولًا. ولا يلزم اتصال لإدخال السجلات أو استخراج التقارير أو مراجعة السجل السابق. أما المزامنة السحابية حسب الأدوار فتعمل عندما يحتاج الفريق إلى العمل معًا.

الفرق بين offline-first و"دعم العمل دون اتصال"

تقدّم تطبيقات كثيرة "دعمًا للعمل دون اتصال": عند انقطاع الاتصال تعرض آخر البيانات التي شوهدت، وربما تضع بعض العمليات في قائمة انتظار. أما offline-first فينطلق من العكس: المصدر الأساسي للبيانات هو قاعدة البيانات المحلية على الجهاز، والخادم مجرد هدف للمزامنة. ويؤثر هذا الفرق في كل طبقة من طبقات البنية:

  • تقرأ الشاشات من قاعدة البيانات المحلية لا من الشبكة؛ لذلك تُفتح بالسرعة نفسها سواء وُجد اتصال أم لا.
  • يكون كل سجل صالحًا لحظة إنشائه على الجهاز، ولا ينتظر موافقة الخادم.
  • يجب أن تُولَّد معرّفات السجلات على الجهاز بشكل فريد دون الرجوع إلى الخادم؛ وإلا تعارضت السجلات التي تُنشأ على جهازين في الوقت نفسه.
  • يجب أن يكون ممكنًا إجراء التقارير والحسابات، مثل ملخص الحضور أو رصيد الصندوق، على الجهاز.

المزامنة: الجزء الصعب

وجود البيانات على الهاتف كافٍ للاستخدام الفردي. لكن عندما يريد رئيس الموقع والمكتب الفني والمحاسبة رؤية البيانات نفسها، تصبح المزامنة ضرورية. وعند تصميم المزامنة في نظام offline-first يجب الإجابة عن الأسئلة التالية:

  • ما الذي سيُرسل؟ يجب تتبّع السجلات التي تغيّرت منذ آخر مزامنة. ووسم كل تغيير بختم زمني أو رقم إصدار يتيح إرسال الفرق فقط.
  • ماذا يحدث عند التعارض؟ إذا عدّل شخصان السجل نفسه وهما دون اتصال، فأي التعديلين يُعتمد؟ في أنواع كثيرة من السجلات يكفي أن يفوز آخر من كتب. لكن في السجلات المالية مثل حركات الصندوق والحسابات الجارية، يكون إضافة حركة جديدة بدلًا من تعديل السجل القائم أكثر أمانًا بكثير؛ فبدلًا من التعارض ينشأ سجلان منفصلان، ويمكن دائمًا إعادة حساب الرصيد من الحركات.
  • من يرى ماذا؟ المزامنة في Şantiyepro تتم حسب الأدوار. فالبيانات التي يراها رئيس العمال ليست هي نفسها التي يراها صاحب الشركة؛ ويجب ألا يصل إلى كل جهاز إلا البيانات المصرّح بها لذلك المستخدم.
  • كيف ينتشر الحذف؟ لكي يُحذف السجل الذي حُذف على جهاز غير متصل من الأجهزة الأخرى أيضًا، يجب وسمه بأنه محذوف بدلًا من حذفه فعليًا.
  • الملفات الكبيرة: الصور في سجلات الأعمال المنفذة أكبر بكثير من البيانات النصية. وإرسالها في قائمة انتظار منفصلة عندما يكون الاتصال مناسبًا لا يؤخر مزامنة السجلات.

الثقة في الميدان: التوقيع والموقع والوقت

في موقع البناء يهم متى وأين أُدخلت السجلات؛ إذ يجب ألا يصبح محضر أو وثيقة تسليم أو فحص للسلامة المهنية موضع نزاع لاحقًا. في Şantiyepro تُحفظ التوقيعات الرقمية مع إحداثيات GPS وختم زمني. وللعمل دون اتصال هنا دقيقة مهمة: يمكن الحصول على الموقع من GPS الهاتف دون إنترنت، لكن ساعة الجهاز قابلة للتغيير من المستخدم. لذلك فإن حفظ وقت الخادم أثناء المزامنة إلى جانب وقت الجهاز في هذا النوع من السجلات مفيد للتحققات اللاحقة.

إبقاء 56 وحدة قابلة للإدارة

الحضور، والصندوق، والحسابات الجارية، ومتابعة الشيكات، والأعمال المنفذة، والنقل الداخلي، ومتابعة صب الخرسانة وحديد التسليح، والمشتريات، والمستخلصات، ومراقبة الجودة، والسلامة المهنية... نطاق Şantiyepro واسع، لأن الأعمال في موقع البناء ليست منفصلة عن بعضها. وفي منتج بهذا الاتساع، إذا تصرفت كل وحدة كتطبيق مستقل تصبح الصيانة مستحيلة. يجب أن تتشارك الوحدات بنية مشتركة: طبقة البيانات المحلية نفسها، ومنطق المزامنة نفسه، ونموذج الصلاحيات نفسه، وأدوات التقارير والتصدير نفسها. وبذلك لا تكون إضافة وحدة جديدة كتابةً لميزة من الصفر، بل إضافة نوع بيانات وشاشات جديدة فوق هذه البنية.

ومستخدمو المنتج متنوعون أيضًا: المقاولون، ومطوّرو المساكن، والمهندسون، وأخصائيو الصحة والسلامة المهنية، والفنيون، ورؤساء العمال. وكل منهم يستخدم جزءًا مختلفًا من التطبيق بكثافة. وإبقاء القوائم والشاشة الرئيسية بسيطة حسب الدور والحاجة مهم حتى لا تُغرق الوحدات الـ56 المستخدم.

الاختبار: وضع الطيران أفضل صديق لك

أكثر طرق اختبار تطبيق offline-first فاعلية هي استخدامه فعلًا دون اتصال. وفي هذا النوع من التطبيقات يجب أن تتضمن قائمة الاختبار حتمًا ما يلي:

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

والبند الأخير مهم بشكل خاص: يدعم Şantiyepro نظام Android 8.0 وما بعده، وليست كل الهواتف المستخدمة في الميدان من الطرازات الحديثة.

بقاء البيانات لدى المستخدم

لنهج offline-first فائدة غير تقنية أيضًا: تبقى البيانات على هاتف المستخدم. فصندوق الموقع، ومدفوعات المقاولين من الباطن، والحسابات الجارية معلومات حساسة. وتتيح الخطة المجانية في Şantiyepro البدء بموقع بناء واحد؛ أما المزامنة السحابية فتعمل عندما يريد الفريق العمل معًا. وبذلك يصبح المنتج قابلًا للاستخدام من المقاولين الصغار الذين يعملون بمفردهم ومن الفرق الكبيرة على حد سواء.

الإطلاق ودورة الإصدارات

Şantiyepro متاح على Google Play وApp Store. ونحدّث المنتج بدورة إصدار تقارب 45 يومًا. وفي تطبيق offline-first، يكون الإيقاع المنتظم والمتوقع مهمًا لأن كل إصدار يجب أن ينقل البيانات الموجودة على الجهاز بأمان.

الخلاصة

إذا كنت تطوّر برمجيات لأشخاص يعملون في الميدان، فعليك أن تعتبر الاتصال بالإنترنت ميزة إضافية لا أمرًا مسلّمًا به. تتطلب بنية offline-first جهدًا أكبر في التصميم، لكنها تمنح المستخدم أداة تعمل في كل الظروف. وإذا كنت تفكر في تطبيق ميداني أو منتج SaaS مشابه، فستجد كيف أعمل في صفحتي تطوير منتجات SaaS وتطوير تطبيقات الجوال.

مقالات أخرى

لنُطلق تطبيقك معًا.

أخبرني في بضع جمل بما تريد إنجازه. أرد في اليوم نفسه.

استخدم ↑ ↓ للتنقل، وEnter للفتح، وEsc للإغلاق