این اپلیکیشن شامل تعداد زیادی صفحه و قابلیت مستقل است که در قالب یک تجربه کاربری یکپارچه در کنار یکدیگر قرار گرفته‌اند. توسعه پروژه فقط به طراحی صفحات محدود نبوده و بخش‌های مختلفی از چرخه توسعه اپلیکیشن Android را پوشش داده است؛ از طراحی و پیاده‌ سازی رابط کاربری گرفته تا مدیریت ناوبری، ارتباط با سرویس‌ ها، دریافت و نمایش اطلاعات، مدیریت اعلان‌ ها، کنترل پیکربندی از راه دور و آماده‌ سازی نسخه قابل انتشار.

ساختار اپلیکیشن به‌گونه‌ ای طراحی شده است که اضافه‌ شدن قابلیت‌ های جدید، توسعه جریان‌ های فعلی و نگهداری بخش‌ های مختلف پروژه با کمترین تأثیر روی سایر قسمت‌ ها امکان‌پذیر باشد.

در این پروژه به موارد زیر توجه ویژه شده است:

  • یکپارچگی تجربه کاربری در بخش‌های مختلف
  • مدیریت صحیح وضعیت رابط کاربری
  • مدیریت چرخه حیات صفحات Android
  • انتقال اصولی اطلاعات میان صفحات
  • کنترل رفتار اپلیکیشن براساس وضعیت کاربر
  • نمایش اطلاعات پویا
  • مدیریت ارتباطات شبکه
  • پیاده‌ سازی Push Notification
  • مدیریت تنظیمات از راه دور
  • کنترل قابلیت‌ ها بدون نیاز به انتشار نسخه جدید
  • مدیریت نسخه و تغییرات عملیاتی
  • بهینه‌ سازی قابلیت نگهداری و توسعه‌ پذیری پروژه

مسئولیت من در پروژه

در این پروژه مسئولیت طراحی و توسعه بخش‌ های مختلف اپلیکیشن Android را بر عهده داشتم. این مسئولیت شامل پیاده‌سازی رابط کاربری، توسعه جریان‌های مختلف، مدیریت وضعیت صفحات، یکپارچه‌ سازی با سرویس‌های Firebase و آماده‌سازی ساختار اپلیکیشن برای استفاده در محیط واقعی بود.

مهم‌ترین مسئولیت‌های من عبارت بودند از:

  • تحلیل نیازمندی‌ های اپلیکیشن و تبدیل آن‌ ها به جریان‌ های قابل اجرا در Android
  • طراحی و توسعه تعداد زیادی صفحه و قابلیت
  • پیاده‌ سازی رابط کاربری اختصاصی و هماهنگ با هویت بصری محصول
  • توسعه کامپوننت‌های قابل استفاده مجدد
  • پیاده‌سازی ناوبری میان بخش‌ های مختلف اپلیکیشن
  • مدیریت چرخه حیات صفحات
  • مدیریت State در صفحات داده‌ محور و تعاملی
  • دریافت، پردازش و نمایش اطلاعات
  • مدیریت عملیات‌های ناهمگام
  • مدیریت خطاهای شبکه و خطاهای عملیاتی
  • یکپارچه‌ سازی Firebase Cloud Messaging
  • مدیریت FCM Token دستگاه
  • پردازش Push Notification در وضعیت‌های مختلف برنامه
  • استفاده از Firebase Remote Config
  • مدیریت Feature Flag و تنظیمات Runtime
  • پشتیبانی از تغییر برخی رفتار های برنامه بدون انتشار Build جدید
  • آماده‌سازی نسخه‌ های Debug و Release
  • کنترل و نگهداری سورس پروژه با Git

طراحی رابط کاربری و تجربه کاربری

یکی از بخش‌های اصلی این پروژه، طراحی و توسعه رابط کاربری گسترده آن بوده است. اپلیکیشن از تعداد زیادی صفحه، حالت و جریان مختلف تشکیل شده و هر بخش باید ضمن داشتن هویت مستقل، با سایر قسمت‌های برنامه نیز هماهنگ باقی می‌ماند.

برای رسیدن به این هدف، الگوهای بصری و رفتاری مشترکی برای بخش‌های مختلف پروژه در نظر گرفته شد. این رویکرد باعث شد کاربران هنگام جابه‌جایی میان قسمت‌های مختلف اپلیکیشن با رفتارهای غیرمنتظره یا الگوهای ناسازگار مواجه نشوند.

در توسعه رابط کاربری موارد زیر مورد توجه قرار گرفت:

  • طراحی ساختار منظم برای صفحات مختلف
  • رعایت سلسله‌مراتب بصری اطلاعات
  • استفاده از الگوهای مشترک برای عناصر تکرارشونده
  • ایجاد کامپوننت‌های قابل استفاده مجدد
  • مدیریت صحیح فاصله‌گذاری، اندازه‌ها و ترازبندی عناصر
  • نمایش مناسب محتوای کوتاه و بلند
  • سازگاری با ابعاد متفاوت نمایشگر
  • مدیریت تعامل‌های لمسی
  • نمایش بازخورد مناسب پس از انجام عملیات
  • جلوگیری از اجرای چند باره عملیات توسط کاربر
  • مدیریت وضعیت انتخاب‌شده، فعال و غیرفعال عناصر
  • ارائه پیام مناسب هنگام بروز خطا
  • نمایش وضعیت بارگذاری اطلاعات
  • نمایش Empty State در صورت نبود اطلاعات
  • حفظ خوانایی و سادگی رابط کاربری با وجود تعداد زیاد قابلیت‌ها

مدیریت صفحات و جریان‌های کاربری

باتوجه‌به گستردگی پروژه، اپلیکیشن از جریان‌های کاربری متعددی تشکیل شده است. پیاده‌سازی این جریان‌ها فقط شامل بازکردن یک صفحه جدید نبوده و مواردی مانند انتقال داده، حفظ وضعیت، مدیریت بازگشت، جلوگیری از ایجاد صفحات تکراری و هدایت کاربر براساس شرایط مختلف را نیز شامل می‌شده است.

در این بخش، موارد زیر پیاده‌سازی یا مدیریت شده‌اند:

  • جابه‌جایی ساختاریافته میان صفحات
  • انتقال داده میان بخش‌های مختلف اپلیکیشن
  • مدیریت Back Stack
  • حفظ State صفحات هنگام جابه‌جایی
  • مدیریت رفتار دکمه Back
  • جلوگیری از بازشدن چندباره یک صفحه
  • هدایت شرطی کاربر براساس وضعیت فعلی
  • بازکردن صفحه مرتبط از طریق Push Notification
  • مدیریت ورودی‌هایی که از بیرون اپلیکیشن دریافت می‌شوند
  • مدیریت رفتار برنامه هنگام بازگشت از Background
  • بازیابی وضعیت مناسب پس از ایجاد مجدد Activity یا Fragment
  • جلوگیری از ناهماهنگی رابط کاربری با داده‌های فعلی

به‌جای ایجاد تعدادی صفحه مستقل و بدون ارتباط، جریان‌ها به‌صورتی طراحی شده‌اند که کاربر بتواند با کمترین پیچیدگی از یک قابلیت به قابلیت دیگر منتقل شود.


مدیریت وضعیت رابط کاربری

صفحات اپلیکیشن براساس نوع عملیات می‌توانند در وضعیت‌های مختلف قرار بگیرند. برای جلوگیری از تجربه کاربری نامناسب، هرکدام از این وضعیت‌ها به‌صورت مشخص مدیریت شده‌اند.

وضعیت‌های اصلی شامل موارد زیر هستند:

Loading State

هنگامی که اطلاعات در حال دریافت یا عملیات در حال انجام است، رابط کاربری وضعیت بارگذاری را نمایش می‌دهد تا کاربر از در حال اجرا بودن فرایند مطلع باشد.

Success State

پس از تکمیل موفق عملیات، اطلاعات نهایی نمایش داده شده یا بازخورد مناسب به کاربر ارائه می‌شود.

Error State

در صورت بروز خطا، پیام قابل فهمی نمایش داده می‌شود و در صورت امکان، امکان تلاش مجدد در اختیار کاربر قرار می‌گیرد.

Empty State

اگر برای یک بخش اطلاعاتی وجود نداشته باشد، به‌جای نمایش صفحه خالی یا شکسته، وضعیت مناسب و قابل فهمی نمایش داده می‌شود.

Offline State

در صورت نبود اتصال اینترنت یا در دسترس نبودن سرویس، وضعیت ارتباطی کاربر مدیریت شده و پیام مناسب نمایش داده می‌شود.

Disabled State

در شرایطی که یک قابلیت موقتاً در دسترس نباشد یا پیش‌شرط‌های آن تکمیل نشده باشد، وضعیت غیرفعال به‌صورت واضح در رابط کاربری نمایش داده می‌شود.

این مدل مدیریت State کمک می‌کند رفتار صفحات قابل پیش‌بینی، قابل کنترل و سازگار باشد.


ارتباط با Backend و سرویس‌های Remote

در بخش‌هایی که اطلاعات اپلیکیشن از سرویس‌های Backend دریافت می‌شود، ارتباط شبکه و پردازش پاسخ‌ها به‌صورت ساختاریافته مدیریت شده است.

فعالیت‌های مرتبط با این قسمت شامل موارد زیر است:

  • ارسال درخواست به API
  • دریافت پاسخ‌های JSON
  • تبدیل پاسخ‌ها به مدل‌های قابل استفاده در اپلیکیشن
  • مدیریت درخواست‌های ناهمگام
  • نمایش وضعیت Loading هنگام دریافت اطلاعات
  • مدیریت پاسخ موفق
  • مدیریت پاسخ‌های نامعتبر
  • مدیریت خطاهای سمت سرور
  • مدیریت Timeout
  • مدیریت قطع اتصال اینترنت
  • جلوگیری از ارسال غیرضروری درخواست تکراری
  • نمایش پیام مناسب برای خطاهای قابل بازیابی
  • فراهم‌کردن امکان Retry
  • همگام‌سازی State رابط کاربری با نتیجه درخواست
  • جلوگیری از به‌روزرسانی رابط کاربری پس از بسته‌شدن صفحه

در صورت وجود احراز هویت در پروژه، می‌توان بخش‌های زیر را نیز به نسخه نهایی اضافه کرد:

  • مدیریت Access Token
  • ذخیره‌سازی امن اطلاعات نشست کاربر
  • ارسال Token در درخواست‌ها
  • مدیریت Session Expiration
  • مدیریت Refresh Token
  • خروج خودکار یا هدایت به صفحه ورود در صورت نامعتبرشدن نشست

یکپارچه‌سازی Firebase Cloud Messaging

یکی از قابلیت‌های زیرساختی مهم پروژه، پیاده‌سازی Push Notification با استفاده از Firebase Cloud Messaging یا FCM است.

هدف از این بخش فقط نمایش یک Notification ساده نبوده است؛ بلکه چرخه کامل دریافت و مدیریت اعلان در اپلیکیشن در نظر گرفته شده است. این چرخه از دریافت FCM Token آغاز می‌شود و تا پردازش پیام، نمایش اعلان و هدایت کاربر به بخش مرتبط ادامه پیدا می‌کند.

قابلیت‌های پیاده‌سازی‌شده در بخش FCM

  • راه‌اندازی Firebase Cloud Messaging در پروژه Android
  • دریافت FCM Registration Token
  • مدیریت تغییر یا Refresh شدن Token
  • ارسال Token دستگاه به Backend
  • مرتبط‌کردن Token با دستگاه یا کاربر
  • دریافت Push Notification
  • مدیریت اعلان در حالت Foreground
  • مدیریت اعلان در حالت Background
  • مدیریت اعلان هنگام بسته‌بودن اپلیکیشن
  • پردازش Payload دریافتی
  • استخراج داده‌های موردنیاز از پیام
  • ساخت Notification متناسب با نوع پیام
  • ایجاد Notification Channel
  • تعریف اولویت و رفتار نمایش اعلان
  • مدیریت کلیک روی Notification
  • هدایت کاربر به صفحه مرتبط
  • جلوگیری از هدایت اشتباه در زمان بازبودن اپلیکیشن
  • مدیریت Intent یا Deep Link مرتبط با اعلان
  • کنترل رفتار اعلان براساس وضعیت ورود کاربر

چرخه مدیریت FCM Token

FCM Token شناسه‌ای است که Firebase برای ارسال اعلان به یک نمونه نصب‌شده از اپلیکیشن ایجاد می‌کند. این Token ممکن است در طول عمر برنامه تغییر کند؛ بنابراین صرفاً دریافت اولیه آن کافی نیست.

در طراحی صحیح این بخش، موارد زیر در نظر گرفته می‌شوند:

  1. دریافت Token هنگام راه‌اندازی یا ثبت اولیه
  2. ذخیره Token در سطح موردنیاز برنامه
  3. ارسال Token به Backend
  4. ارتباط Token با حساب کاربری یا دستگاه
  5. دریافت Token جدید در صورت تغییر
  6. همگام‌سازی مجدد Token با سرور
  7. مدیریت Token در زمان ورود کاربر
  8. مدیریت Token در زمان خروج کاربر
  9. جلوگیری از ثبت چندباره و غیرضروری Token
  10. غیرفعال‌کردن Token نامعتبر در سمت Backend

متن حرفه‌ای قابل استفاده در معرفی پروژه:

چرخه کامل مدیریت Firebase Cloud Messaging Token شامل دریافت Token، مدیریت Token Refresh، همگام‌سازی با Backend و ارتباط Token با وضعیت کاربر در اپلیکیشن پیاده‌سازی شد.


مدیریت وضعیت‌ های مختلف اعلان

رفتار Push Notification بسته به وضعیت اپلیکیشن متفاوت است. این وضعیت‌ها در پروژه به‌صورت مستقل مدیریت شده‌اند:

حالت Foreground

اگر اپلیکیشن در حال اجرا باشد، پیام دریافتی باید پردازش شده و متناسب با نوع آن، رابط کاربری یا Notification سیستم به‌روزرسانی شود.

حالت Background

اگر اپلیکیشن در پس‌زمینه باشد، اعلان از طریق سیستم نمایش داده شده و کلیک کاربر روی آن باید مسیر صحیحی را در اپلیکیشن باز کند.

حالت Terminated

اگر اپلیکیشن کاملاً بسته باشد، اطلاعات اعلان باید در زمان اجرای مجدد برنامه بازیابی شده و کاربر پس از آماده‌شدن اپلیکیشن به صفحه مرتبط هدایت شود.

مدیریت این سه وضعیت مانع از آن می‌شود که اعلان در شرایط مختلف رفتار متفاوت یا غیرقابل پیش‌بینی داشته باشد.


هدایت کاربر از طریق Notification

یکی از بخش‌های مهم سیستم اعلان، هدایت کاربر به مقصد مرتبط با محتوای پیام است. به‌جای اینکه تمام اعلان‌ها صرفاً صفحه اصلی اپلیکیشن را باز کنند، Payload اعلان می‌تواند مشخص کند که کدام بخش باید نمایش داده شود.

جریان کلی این فرایند به شکل زیر است:

CanvasPush Notification Received

Parse Notification Payload

Detect Notification Type

Validate User/Application State

Create Intent or Deep Link

Open Related Screen

در این ساختار می‌توان براساس نوع اعلان، شناسه رکورد یا پارامترهای موجود در پیام، صفحه مقصد را مشخص کرد.

این قابلیت تجربه کاربری بهتری ایجاد می‌کند؛ زیرا کاربر مستقیماً به محتوایی منتقل می‌شود که اعلان درباره آن ارسال شده است.


Firebase Remote Config

یکی دیگر از قابلیت‌های کلیدی پروژه، استفاده از Firebase Remote Config برای مدیریت تنظیمات و رفتارهای اپلیکیشن از راه دور است.

Remote Config این امکان را فراهم می‌کند که برخی مقادیر و تصمیمات عملیاتی اپلیکیشن بدون نیاز به ایجاد Build جدید و انتشار نسخه تازه تغییر کنند. این موضوع مخصوصاً برای محصولی که در محیط واقعی استفاده می‌شود اهمیت زیادی دارد؛ زیرا تمام تغییرات عملیاتی نباید وابسته به انتشار نسخه جدید باشند.

کاربردهای Remote Config در پروژه

باتوجه‌به پیاده‌سازی واقعی، می‌توان از Remote Config برای موارد زیر استفاده کرد:

  • فعال یا غیرفعال‌کردن یک قابلیت
  • کنترل Feature Flagها
  • تغییر پیام‌های عمومی
  • نمایش پیام تعمیرات
  • تغییر لینک‌های مورد استفاده در اپلیکیشن
  • مدیریت سیاست به‌روزرسانی
  • کنترل حداقل نسخه قابل پشتیبانی
  • نمایش به‌روزرسانی اختیاری
  • نمایش به‌روزرسانی اجباری
  • اعمال تنظیمات محیطی
  • کنترل موقت برخی رفتارهای اپلیکیشن
  • مدیریت تدریجی انتشار قابلیت‌ها
  • غیرفعال‌کردن سریع یک بخش دارای مشکل
  • کنترل تنظیماتی که احتمال تغییر آن‌ها وجود دارد

مدیریت مقادیر پیش‌فرض Remote Config

برای جلوگیری از وابستگی کامل برنامه به پاسخ آنلاین Firebase، مقادیر پیش‌فرض در اپلیکیشن تعریف می‌شوند. در این حالت، اگر اینترنت در دسترس نباشد یا دریافت تنظیمات جدید با خطا مواجه شود، اپلیکیشن همچنان می‌تواند با تنظیمات ایمن و از پیش تعریف‌شده اجرا شود.

چرخه کلی Remote Config به‌صورت زیر است:

CanvasLoad Local Defaults

Fetch Remote Values

Validate Received Configuration

Activate Configuration

Apply New Application Behavior

این روش باعث می‌شود استفاده از Remote Config، پایداری برنامه را کاهش ندهد.


مدیریت Feature Flag

یکی از کاربردهای حرفه‌ای Remote Config، استفاده از Feature Flag است. Feature Flag اجازه می‌دهد قابلیت مشخصی بدون انتشار نسخه جدید، فعال یا غیرفعال شود.

نمونه منطقی:

Canvasfeature_enabled = true
→ Display and enable feature

feature_enabled = false
→ Hide or disable feature

مزایای این ساختار عبارت‌اند از:

  • فعال‌سازی تدریجی قابلیت‌ها
  • کاهش ریسک انتشار
  • غیرفعال‌کردن سریع یک قابلیت مشکل‌دار
  • آزمایش قابلیت قبل از فعال‌سازی عمومی
  • کنترل بهتر رفتار نسخه‌های مختلف
  • کاهش نیاز به انتشار Build اضطراری
  • جداسازی Deploy نرم‌افزار از Release قابلیت

متن مناسب برای سایت:

با استفاده از Firebase Remote Config، زیرساخت Feature Flag در اپلیکیشن ایجاد شد تا برخی قابلیت‌ها بدون نیاز به انتشار نسخه جدید، از راه دور فعال یا غیرفعال شوند. این رویکرد امکان مدیریت سریع‌تر تغییرات، کاهش ریسک انتشار و کنترل عملیاتی بهتر محصول را فراهم کرد.


کنترل نسخه و به‌روزرسانی اپلیکیشن

Remote Config می‌تواند برای مدیریت نسخه‌ های اپلیکیشن نیز مورد استفاده قرار گیرد. در این ساختار، مقادیری مانند آخرین نسخه منتشر شده و حداقل نسخه قابل پشتیبانی از Firebase دریافت می‌شوند.

حالت Force Update

اگر نسخه نصب‌شده از حداقل نسخه قابل پشتیبانی پایین‌تر باشد، کاربر باید قبل از ادامه استفاده، برنامه را به‌روزرسانی کند.

حالت Optional Update

اگر نسخه جدیدتری وجود داشته باشد اما نسخه فعلی هنوز قابل پشتیبانی باشد، امکان نمایش پیشنهاد به‌روزرسانی اختیاری وجود دارد.

مزایای این قابلیت

  • جلوگیری از استفاده نسخه‌های منسوخ
  • مدیریت تغییرات ناسازگار API
  • کاهش خطاهای ناشی از نسخه‌های قدیمی
  • اطلاع‌رسانی انتشار نسخه جدید
  • کنترل بهتر چرخه عمر نسخه‌ها
  • واکنش سریع به مشکلات بحرانی

این بخش را تنها در صورتی در نسخه نهایی نگه دار که واقعاً کنترل نسخه یا Force Update را با Remote Config پیاده‌سازی کرده باشی.


مدیریت خطا و پایداری اپلیکیشن

در یک اپلیکیشن واقعی، فقط مسیر موفق اهمیت ندارد. برنامه باید در برابر ورودی نامعتبر، خطاهای شبکه، پاسخ نامناسب سرور و وضعیت‌های غیرمنتظره نیز رفتار قابل قبولی داشته باشد.

در این پروژه، مدیریت خطا می‌تواند شامل موارد زیر باشد:

  • بررسی وضعیت اتصال اینترنت
  • مدیریت Timeout
  • مدیریت پاسخ‌های خطای API
  • پردازش پیام خطای Backend
  • جلوگیری از Crash در صورت نبود داده
  • بررسی Null بودن داده‌ها
  • نمایش پیام قابل فهم برای کاربر
  • فراهم‌کردن امکان Retry
  • جلوگیری از انجام چندباره عملیات
  • ثبت وضعیت عملیات در رابط کاربری
  • مدیریت خطاهای موقت و دائمی
  • حفظ پایداری صفحه هنگام ایجاد مجدد
  • استفاده از مقادیر پیش‌فرض در صورت شکست Remote Config

این رویکرد باعث می‌شود اپلیکیشن در شرایط واقعی شبکه و دستگاه‌های مختلف، رفتار قابل پیش‌بینی‌تری داشته باشد.


توسعه‌ پذیری و قابلیت نگهداری

با افزایش تعداد صفحات و قابلیت‌ها، نگهداری پروژه به یکی از چالش‌های مهم تبدیل می‌شود. به همین دلیل، ساختار اپلیکیشن باید از ایجاد وابستگی‌های غیرضروری میان بخش‌ها جلوگیری کند.

در طراحی پروژه، اصول زیر اهمیت داشته‌اند:

  • تفکیک مسئولیت‌ها
  • جلوگیری از قرارگرفتن تمام منطق در Activity یا Fragment
  • جداسازی منطق رابط کاربری از منطق دریافت داده
  • استفاده مجدد از کامپوننت‌ها
  • کاهش کدهای تکراری
  • متمرکزکردن مدیریت خطا
  • متمرکزکردن مدیریت درخواست‌های شبکه
  • ایجاد ساختار مشخص برای مدل‌های داده
  • جداسازی تنظیمات Firebase از منطق صفحات
  • تعریف مسیر مشخص برای مدیریت Notification
  • خوانایی و قابلیت تست بهتر کد
  • امکان اضافه‌شدن قابلیت‌های جدید با حداقل تغییر در بخش‌های موجود

اگر در پروژه از MVVM، Clean Architecture، Repository Pattern، Use Case، Dependency Injection یا Modularization استفاده شده است، می‌توان این قسمت را فنی‌تر و دقیق‌تر کرد.


مدیریت چرخه حیات Android

در اپلیکیشن‌هایی که صفحات و عملیات ناهمگام زیادی دارند، چرخه حیات Android اهمیت ویژه‌ای دارد. اجرای عملیات بدون توجه به Lifecycle ممکن است باعث Memory Leak، Crash یا نمایش اطلاعات در صفحه‌ای شود که دیگر فعال نیست.

در این پروژه مواردی مانند موارد زیر در طراحی فنی اهمیت داشته‌اند:

  • مدیریت Lifecycle صفحات
  • جلوگیری از به‌روزرسانی View پس از نابودی صفحه
  • حفظ State هنگام Configuration Change
  • بازیابی اطلاعات موردنیاز پس از ایجاد مجدد صفحه
  • توقف عملیات غیرضروری هنگام خروج کاربر
  • مدیریت بازگشت اپلیکیشن از Background
  • جلوگیری از ثبت چندباره Observer یا Listener
  • آزادسازی منابع در زمان مناسب
  • مدیریت صحیح Context
  • جلوگیری از نگهداری Reference غیرضروری به Activity

این موارد مخصوصاً در بخش‌هایی مانند دریافت API، Push Notification، Listenerها و تغییر وضعیت رابط کاربری اهمیت دارند.


بهینه‌ سازی تجربه کاربری و عملکرد

باتوجه‌به تعداد زیاد صفحات و قابلیت‌های پروژه، عملکرد و روان‌بودن رابط کاربری نیز بخشی از فرایند توسعه بوده است.

موارد قابل اشاره در این بخش عبارت‌اند از:

  • کاهش پردازش‌های غیرضروری در Main Thread
  • مدیریت عملیات ناهمگام
  • جلوگیری از درخواست‌های تکراری
  • مدیریت مناسب Loading
  • کاهش ایجاد مجدد عناصر رابط کاربری
  • استفاده مجدد از Viewها و کامپوننت‌ها
  • کنترل تعداد به‌روزرسانی‌های رابط کاربری
  • جلوگیری از چندبار کلیک‌کردن روی عملیات حساس
  • بهینه‌سازی نمایش لیست‌ها
  • مدیریت صحیح تصاویر و منابع
  • کاهش مصرف حافظه
  • مدیریت وضعیت هنگام تغییر صفحه
  • بهبود زمان پاسخ‌گویی رابط کاربری

آماده‌ سازی نسخه انتشار

این پروژه با هدف اجرا به‌عنوان یک محصول واقعی توسعه داده شده و فرایند آماده‌سازی Build نیز بخشی از توسعه آن است.

این بخش می‌تواند شامل موارد زیر باشد:

  • مدیریت Build Typeهای مختلف
  • ساخت نسخه Debug
  • ساخت نسخه Release
  • مدیریت تنظیمات Firebase
  • مدیریت فایل‌های پیکربندی محیط
  • تنظیم Application ID
  • مدیریت Version Code
  • مدیریت Version Name
  • امضای نسخه Release
  • مدیریت Keystore
  • فعال‌سازی Code Shrinking در صورت نیاز
  • بررسی رفتار Push Notification در نسخه Release
  • بررسی Remote Config در محیط واقعی
  • تست نصب و به‌روزرسانی نسخه
  • آماده‌سازی خروجی APK یا AAB
  • کنترل Dependencyها و تنظیمات Gradle

کنترل نسخه با Git

سورس‌کد پروژه با استفاده از Git مدیریت شده است. استفاده از Version Control امکان ثبت تاریخچه تغییرات، مدیریت توسعه قابلیت‌ها و بازگشت به نسخه‌های پایدار را فراهم می‌کند.

موارد مرتبط:

  • مدیریت سورس پروژه با Git
  • ثبت Commit های تفکیک‌شده
  • توسعه قابلیت‌ ها در Branchهای مستقل
  • مدیریت تغییرات و رفع Conflict
  • نگهداری نسخه‌های پایدار
  • مدیریت فایل‌های حساس از طریق .gitignore
  • جلوگیری از ثبت Keystore و اطلاعات محرمانه
  • ثبت تغییرات مرتبط با Firebase و Android Build Configuration

چالش‌های فنی پروژه

توسعه اپلیکیشنی با تعداد زیادی صفحه و قابلیت، چالش‌های فنی متعددی ایجاد می‌کند. مهم‌ترین چالش‌های این پروژه را می‌توان به شکل زیر معرفی کرد:

۱. حفظ یکپارچگی میان تعداد زیادی صفحه

با افزایش تعداد صفحات، احتمال ایجاد رفتارهای متفاوت، کدهای تکراری و تجربه کاربری ناسازگار افزایش پیدا می‌کند. استفاده از کامپوننت‌ها و الگوهای مشترک به حفظ یکپارچگی پروژه کمک کرد.

۲. مدیریت State در جریان‌های مختلف

هر صفحه ممکن است وضعیت‌های Loading، Success، Error، Empty و Offline داشته باشد. مدیریت شفاف این وضعیت‌ها باعث شد رفتار رابط کاربری قابل پیش‌بینی باقی بماند.

۳. مدیریت اعلان در وضعیت‌های مختلف اپلیکیشن

Push Notification در حالت‌های Foreground، Background و Terminated رفتار متفاوتی دارد. برای هر وضعیت، مسیر مناسب دریافت، پردازش و هدایت کاربر در نظر گرفته شد.

۴. مدیریت تغییر FCM Token

FCM Token یک مقدار دائمی نیست و ممکن است تغییر کند. بنابراین چرخه Refresh و همگام‌سازی مجدد Token با Backend باید به‌درستی مدیریت شود.

۵. اعمال تنظیمات از راه دور بدون کاهش پایداری

Remote Config باید دارای مقدار پیش‌فرض و رفتار جایگزین باشد تا شکست درخواست یا نبود اینترنت، مانع اجرای اپلیکیشن نشود.

۶. توسعه‌پذیری پروژه

ساختار پروژه باید به شکلی باشد که اضافه‌شدن صفحه یا قابلیت جدید، باعث تغییر گسترده و ناخواسته در بخش‌های موجود نشود.


دستاوردهای فنی پروژه

مهم‌ترین دستاوردهای فنی این پروژه عبارت‌اند از:

  • توسعه یک اپلیکیشن Native Android گسترده و قابلیت‌محور
  • پیاده‌سازی تعداد زیادی صفحه و جریان کاربری
  • ایجاد تجربه کاربری یکپارچه در بخش‌های مختلف
  • توسعه ساختار قابل نگهداری برای گسترش آینده پروژه
  • مدیریت Stateهای مختلف رابط کاربری
  • یکپارچه‌سازی کامل Firebase Cloud Messaging
  • پیاده‌سازی چرخه مدیریت FCM Token
  • مدیریت اعلان در وضعیت‌های مختلف اپلیکیشن
  • هدایت کاربر از Notification به صفحه مرتبط
  • استفاده از Firebase Remote Config
  • ایجاد زیرساخت Feature Flag
  • امکان اعمال تنظیمات بدون انتشار نسخه جدید
  • افزایش کنترل عملیاتی روی رفتار اپلیکیشن
  • مدیریت خطاهای شبکه و پاسخ‌های نامعتبر
  • آماده‌ سازی پروژه برای Build و انتشار
  • مدیریت سورس‌کد و تغییرات با Git

فناوری‌های استفاده‌شده

                                 
Android SDK
Firebase
Firebase Cloud Messaging
Firebase Remote Config
Push Notification
FCM Token Management
Remote Feature Flags
Git
Gradle                          
Java
Android XML
Jetpack Compose
Material Design
View Binding
Data Binding
MVVM
MVI
Clean Architecture
Repository Pattern
Coroutines
Flow
LiveData
Retrofit
OkHttp
Room
SQLite
SharedPreferences
DataStore
Hilt
Dagger
Koin
Navigation Component
Deep Linking
Firebase Analytics
Firebase Crashlytics
Firebase Authentication
RESTful API
JSON
ProGuard
R8