بحث درباره برنامه تلفن همراه
مقدمه
برنامههای تلفن همراه و HTML5 دو مورد از پرطرفدارترین فناوریهای حال حاضر هستند و همپوشانی زیادی دارند. برنامههای وب در مرورگرهای تلفن همراه اجرا میشوند و همچنین میتوانند بهعنوان برنامههای به زبان اصلی دستگاه در پلاتفرمهای مختلف تلفن همراه بازبستهبندی شوند. با وجود طیف گستردهای از پلاتفرمها برای پشتیبانی، همراه با قدرت محض مرورگرهای تلفن همراه، توسعهدهندگان به HTML5 بهعنوان راهحل «یکبار بنویس، چندبار اجرا کن» روی میآورند. اما آیا واقعاً قابلاجرا است؟ هنوز دلایل قانعکنندهای برای استفاده از برنامههای بومی وجود دارد و واضح است که بسیاری از توسعهدهندگان واقعاً این مسیر را انتخاب میکنند. این مقاله بحثی درباره بومی درمقابل وب است.
غنای ویژگی
نکته: برنامه بومی میتواند کارهای بیشتری انجام دهد
میتوانیم عملکرد تلفن همراه را به دو بعد تقسیم کنیم: تجربه خود برنامه، و نحوه اتصال آن به بومسازگان دستگاه، مثلاً برای Android، این ویژگیها شامل ابزارهها و اعلانها میشود. آگهی بومی در هر دو بعد برتری دارد.
ازنظر تجربه برنامه، برنامههای به زبان اصلی دستگاه میتوانند کارهای بیشتری انجام دهند. آنها بهراحتی میتوانند رویدادهای تند کشیدن، حتی چندلمسی، را برای پلاتفرمهایی که از آن پشتیبانی میکنند دریافت کنند. این برنامهها معمولاً میتوانند درصورت فشار دادن کلیدهای سختافزاری، مثل دکمه جستجوی Android و کنترلهای میزان صدا، اقدام کنند. آنها میتوانند به سختافزار هم دسترسی داشته باشند، مثل GPS و دوربین. و با اجازه کاربر، برخی پلاتفرمها دسترسی نامحدود به سیستمعامل را فراهم میکنند. فقط سعی کنید با HTML5 تشخیص دهید چقدر باتری باقی مانده است!
البته این موضوع فراتر از تجربه درونبرنامه است. سیستمعاملی مانند Android روشهای مختلفی را برای تعامل برنامهها با کاربران و درواقع با برنامههای دیگر ارائه میدهد. ابزارههای فعالی در صفحه اصلی دارید. اعلانهایی دارید که در نوار وضعیت دستگاه نشان داده میشود. و شما هدفهایی دارید که به برنامهتان اجازه میدهد خود را بهعنوان ارائهدهنده سرویسی عمومی که ممکن است برنامههای دیگر گاهی به آن نیاز داشته باشند معرفی کند.
دیدگاه مخالف: ویژگیهای بومی را میتوان تقویت کرد و وب در هر صورت درحال رسیدن به آن است
درست است که بسیاری از ویژگیهای درونبرنامه بهسادگی برای برنامه HTML5 غیرقابلدسترس هستند. مهم نیست که مهارتهای وبفو شما چقدر داغ است، اگر برنامه شما در یک جعبه شنی بدون API دوربین گیر کرده باشد، به این زودیها عکس نمیگیرد! خوشبختانه، لازم نیست در آن جعبه شنی باشید. اگر واقعاً نیاز دارید برنامه وب شما عکس بگیرد، میتوانید برنامه به زبان اصلی دستگاه ایجاد کنید، برنامهای با نمای وب جاسازیشده که بخش عمدهای از میانای کاربر را ارائه میدهد. چارچوب متنباز PhoneGap اینگونه عمل میکند: این چارچوب با نمایش ویژگیهای بومی بهعنوان سرویسهای وب، که نمای وب بااستفاده از میانای برنامهسازی کاربردی شبکهسازی استاندارد آنها را فراخوانی میکند، این شکاف را پر میکند. وقتی برنامه ترکیبی مثل این میسازید، میتوانید به ویژگیهای آن پلاتفرم مثل ابزارهها، اعلانها، و هدفها نیز متصل شوید.
ساختن برنامه ترکیبی - بومی بهعلاوه وب - بهندرت راهحل ایدهآلی است. این کار پیچیدگی را افزایش میدهد و فقط برای برنامههای وب که بهعنوان برنامههای بومی بستهبندی شدهاند اعمال میشود، نه وبسایتهای سنتی که ازطریق مرورگر تلفن همراه قابل دسترسی هستند. اما ممکن است برای مدت طولانی لازم نباشد. استانداردهای وب بهسرعت درحال تکامل هستند و مرورگرهای تلفن همراه مدرن همگام با آنها پیش میروند. برای مثال، فضای ذخیرهسازی آفلاین، موقعیت جغرافیایی، گرافیک بوم، و بازپخش ویدیو/صدا همگی از پشتیبانی گستردهای در میان تلفنهای هوشمند مدرن برخوردارند. حتی دوربین هم درحال پشتیبانی شدن است - از Android 3.1، امکان گرفتن عکس و ویدیو بااستفاده از استانداردهای وب وجود دارد. و جدیدترین مرورگر iOS از WebSocket برای جاریسازی دوطرفه و همچنین تشخیص جهت دستگاه پشتیبانی میکند.
بهطور کلی، تلفن همراه درحال تکامل است. اما وب نیز درحال تکامل است، و آن هم بهسرعت. فقط در میان مرورگرهای رایانهای، پنج فروشنده اصلی مرورگر وجود دارند که استانداردها را توسعه میدهند و با سرعت برق ویژگیهای جدید اضافه میکنند. اگرچه انتقال این ویژگیها به تلفن همراه فرایند سادهای نیست، اما بسیاری از آنها قبلاً به مرورگرهای تلفن همراه راه یافتهاند.
برنامههای بومی بهسرعت درحال پیشرفت هستند، اما وب درحال کم کردن این فاصله است.
عملکرد
نکته: Native سریعتر اجرا میشود
برنامههای بومی با مانع زمان اجرای وب مواجه نیستند. این مدلها نزدیک به سختافزار اجرا میشوند و میتوانند از تقویتکنندههای عملکرد مانند شتاب GPU و چندرشتهای بهره ببرند.
دیدگاه مخالف: زمانهای اجرای وب امروزه بسیار سریعتر هستند و اکثر برنامهها به این سرعت نیاز ندارند
اگر بگوییم وب در سالهای اخیر سریعتر شده است، حق مطلب را ادا نکردهایم. V8، موتور جاوا اسکریپت که با Chrome عرضه میشود، هنگام راهاندازی، پیشرفت بزرگی در عملکرد وب بود و از آن زمان تاکنون فقط سریعتر شده است:
موتورهای پردازش گرافیکی نیز سرعت وب را افزایش دادهاند و اکنون شتاب سختافزاری درحال وقوع است. به سرعتگیر ارائهشده توسط بوم شتابیافته سختافزاری نگاهی بیندازید:
علاوهبراین، Web Workers API جدید امکان چندرشتهای را فراهم میکند و توسعهدهندگان وب مدرن نیز میتوانند از طیف وسیعی از کتابخانههای بهینهسازیشده برای عملکرد و تکنیکهای بهینهسازی عملکرد که بهخوبی تحقیق شدهاند استفاده کنند. درحالیکه اکثر آنها در وب رایانه شروع به کار کردند، هنوز هم برای تلفن همراه مناسب هستند و توجه بیشتری به تلفن همراه میشود، برای مثال، استیو سودرز، متخصص عملکرد، صفحهای را به ابزارهای عملکرد تلفن همراه اختصاص داده است.
هنوز همه پیشرفتهای رایانه به همه پلاتفرمهای تلفن همراه راه نیافتهاند، اما روندها نشان میدهند که در راه هستند. همچنین مهم است توجه داشته باشید که اکثر برنامههای تلفن همراه بازیهای سهبعدی پیشرفته نیستند، بلکه اساساً مبتنی بر اطلاعات هستند: اخبار، ایمیل، جدول زمانی، شبکههای اجتماعی، و غیره. از چند سایت از تلفن همراه خود بازدید کنید، مثلاً GMail، Amazon، Twitter، و میتوانید تأیید کنید که عملکرد وب تلفن همراه بیش از حد کافی است. As for games, basic ones are already feasible with 2D canvas, and WebGL is starting to appear on mobiles - see Firefox 4. تا زمانی که این فناوری فراگیر شود، خانوادهای از چارچوبها درحال رشد هستند که برنامههای WebGL را به برنامههای بومی که میتوانند از OpenGL بهره ببرند، کامپایل میکنند، مانند ImpactJS.
تجربه توسعهدهنده
نکته: توسعه برنامه بومی آسانتر است
برنامههای بومی از زبانهای برنامهنویسی قدرتمند (مانند Java، Objective C، C++) استفاده میکنند که برای توسعه برنامههای پیچیده طراحی شدهاند و سابقه اثباتشدهای دارند. میاناهای برنامهسازی کاربردی از ابتدا برای پشتیبانی از پلاتفرم موجود طراحی شدهاند. میتوانید بهراحتی برنامهها را در شبیهسازهای رایانه اشکالزدایی کنید که نمایش دقیقی از دستگاه هدف ارائه میدهند.
آنچه توسعه وب را بهطور خاص مشکلساز میکند، تنوع بسیار زیاد مرورگرها و زمانهای اجرا است. وقتی برنامهتان اجرا میشود، تضمینی نیست که ویژگی X دردسترس باشد. و حتی اگر اینطور باشد، مرورگر چگونه آن را پیادهسازی خواهد کرد؟ استانداردها قابل تفسیر هستند.
دیدگاه مخالف: توسعه وب اغلب آسانتر است، بهویژه اگر چندین دستگاه هدف باشد
بیایید ابتدا به فناوری اصلی بپردازیم. درست است که استانداردهای وب در اصل در دورهای شکل گرفتند که وب اساساً درباره اسناد بود، نه برنامهها، و جاوا اسکریپت تنها در ۱۰ روز ساخته و مستقر شد! اما مشخص شد که بسیار توانمندتر از آنچه تصور میشد هستند - توسعهدهندگان وب یاد گرفتهاند که از بخشهای خوب استفاده کنند و بخشهای بد را مهار کنند، با الگوهایی که اکنون برای طراحی مقیاسپذیر درک شدهاند. علاوهبراین، استانداردها ثابت نیستند و تلاشهایی مانند HTML5، CSS3، و EcmaScript Harmony همگی درحال بهبود تجربه توسعهدهنده هستند. اینکه C++ یا Java یا JavaScript را ترجیح میدهید، موضوعی برای بحثهای مذهبی است و همچنین به پایگاه کد قدیمی شما بستگی دارد. اما قطعاً میتوانیم جاوا اسکریپت را بهعنوان یک رقیب جدی در این روزها درنظر بگیریم.
The flipside to browser/runtime fragmentation is the fact that all these environments exist in the first place. برنامه Android را در Java توسعه دهید و برای پشتیبانی از iOS با انتقال کامل به Objective C مواجه شوید. یک برنامه وب را یکبار توسعه دهید و در Android و iOS اجرا خواهد شد، ناگفته نماند که در WebOS، BlackBerry، Windows Mobile و… خب، بههرحال این یک نظریه است. در عمل، اگر واقعاً میخواهید تجربه درستی داشته باشید، باید چیزهایی را برای هر پلاتفرم تغییر دهید. اما برای اکثر سیستمعاملهای تلفن همراه، باید این کار را در نسخه بومی نیز انجام دهید - نسخههای مختلف و دستگاههای مختلفی وجود دارد.
خبر خوب این است که «تکهتکهسازی» همیشه در وب به این صورت بوده است و تکنیکهای شناختهشدهای برای مقابله با آن وجود دارد. مهمتر از همه، اصل ارتقای پیشرو توسعهدهندگان را ترغیب میکند که ابتدا یک دستگاه پایه را هدف قرار دهند و سپس لایههایی از ویژگیهای عالی مختص پلاتفرم را در جایی که دردسترس است اضافه کنند. شعار تشخیص ویژگی نیز کمک میکند و این روزها، ما پشتیبانی کتابخانهای از مواردی مانند Modernizr برای پشتیبانی از طراحی وب واکنشگرا داریم. با استفاده عاقلانه از این تکنیکها، میتوانید دسترسی خود را به اکثریت قریب به اتفاق دستگاهها، حتی «تلفنهای همراه نیمههوشمند» قدیمی، حتی فرم فاکتورهایی مانند ساعت و تلویزیون، صرفنظر از ساخت و سیستمعامل، گسترش دهید. نمایش چندرابط کاربری ما را در Google IO 2011 ببینید، که در آن فاکتورهای فرم متمایز (تلفن همراه نیمه هوشمند، تلفن هوشمند، رایانه لوحی، رایانه، تلویزیون) را با یک پایگاه کد مشترک از منطق و نشانهگذاری هدف قرار دادیم.
شکل ظاهری و رابط کاربری
نکته: آگهی بومی با ظاهر و حس پلاتفرم مطابقت دارد
یکی از ویژگیهای تعیینکننده هر پلاتفرم، ظاهر و حس آن است. کاربران انتظار دارند که کنترلها بهطور هماهنگ ارائه شوند و به همان روش دستکاری شوند. برخی اصطلاحات خاص وجود دارد که از پلاتفرمی به پلاتفرم دیگر متفاوت است، مثلاً وقتی کاربر «لمس طولانی» انجام میدهد (عنصری را برای چند ثانیه لمس میکند) چه اتفاقی میافتد؟ پلاتفرمها اصطلاحات استانداردی برای چنین چیزهایی دارند و شما نمیتوانید همه آنها را با یک برنامه HTML5 برآورده کنید.
علاوهبراین، ظاهر و عملکرد پلاتفرم توسط کتابخانه نرمافزار بومی پلاتفرم سازماندهی میشود که ابزارهایش نوع ظاهر و عملکردی را که کاربران انتظار دارند دربرمیگیرد. فقط بااستفاده از جعبهابزار بومی، بسیاری از ظاهر و احساس موردانتظار را «بهطور رایگان» دریافت میکنید.
دیدگاه مخالف: وب ظاهر و حس خاص خودش را دارد و همچنین میتوانید میانای وب را برای پلاتفرمهایی که بیشتر برایتان اهمیت دارد سفارشیسازی کنید
همانطور که در بخش قبلی توضیح داده شد، روش توسعه وب نوشتن یک نسخه پایه «یک اندازه برای همه» و سپس ارتقای پیشرو آن است. درحالیکه بهبود معمولاً براساس ویژگیها است، میتوانید آن را با هدفیابی پلاتفرمهایی که بیشتر برایتان اهمیت دارد نیز بهبود دهید. این نوعی «تشخیص مرورگر» است، که گاهیاوقات انجمن وب با آن مخالف است، بیشتر به این دلیل که مرورگرهای احتمالی بسیار زیادی وجود دارد. اما اگر دو یا سه پلاتفرم را با اولویت بسیار بالا درنظر دارید و مایلید تلاش بیشتری برای رقابت با جایگزینهای بومی انجام دهید، این میتواند راه مناسبی باشد.
تا جایی که به نسخه پایه مربوط میشود، وب ظاهر و حس خاص خود را دارد و حتی میتوانیم بگوییم هر پلاتفرم تلفن همراه «ظاهر و حس وب» خاص خود را دارد که توسط مرورگر پیشفرض و زمان اجرای وب ایجاد شده است. «ظاهر و حس وب» ممکن است برای کاربران شما مناسب باشد و درواقع به شما امکان میدهد به درجه بالاتری از سازگاری با تجربه مرور رایانهای و همچنین دستگاههای دیگری که کاربر ممکن است با آنها کار کند دست یابید. علاوهبراین، برنامههای موفق زیادی وجود دارد که بههرحال از ظاهر و حس بومی پشتیبانی نمیکنند. این موضوع قطعاً درباره بازیها صدق میکند (آیا بازی تلفن همراه موردعلاقهتان از ظاهر و حس سیستمعامل تلفن همراهتان پیروی میکند؟) و حتی درباره برنامههای مرسومتر نیز صادق است، مثلاً کلاینتهای بومی محبوبتر Twitter را در پلاتفرم انتخابیتان بررسی کنید و طیف گستردهای از سازوکارهای میانای کاربر را درحال کار خواهید دید.
یافتپذیری
نکته: برنامههای بومی راحتتر پیدا میشوند
سازوکارهای توزیع برنامه، مانند Android Market و Apple App Store، در سالهای اخیر بسیار محبوب بودهاند و نیروی محرکه اصلی برای کل صنعت تلفن همراه هستند. هر توسعهدهندهای میتواند برنامه به زبان اصلی دستگاه خود را به بازار ارسال کند، جایی که کاربران میتوانند آن را ازطریق ترکیبی از مرور، جستجو، و دریافت توصیهها کشف کنند. نه تنها این، بلکه اگر کارتان را درست انجام داده باشید، ردهبندیها و نظرات درخشان کاربران را متقاعد خواهد کرد که روی دکمه بسیار مهم نصب کلیک کنند.
دیدگاه مخالف: درواقع، برنامههای وب راحتتر پیدا میشوند
وب احتمالاً قابلکشفترین رسانهای است که تاکنون ایجاد شده است. در نشانی وب ساده، ما (حداقل در تئوری) یک شناسه منحصربهفرد برای هر چیزی که تاکنون در وب منتشر شده است داریم، که شامل هر برنامهای که در وبسایتهای استاندارد منتشر شده است میشود. موتورهای جستجو کاوش آن محتوا را آسان میکنند و وبسایتهای دیگر میتوانند به آن پیوند دهند، ازجمله کاتالوگهای برنامههای وب مشابه بازارهای تلفن همراه. درواقع، هر فردی میتواند برنامههای وب را فقط با پیوند دادن به آن در ایمیلها و پیامهای شبکههای اجتماعی با دوستانش همرسانی کند. پیوندها را میتوان ازطریق پیامک نیز ارسال کرد، که در آن کاربران تلفن همراه میتوانند روی پیوند کلیک کنند و برنامه را در مرورگر دستگاه خود راهاندازی کنند.
هنوز بازارهای مشابهی نداریم که کاربران بتوانند در آنها به برنامهها امتیاز دهند و نظرشان را درباره آنها بنویسند، اما این موضوع نیز درحال تغییر است. ادامه مطلب…
درآمدزایی
نکته: از آگهی بومی میتوان درآمدزایی کرد
«کودک ۶ ساله در ساعت ناهار برنامه میسازد، میلیونها نسخه از آن را به قیمت ۳ دلار میفروشد». این روزها این عنوان را زیاد میبینید، بنابراین جای تعجب نیست که توسعهدهندگان بزرگ و کوچک برای درآمدزایی به بازارهای تلفن همراه روی میآورند. پلاتفرمهای تلفن همراه چندین راه برای توسعهدهندگان ارائه میدهند تا مستقیماً برای برنامههایشان هزینه دریافت کنند. سادهترین روش پرداخت یکباره است که قفل برنامه را برای همیشه باز میکند. در برخی پلاتفرمها، سازوکارهای پرداخت درونبرنامه و اشتراک نیز ارائه میشود و این سازوکارها بهطور منسجم و ایمن با هم ادغام شدهاند. این روشهای پرداخت جدیدتر به توسعهدهندگان امکان میدهد برنامه بسیار موفق را به جریان درآمد بلندمدت تبدیل کنند.
علاوهبر پرداختهای درونبرنامه، میتوانید با مدلهای سنتی وب، مثل تبلیغات و حمایت مالی، درآمدزایی کنید.
دیدگاه مخالف: همیشه امکان درآمدزایی در وب وجود داشته است و فرصتها درحال افزایش است
اگر فرصتهای زیادی برای کسب درآمد وجود نداشت، وب نمیتوانست موتور صنعت مدرن باشد. اگرچه سازوکارهای مستقیم «پرداخت بهازای استفاده» هنوز شکوفا نشدهاند، اما حوزههای تخصصی مختلفی وجود دارد که در آنها راهحلهای «نرمافزار بهعنوان سرویس» مبتنی بر اشتراک واقعاً قابلاجرا شدهاند. نمونهها شامل Google Apps، طیف محصولات 37Signals، و نسخههای پولی سرویسهای ایمیل مختلف است. علاوهبراین، پرداختهای مستقیم تنها راه کسب سود از برنامههای وب نیست. تبلیغات آنلاین، پیوندهای فروشیاری، حمایتهای مالی، ترویج بینکانالی برای محصولات و خدمات دیگر وجود دارد.
بااینحال، کاملاً منطقی است که یک توسعهدهنده وب با خواندن این عناوین کمی حسادت کند. نمیتوانید نشانی وب را به بازارهای بومی ارسال کنید، پس توسعهدهنده وب باید چه کار کند؟ کاری که انجام میدهید این است که یک «برنامه پوششی» بومی ایجاد میکنید - برای هر پلاتفرمی که میخواهید هدف قرار دهید، یک برنامه بومی خالی ایجاد کنید که بهسادگی حاوی یک نمای وب باشد. نمای وب جایی است که برنامه واقعی را در آن جاسازی میکنید. سپس این برنامهها را به بازارهای مختلف ارسال میکنید (و امیدوارید که پول به حسابتان سرازیر شود!). امروزه احتمالاً صدها، اگر نگوییم هزاران، برنامه تحت وب در بازارهای اصلی وجود دارد که برخیاز آنها بهقدری ماهرانه ادغام شدهاند که حتی نمیدانیم برنامه وب هستند.
نکته منفی این است که مسئولیت کامپایل متقابل برای هر پلاتفرم برعهده شما است. در اینجا چارچوب موجودی مانند PhoneGap میتواند کمک کند. حتی بهتر از آن، سرویسهای وبی مانند PhoneGap Build و Apparatio درحال توسعه هستند. این وبسایتها را به مخزن کد خود ارجاع دهید تا برنامه Android، برنامه iOS، و غیره ظاهر شود… و آماده ارسال به فروشگاههای مربوطه باشد. بدون نصب کیتهای توسعه نرمافزار بومی در دستگاهتان؛ تنها چیزی که برای ساختن همه این برنامههای بومی نیاز داشتید یک ویرایشگر کد و یک مرورگر وب بود.
آیا بازارها هرگز مستقیماً از برنامههای وب پشتیبانی خواهند کرد، بدون اینکه سربار بستهبندی آنها بهصورت بومی وجود داشته باشد؟ هنوز مشخص نیست. میدانیم که Google سال گذشته نتبازار Chrome را معرفی کرد و اگرچه فقط برای رایانه اعمال میشود، این فروشگاه توجه سایر فروشندگان مرورگر را جلب کرده است و بهطور کلی بخشی از روند کاتالوگهای برنامه وب است، ازجمله برخی تلاشهای خاص تلفن همراه. مفهوم فروشگاه وب هنوز در ابتدای راه است، اما نشانهها نویدبخش هستند.
نتیجهگیریها
خوب بود اگر میتوانستیم برندهای را در اینجا اعلام کنیم، اما درحالحاضر، برنده مشخصی وجود ندارد. برخیاز برنامهها برای پلاتفرم بومی مناسبترند و برخی دیگر برای وب. پشته وب احتمالاً شتاب بیشتری دارد، اما ازنظر قابلیتها و کیفیتهای اجرا، برنامههای بومی نیز بهسرعت درحال حرکت هستند. و تا زمانی که فناوریهای وب در اکثر سیستمعاملهای تلفن همراه به شهروند درجه یک تبدیل نشوند، بومی همیشه یک ملاحظه مهم خواهد بود.
یکیاز تکنیکهای ذکرشده در این مقاله برنامههای ترکیبی است و این ممکن است بهترین راهحل برای برخیاز توسعهدهندگان باشد: نمای وب در جایی که امکانپذیر است و مؤلفههای بومی خاص پلاتفرم در جایی که امکانپذیر نیست.
اگر مسیر وب را انتخاب میکنید، به استانداردهای وب و اصل ارتقای پیشرو توجه داشته باشید. وب فناوریای است که میداند چگونه انبوهی از دستگاهها و سیستمعاملهای موجود را هدف قرار دهد. چه آن را «تکهتکهسازی» بنامید چه «تنوع»، وب از آن استقبال میکند و شما توسعهدهندگان میتوانید از همه دانش قبلی موجود در آن بهرهمند شوید.