توسعه اپلیکیشن موبایل، فرآیند ایجاد نرمافزارهایی است که بر روی دستگاههای موبایل اجرا میشوند. دراین حال، بهطور معمول، یک اپلیکیشن موبایل برای کار با منابع محاسباتی از راه دور، از اتصال شبکه استفاده میکند. بنابراین، فرآیند توسعه موبایل شامل ایجاد بستههای نرمافزاری نصبشدنی (کد، باینریها، داراییها و غیره)، پیادهسازی خدمات پشتیبانی مانند دسترسی به دادهها ازطریق رابط برنامهنویسی کاربردی (API) و تست برنامه بر روی دستگاههای هدف است.
پلتفرمهای اپلیکیشنهای موبایل و دستگاهها
در بازار مدرن گوشیهای هوشمند دو پلتفرم اصلی وجود دارد که یکی از آنها سیستمعامل iOS از شرکت اَپل (Apple) است. دراین راستا، پلتفرم iOS سیستم عاملی است که خط محبوب گوشیهای آیفون اَپل را قدرت میبخشد. در ادامه، دومین پلتفرم، اندروید (Android) از گوگل (Google) است که نهتنها توسط دستگاههای گوگل بلکه توسط بسیاری از شرکتهای تولیدکننده دیگر (OEMs) برای ساخت گوشیها و دستگاههای هوشمند دیگر استفاده میشود.
بااین حال، اگرچه برخی شباهتها در توسعه اپلیکیشنها برای این دو پلتفرم وجود دارد، توسعه برای iOS و سیستمعامل اندروید شامل استفاده از کیتهای توسعه نرمافزار (SDK) و زنجیره ابزار توسعه متفاوتی است. گفتنی است که درحالیکه اپل، iOS را منحصراً برای دستگاههای خود استفاده میکند، گوگل، اندروید را در اختیار شرکتهای دیگر بهشرط آنکه الزامات خاصی را مانند شاملکردن برخی از اپلیکیشنهای گوگل بر روی دستگاههایی که به فروش میرسانند، رعایت کنند، قرار میدهد. همچنین، با هدف قراردادن این دو پلتفرم، توسعهدهندگان میتوانند اپلیکیشنهایی برای صدها میلیون دستگاه بسازند.
گزینههای ساخت اپلیکیشنهای موبایل
چهار رویکرد اصلی برای توسعه برنامههای موبایل وجود دارد:
- اپلیکیشنهای بومی (Native Mobile Applications)
- اپلیکیشنهای بومی چندپلتفرمی (Cross-Platform Native Mobile Applications)
- اپلیکیشنهای هیبریدی (Hybrid Mobile Applications)
- اپلیکیشنهای وب پیشرو (Progressive Web Applications)
براین اساس، هر یک از این رویکردها، مزایا و معایب خاص خود را دارد و بههنگام انتخاب رویکرد مناسب برای پروژهها، توسعهدهندگان به تجربه کاربری مطلوب، منابع محاسباتی و ویژگیهای بومی موردنیاز توسط اپلیکیشن، بودجه توسعه، اهداف زمانی و منابع موجود برای نگهداری اپلیکیشن توجه میکنند.
اپلیکیشنهای بومی
اپلیکیشنهای بومی موبایل در زبانهای برنامهنویسی و فریمورکهایی (Framework) نوشته میشوند که توسط مالک پلتفرم ارائه شده و مستقیماً بر روی سیستمعامل دستگاه مانند iOS و اندروید اجراء میشوند.
اپلیکیشنهای چندپلتفرمی
اپلیکیشنهای بومی چندپلتفرمی میتوانند با استفاده از زبانها و فریمورکهای مختلف برنامهنویسی نوشته شوند، اما درنهایت به یک اپلیکیشن بومی تبدیل میشوند که مستقیماً بر روی سیستمعامل دستگاه اجراء میگردد.
اپلیکیشنهای هیبریدی (ترکیبی) وب
اپلیکیشنهای موبایل هیبریدی با استفاده از تکنولوژیهای استاندارد وب مانند جاوا اِسکریپت (JavaScript)، CSS و HTML5 ساخته و بهعنوان بستههای قابلنصب اپلیکیشن در دسترس قرار میگیرند. علاوه بر این، برخلاف اپلیکیشنهای بومی، اپلیکیشنهای ترکیبی بر روی یک «وب کانتینر» اجراء میشوند که محیطی برای مرورگر (Browser) و پلی برای APIهای بومی دستگاه ازطریق آپاچی کوردوا (Apache Cordova) فراهم میکند.
اپلیکیشنهای وب پیشرو
اپلیکیشنهای وب پیشرو (PWAs) رویکرد جایگزینی برای توسعه سنتی اپلیکیشنهای موبایل ارائه میدهند که نیاز به نصب و ارسال ازطریق فروشگاه اپلیکیشن را کنار میگذارند. درهمین حال، PWAs، مجموعهای از اپلیکیشنهای وب هستند که با استفاده از مجموعهای از قابلیتهای مرورگر مانند کارکرد درحالت آفلاین، اجراء فرآیندهای پسزمینه و افزودن یک لینک به صفحه اصلی دستگاه، تجربه کاربری شبیه یک برنامه را فراهم میکنند.
مزایا |
معایب |
بهترین عملکرد در زمان اجراء |
هزینههای بالاتر برای ساخت و نگهداری اپلیکیشن |
کد پایه یکسان برای چندین پلتفرم |
وابستگی به پلها و کتابخانهها برای ویژگیهای بومی دستگاه |
کد پایه مشترک بین اپلیکیشنهای وب و موبایل |
عملکرد کمتر درمقایسه با اپلیکیشنهای بومی |
دسترسی همزمان اپلیکیشن برای وب و موبایل |
پشتیبانی محدود از ویژگیهای بومی دستگاه |
دسترسی مستقیم به APIهای دستگاه |
کدهای چندگانه برای هر پلتفرم |
ساخت و نگهداری آسان اپلیکیشن |
محدودیتهای عملکرد بهدلیل پلزنی |
استفاده از مهارتهای توسعه وب برای ساخت اپلیکیشنهای موبایل |
پشتیبانی محدود از ویژگیهای بومی دستگاه |
بدون نیاز به نصب و دسترسی از طریق یک URL |
وابستگی قابلیتهای برنامه به مرورگر موردِاستفاده |
مقایسه اپلیکیشنهای بومی و هیبریدی
در سطح کلی، چهار تفاوت اصلی میان اپلیکیشنهای بومی و هیبریدی وجود دارد که در جدول زیر نشان داده شده است:
بومی |
هیبریدی |
مخصوص پلتفرم |
چندپلتفرمی |
زبان کامپایلشده | اِسکریپتنویسیشده / کامپایلشده |
دسترسی به سختافزار دستگاه |
پلاگینها / ماژولهای بومی |
فریمورکهای پلتفرم |
فریمورکهای وب |
چرا باید رویکرد هیبریدی/چندپلتفرمی را انتخاب کرد؟
یکی از مشکلات توسعه اپلیکیشنهای بومی موبایل این است که به مجموعه مهارتهای بسیار تخصصی نیاز دارد. اگرچه جوامع بزرگی از توسعهدهندگان برای زبانهای C و جاوا (Java) که بیشتر برای توسعه بومی استفاده میشوند، وجود دارد، اما تعداد توسعهدهندگانی که با نسخههای مخصوص پلتفرم این زبانها و محیطهای توسعه یکپارچه (IDE) مربوطه آشنا باشند، کمتر است. در واقع، تقاضا برای توسعهدهندگان ماهر اپلیکیشنهای بومی آنقدر زیاد است که بسیاری از شرکتها در استخدام و نگهداری آنها با مشکل مواجه هستند و اغلب مجبور به استفاده از شرکتهای طراحی و توسعه خارجی برای ساخت اپلیکیشنهای خود میشوند.
نحوه کارکرد فریمورکهای هیبریدی و چندپلتفرمی
اپلیکیشنهای ترکیبی به توسعهدهندگان اجازه میدهند تا از تکنولوژیهای وب ازجمله JavaScript / CSS / HTML5 استفاده کنند و سپس این اپلیکیشنهای وب را در یک کانتینر یا محفظه قرار دهند که به آنها اجازه میدهد تا مانند یک اپلیکیشن بومی بر روی دستگاه عمل کنند. همچنین، از آنجا که اپلیکیشنهای موبایل هیبریدی صرفاً اپلیکیشنهای تحت وب هستند که در یک محیط مرورگرِ جاسازیشده اجراء میشوند، حجم بیشتری از کدهای یک اپلیکیشن وب میتواند برای ساخت یک برنامه موبایل مورد استفاده واقع شود. از سویی، با افزایش عملکرد رندر (Render) و زمان اجراء مرورگرهای موبایل، توسعه هیبریدی به یک گزینه مناسب برای توسعهدهندگان تحت وب که میخواهند بهسرعت دست به خلق اپلیکیشنهای موبایل بزنند، تبدیل شده است.
بهطور مشابهی، PWAs با استفاده از تکنولوژیهای برنامهنویسی سنتی وب شامل نوعی از JavaScript، HTML5 و CSS نوشته میشوند و در ابتدا ازطریق مرورگر بر روی دستگاه یا کامپیوتر قابلدسترسی هستند. افزون بر این، بیشتر فریمورکهای چندپلتفرمی مانند React Native و Native Script، کامپوننتهای بومی را برای کار با کد چندپلتفرمی ارائه میدهند و این در حالی است که برخی دیگر مانند فلاتر (Flutter) و Xamarin، کد چندپلتفرمی را برای عملکرد بهتر به کد بومی تبدیل میکنند.
چرخه حیات توسعه اپلیکیشن موبایل
دراین راستا، دو جزء اصلی مرتبط با یک برنامه موبایل وجود دارد: نخست «فرانتاند (FrontEnd)» اپلیکیشن موبایل که بر روی دستگاه موبایل قرار دارد و سپس خدمات «بکاند (BackEnd)» که از فرانتاند موبایل پشتیبانی میکند.
فرانتاند درمقابل بکاِند
در روزهای اولیه عصر اپلیکیشنهای مدرن برای گوشیهای هوشمند، اپلیکیشنها مسیری مشابه با سایتهای وب، طی کردند، بهنحویکه ابتدا اپلیکیشنها و سایتها بهصورت کاملا مستقل عمل میکردند و بیشتر بهعنوان تبلیغات استاتیک (Static) برای برند، شرکت، محصول یا خدمات فعالیت داشتند. با این وجود، با بهبود قابلیتهای شبکه و اتصال، اپلیکیشنها بهطور فزایندهای به منابع داده و اطلاعاتی که خارج از خود اپلیکیشن هستند متصل شدند و بهشکل پویاتری ازطریق بروزرسانی رابط کاربری (UI) و محتوای خود با دادههای دریافتی ازطریق شبکه از منابع داده (Data Source)، فعالیت کردند.
درنتیجه، برنامههای فرانتاند موبایل بهطرز فزایندهای به سرویسهای بکاند وابسته و با آنها یکپارچه شدهاند که دادههایی را برای استفاده در فرانتاند موبایل فراهم میکنند. این دادهها از سوی دیگر، میتوانند شامل اطلاعات محصول برای اپلیکیشنهای تجارت الکترونیک (e-commerce) یا اطلاعات پرواز برای اپلیکیشنهای مسافرتی و رزرواسیون باشند. برای یک بازی موبایل نیز این دادهها ممکن است شامل مراحل جدید، چالشها و امتیازات یا آواتارهای بازیکنان دیگر باشند.
چگونگی ارتباط فرانتاِند با بکاِند
فرانتاند موبایل، دادهها را از بکاند و ازطریق انواع مختلف درخواستهای سرویس (Service Call) مانند APIها دریافت میکند. علاوه بر این، در برخی موارد، این رابطهای برنامهنویسی کاربردی توسط همان مجموعهای که اپلیکیشن موبایل را توسعه میدهد، کنترل میشود. درموارد دیگر، API ممکن است توسط یک شخص ثالث (۳rd Party) مدیریت شود و ازطریق یک توافق تجاری به اپلیکیشن موبایل دسترسی داده شود. برای مثال، یک توسعهدهنده ممکن است با ارسال درخواست به سرویسهای شرکتهای رسانهای یا تبلیغاتی، محتوای شبکههای اجتماعی یا تبلیغات را دریافت کند. دراین حالت، توسعهدهنده باید قراردادی را به امضاء رساند تا اطلاعات دسترسی به API و کلیدی را دریافت کند که نحوه استفاده از آن رابط برنامهنویسی کاربردی، هزینهها و مقدار دادههایی که میتوان درخواست کرد را تنظیم میکند.
چرا توسعهدهندگان از بکاند ابری (Cloud) استفاده میکنند؟
برای بسیاری از اپلیکیشنها، توسعهدهندگان موبایل مسئول ایجاد و مدیریت سرویسهای بکاند اپلیکیشن خود هستند، اما ممکن است توسعهدهنده موبایل در اجراء زیرساخت بکاند تخصصی نداشته باشد. در چنین شرایطی، توسعهدهندگان ممکن است ترجیح دهند تا از یک ارائهدهنده خدمات کلاود بهعنوان یک ارائهدهنده بکاند درقالب سرویس (BaaS)، استفاده کنند که تمام فرآیندهای پیچیده مدیریت قابلیتهای بکاند را انجام میدهد، بهطوریکه توسعهدهندگان بتوانند بدون نگرانی از مسائل مربوط به مقیاسپذیری، امنیت و قابلیت اطمینان، بر روی ویژگیها و عملکردهایی که در اپلیکیشن خود ایجاد میکنند، تمرکز کنند.
فرانتاند اپلیکیشن موبایل
فرانتاند موبایل بخش بصری و تعاملی اپلیکیشن است که کاربر آن را تجربه میکند. معمولا این بخش بر روی دستگاه قرار دارد، یا حداقل یک آیکون نمایانگر اپلیکیشن بهروی صفحه اصلی دستگاه یا در کاتالوگ اپلیکیشنهای دستگاه دیده میشود. همچنین، اپلیکیشن را میتوان از فروشگاه اپلیکیشن دانلود کرد که مستقیما بر روی دستگاه نصب نمود یا مانند PWAs ازطریق مرورگر دستگاه به آن دسترسی پیدا کرد.
گردشکار توسعه فرانتاند چگونه به نظر میرسد؟
بههنگامی که یک توسعهدهنده میگوید که برنامهنویس اپلیکیشن موبایل است، معمولاً به این بخش فرانتاند از اپلیکیشن اشاره دارد و مهارتهایی در زبانها و تکنولوژیهایی دارد که برای ایجاد این برنامههای فرانتاند استفاده میشود. از طرف دیگر، بسته به اندازه تیم تولیدکننده اپلیکیشن، افراد مختلفی ممکن است در طراحی و توسعه اپلیکیشن موبایل فرانتاند دخیل باشند. اندازه تیم نیز میتواند از یک توسعهدهنده که تمام کارهای مربوط به ساخت برنامه را انجام میدهد تا تیمهایی با دهها یا صدها نفر با مهارتهای تخصصی، متفاوت باشد.
برای مثال، ممکن است طراحان گرافیکی مخصوصی برای ایجاد عناصر بصری اپلیکیشنها مانند آیکونها، پسزمینهها، رنگها، تمها و دیگر بخشهای اپلیکیشن وجود داشته باشند. تیم موردنظر همچنین ممکن است طراحان تجربه کاربری (UE) و رابط کاربری نیز داشته باشد که بر روی چیدمان اجزاء و نحوه تعامل آنها با یکدیگر و کاربر کار میکنند. لازم به ذکر است که در برخی از بازیها، تیم موردبحث ممکن است شامل توسعهدهندگان موشن گرافیک (Motion Graphic) و حتی مهندسانی باشد که موتورهای بازی را برای کنترل فیزیک اجزاء متحرک در اپلیکیشن همچون حرکت یک اتومبیل در یک بازی مسابقهای، توسعه دهند.
نحوه یکپارچهسازی اپلیکیشنهای موبایل با بکاِند
بدونتوجه به اندازه تیم، عنصر مهم در تلاشهای توسعه، ساخت منطق برنامه است که مسئول ایجاد تماسهای شبکهای به سرویسهای بکاند، دریافت دادهها و بروزرسانی دادهها در سیستمهای بکاند با اطلاعات جدید تولیدشده از اپلیکیشن است. علاوه بر آن، این سرویسهای بکاند معمولاً ازطریق انواع مختلف APIها در دسترس قرار میگیرند که شناختهشدهترین آنها REST و GraphQL هستند. همچنین، برخی از APIهای سرویسهای بکاند بهطور مستقیم ازطریق تماسهای موجود در پلتفرم در دسترس اپلیکیشن هستند و این در حالی است که برای بسیاری از سرویسهای تخصصی، نیاز به یک کیت SDK است که به اپلیکیشن افزوده شود. در ادامه، پس از افزودن SDK به اپلیکیشن ازطریق محیط توسعه، برنامه ذکرشده میتواند از رابطهای برنامهنویسی کاربردی تعریفشده در SDK استفاده کند.
چگونگی تعامل با دادههای بکاِند
یک نمونه از سرویس بکاند برای یک فرانتاند موبایل میتواند یک پایگاه داده (Database) باشد که اطلاعات مورد استفاده در اپلیکیشن را در خود نگه میدارد. برای دسترسی مستقیم به پایگاه داده نیز توسعهدهنده موبایل باید از موقعیت شبکه Database، پروتکل دسترسی، اطلاعات احراز هویت و مجوز و دستورات خاص پایگاه داده برای استخراج دادههای مورد نیاز مطلع باشد. دراین حال، بهجای روش ذکرشده، توسعهدهنده میتواند به هنگام تعامل با پایگاه داده از یک API تخصصی استفاده کند که در این حالت توسعهدهنده تنها باید پارامترهای موردنیاز در یک متد یا روش درخواست را برای دریافت یا بهروزرسانی اطلاعات، لازم بداند. افزون بر این، در برخی موارد، خود توسعهدهنده ممکن است این APIها را ایجاد یا از تعریفی که توسط مالک/اپراتور منبع بکاند فراهم شده است، استفاده کند.
بهطور معمول نیز از رابط برنامهنویسی کاربردی REST برای تعامل با منابع داده در فضای ابری مانند یک پایگاه داده کلاود (Cloud Database) استفاده میشود. رابط برنامهنویسی کاربردی GraphQL نیز گزینه دیگری برای توسعهدهندگان است، زیراکه کار با دادههای بکاند در اپلیکیشن موبایل را آسانتر میکند. از طرفی، GraphQL ازطریق یک نقطه دسترسی (Endpoint API)، واحد قابلیتهای کوئری (Query) را فراهم میکند و یک طرحواره دادهمحور (Data Schema) را که میتواند برای ساخت و توسعه آسان مدلهای دادهمحور که در اپلیکیشن استفاده میشود، به کار برد.
بکاِند اپلیکیشن موبایل
صرفنظر از پلتفرم فرانتاند یا روش توسعهای که استفاده میشود، ارائه اپلیکیشنهای موبایل با کیفیت بالا که کاربران را راضی نگه دارد و باعث حفظ آنها شود، نیازمند سرویسهای بکاند قابلاطمینان است. همچنین، با توجه به اهمیت حیاتی سرویسهای بکاند برای موفقیت اپلیکیشن موبایل، توسعهدهندگان باید چندین تصمیم معماری مهم را درنظر بگیرند که تصمیمهای مذکور شامل این موارد میشود که کدام سرویسها را خود ایجاد کنند و از کدام سرویسهای شخص ثالث بهره ببرند و نیز اینکه آیا باید سرویسهای خود را اجراء و نگهداری کنند یا از خدمات شخص ثالث استفاده کنند.
در ادامه، پاسخ به این امر بهشکل فزایندهای روشن است، به نوعی که برای بهبود بهرهوری و کارایی توسعهدهندگان، برنامهنویسان اپلیکیشن موبایل باید فقط سرویسهایی را ایجاد کنند که بهشدت خاص به حوزه اپلیکیشن مرتبط هستند و دارای مالکیت معنوی منحصر بهفردی هستند. از سوی دیگر، حتی برای سرویسهایی که خود توسعهدهندگان ایجاد میکنند، باید تقریبا همیشه از سرویسهای مبتنی بر فضای ابری برای ساخت و نگهداری زیرساخت بکاند استفاده شود.
سرویسهای کلیدی اپلیکیشن موبایل
مضاف بر این، صدها سرویس کلاود و ۳rd party وجود دارد که توسعهدهندگان اپلیکیشن موبایل میتوانند از آنها برای سرعتبخشی به توسعه و تحویل اپلیکیشنهای خود استفاده کنند. با این حال، به احتمال زیاد یک توسعهدهنده قادر نخواهد بود که در همه این سرویسهای جداگانه تخصص پیدا کند. درعوض، توسعهدهندگان موبایل باید بهدنبال یک محیط توسعه باشند که به آنها این امکان را دهد که بهراحتی و سریعترین شکل ممکن قابلیتهای موردنیاز رایج را درحالیکه همچنان آزادی استفاده از سرویسهای متعدد موجود را حفظ میکنند، در اپلیکیشن خود یکپارچهسازی و استفاده کنند.
موارد ضروری
- ثبتنام/ورود و مدیریت کاربران
- ورود با شبکههای اجتماعی (ورود ازطریق فیسبوک (Facebook)، X و غیره)
- تجزیه و تحلیل و درگیر کردن کاربران
- اعلانها (Push Notifications)
- تست بر روی دستگاههای واقعی
سرویسهای داده
- ذخیرهسازی ابری
- دادههای بلادرنگ (Real-Time) و آفلاین
- منطق اپلیکیشن/توابع اَبری (Cloud Functions)
یادگیری ماشین (ML)
- رباتهای مکالمهگر
- تشخیص تصویر و ویدئو
- تشخیص گفتار