تطبيقات13 سبتمبر 20264 دقائق قراءة

تطبيق يشتغل بدون إنترنت (Offline-First): متى تحتاجه وكيف ينبني صح؟

تطبيق يعمل بدون إنترنت (Offline-First): متى يحتاجه مشروعك، كيف تتم مزامنة البيانات وحل التعارضات، وأخطاء شائعة تضيّع بيانات المستخدمين في المناطق ضعيفة التغطية.

📴

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

هل تطبيقك يحتاجه فعلاً؟

مو كل تطبيق يحتاج Offline-First، لأنه يضيف تعقيداً حقيقياً. لكن فيه علامات واضحة إنك تحتاجه:

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

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

كيف يشتغل من الداخل

الفكرة ببساطة: التطبيق فيه قاعدة بيانات صغيرة على الجوال نفسه، وكل عملية تُكتب فيها أولاً وتظهر للمستخدم فوراً. بعدها تنحط العملية في «طابور مزامنة». لما يرجع الاتصال، التطبيق يرسل الطابور للخادم بالترتيب ويستقبل أي تحديثات جديدة. في Flutter فيه خيارات ناضجة للتخزين المحلي مثل SQLite عبر مكتبة Drift أو قواعد بيانات مثل Isar و ObjectBox، وبعض الخدمات السحابية توفّر مزامنة جاهزة.

المشكلة الحقيقية: التعارضات

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

  • آخر تعديل يفوز: بسيط، ويصلح للبيانات اللي ما يضر فيها فقدان تعديل قديم.
  • دمج على مستوى الحقل: كل حقل مستقل، فرقم الجوال والعنوان يُحفظان الاثنين.
  • عمليات إضافة فقط: بدل تعديل الكمية، تُسجَّل حركة «+٥» أو «-٢»، فما يضيع شي — ممتاز للمخزون والحضور.
  • مراجعة يدوية: التطبيق يعرض التعارض لمشرف يقرّر، للبيانات الحساسة فقط.

أخطاء تضيّع البيانات

  • الاعتماد على رقم تعريفي يولّده الخادم — السجل الجديد ما له رقم وهو غير متصل. استخدم معرّفات تُولَّد على الجهاز (UUID).
  • عدم إظهار حالة المزامنة: المستخدم لازم يعرف أن ٣ عمليات تنتظر الإرسال.
  • حذف التطبيق أو تسجيل الخروج قبل المزامنة — نبّه المستخدم قبلها.
  • تخزين بيانات حساسة محلياً بدون تشفير.
  • تحميل كل بيانات الشركة على كل جوال بدل ما يخص كل مستخدم فقط.

كيف تختبره قبل ما تسلّمه لفريقك

اختبار تطبيق Offline-First على مكتب بواي فاي سريع ما يثبت شيئاً. هذي سيناريوهات لازم تمر عليها قبل الاعتماد:

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

Offline-First قرار معماري: إضافته من البداية أسهل بكثير من ترقيعه بعد الإطلاق. لو عندك فريق ميداني أو نشاط في مناطق تغطيتها ضعيفة، اذكر هذا من أول رسالة. في منصة أزهل الرقمية نصمم التطبيق ولوحة التحكم على هذا الأساس، وتقدر تجرّب «أزهلني» مجاناً عشان تحوّل فكرتك لخطة مشروع قبل ما تتواصل معنا على واتساب.

جاهز تبدأ مشروعك مع أزهل؟

تواصل معنا الحين، وخلنا نطلّع فكرتك على أرض الواقع.