تنويه: الهدف من هذا الموضوع هو مشاركة تجربتي معكم حتى تستفيدوا من معرفة Firebase وأيضاً لأسمع منكم عن البدائل حتى أطور من أداء برامجي.

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

1- استخدام Google Cloud Messaging

2- استخدام Firebase

الطريقة الأولى تحتاج منك إلى بذل المزيد من الوقت في تصميم server-client وأما الطريقة الثانية توفر لك كل هذا الجهد من التصميم ولذلك توجهت للخطة الثانية. وسأذكر الهدف من البرنامج حتى تتضح الفكرة. برنامجي يخدم فئة صغيرة من المسلمين (300-400 شخص) في مدينة صغيرة في أمريكا. في خلال صلاة الجمعة تمتلئ مواقف المسجد ويضطر الشخص أن يدخل إلى المواقف ليكتشف ذلك ثم يغادر ويبحث عن موقف ويضيع وقته. فقررنا تنبيه المستخدم بأن المواقف غير متوفرة بمجرد تأكدنا من هذه المعلومة. ولأن سائق السيارة قد يحتاج أن يلقي نظرة سريعة إلى جهاز الجوال ليتأكد قبل وصوله من وجود مواقف فلابد من تحقيق تزامن سريع جداً. شخصياً، متأكد من أن polling سريع بما فيه الكفاية لكن قررت إستخدام Firebase وإلى الآن Firebase من أورع ما يمكن للأسباب التالية:

  • توفر Firebase قاعدة بيانات مجانية.

  • تزامن فوري بين برنامجك وقاعدة البيانات.

  • API يعمل على أنظمة تشغيل ومنصات مختلفة (Android(Java), iOS(C#), Web(Javascript

  • أقل جهد ممكن من المبرمج للحصول على تزامن.

  • توثيق سهل وممتع لـ Firebase API

  • نظام تسجيل دخول بطرق كثيرة (فيسبوك، تويتر، ايميل ورقم سري، الخ)

  • إحصائيات لتفاعل المستخدمين خلال ساعات اليوم.

أما بالنسبة للعيوب فلا أرى إلا عيب واحد وهو أن:

  • الحساب المجاني يتيح لك التالي:

50 Max Connections, 5 GB Data Transfer, 100 MB Data Storage

وإلى الآن مازلت أخشى من تجاوز حد 50 (Max Connections) ولكن يقول أحد مبرمجين Firebase:

In our experience, on average, 1 concurrent user is equivalent to ~1400 visits per month to a website.

تجربتي مع Firebase للآن رائعة ولكنها محدودة بـ 50 متصل. مازلت أطور من برنامج الأندرويد المذكور سابقاً لذلك أتمنى أن أسمع منكم عن البدائل والمقترحات.