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

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

گزارش خطا

متأسفانه در کافه‌بازار امکان گزارش خطا وجود ندارد و همین امر باعث می‌شود توسعه‌دهنده به درستی متوجه خطاهای رخ داده نشود، البته در گوگل پلی نیز که این امکان وجود دارد کاربران هنگام بسته شدن برنامه معمولاً گزینه‌ی گزارش خطا را انتخاب نمی‌کنند ! پس در این صورت شما به عنوان توسعه‌دهنده از خطاهای رخ داده اطلاع نخواهید داشت و در مقابل برای رفع آن مشکلات نمی‌توانید اقدام لازمه را انجام دهید، پس گزارش‌گیری از خطاها یک امر مهمی محسوب می‌شود، هنگام بروز خطا در بیشتر برنامه‌ها نظیر تلگرام، تمامی اطلاعات مربوط به خطا (full stack trace) درون فایلی ذخیره شده و در زمان مناسب به سرور منتقل خواهد شد، که خوب این کار درست و عقلانی به نظر می‌رسد، چرا که در صورت پیاده‌سازی درست می‌توان این فایل‌های متنی را به فرمت csv درآورده و اطلاعات مورد نیاز را از آن استخراج نمود.

من از روش ساده‌تری استفاده کردم، شما می‌توانید با ساختن یک Slack bot user به صورت اتوماتیک پیامی در Channel دلخواه خود ارسال کنید، پس یک کانال برای گزارش خطا ایجاد کردم، و تنظیم کردم که هنگام بروز خطا با استفاده از یک ‍‍‍‍HTTP متد کلیه اطلاعات خطا را در کانال مربوطه منتشر کند، این یک روش نسبتاً اصولی و ساده‌ای است که به راحتی می‌توانید به صورت لحظه‌ای از بروز خطاهای برنامه اطلاع داشته باشید.

من از روش ساده‌تری استفاده کردم، شما می‌توانید با ساختن یک Slack bot user به صورت اتوماتیک پیامی در Channel دلخواه خود ارسال کنید، پس یک کانال برای گزارش خطا ایجاد کردم، و تنظیم کردم که هنگام بروز خطا با استفاده از یک ‍‍‍‍HTTP متد کلیه اطلاعات خطا را در کانال مربوطه منتشر کند، این یک روش نسبتاً اصولی و ساده‌ای است که به راحتی می‌توانید به صورت لحظه‌ای از بروز خطاهای برنامه اطلاع داشته باشید.

چون برنامه را روی دستگاه‌های مختلف تست نکرده بودم، دائما از گوشی‌های عجیب و غریب بیشتر از برند (huawei, lenovo) خطا دریافت می‌کردم، ولی در عوض چون اطلاعات خوبی از خطاها داشتم توانستم طی دو نسخه تقریباً تمامی خطا را رفع کنم، پس حتماً برای قسمت‌هایی که احتمال خطا می‌دهید (try/catch) بنویسید و همچنین از (unhandled exception) ها نیز گزارش تهیه کنید، توجه داشته باشید به همراه توضیحات خطا، اطلاعات دستگاه (نام، نسخه‌ی اندروید،نسخه‌ی برنامه، …) را نیز ارسال کنید تا بهترین درک را از خطای رخ داده داشته باشید !

استفاده از Realm

استفاده از Realm به عنوان دیتابیس داخلی در مقابل ‍‍sqlite خیلی لذت بخش خواهد بود چرا که به راحتی می‌توانید مثل یک ORM رکوردهای ذخیره شده ‍‍را در قالب ‍‍Java Object داشته باشید و همچنین به راحتی اعمالی نظیر sort ، ‍‍search ، ‍‍aggregation بر روی Data مورد نظر خواهید داشت که این خیلی لذت بخش خواهد بود.

پیشنهاد من این است که حتماً خیلی خوب داکیونت این لایبری را بخوانید، چون این لایبری هنوز به صورت کامل پایدار نشده و دائم در حال تغییر است.

استفاده از Retrofit

برای ارتباط با سرورREST API از ورژن 1.9 لایبری Retrofit استفاده شده، ورژن ۱ این لایبری مشکلاتی را به همراه داشت، به عنوان مثال خطاهای HTTP و request timeout درون یک Callback بررسی می‌شود و همین امر باعث می‌شد تا در بعضی مواقع به اشتباه مشکلات شبکه‌ای را خطاهای HTTP در نظر بگیرد ! ، در ورژن ۲ این لایبری تا حدود زیادی این مشکلات برطرف شده است.

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

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

قبلاً که عشق مایکروسافت بودم، با زبان شی‌گرا سی‌شارپ کار میکردم، زبان جاوا در مقایسه با سی‌شارپ به صورت بهتری اصول شی‌گرایی را پوشش می‌دهد، ولی در روند توسعه اندروید، جاوا دردسرهای خودش را خواهد داشت، به عنوان مثال اغلب با خطای null exception روبه رو خواهید شد که برای جلوگیری از این مشکل باید دائم چک کنید که آیا کلاس مورد نظر null است یا نه، و یا برای فیلتر کردن یک لیست از اشیا مجبور خواهیم بود از لایبری‌های دیگری استفاده کنیم، به تازگی زبان جدید kotlin این مشکلات را بر طرف کرده و با نگرش جدیدی، روند توسعه‌ی اندروید و به کل برنامه‌های جاوایی را بهبود بخشیده، اگر توسعه‌دهنده اندروید هستید حتماً نگاهی به این زبان داشته باشید !

برنامه‌ی اندروید تلپاتی به صورت کامل در این مخزن منتشر شده، می‌دانم که متن باز کردن چنین برنامه‌ای برای افراد سود چندانی نخواهد داشت چرا که برای این ایده‌ی خاص نوشته شده، ولی شما می‌توانید از تکنیک‌های مورد استفاده در این پروژه استفاده کنید مثل همین گزارش گیری خطاهای رخ داده و یا استفاده از Realm برای ذخیره اطلاعات.