Tổng quan về lập trình ứng dụng di động – Phần 2

bài viết trước, mình đã giới thiệu tổng quát về các hệ điều hành di động nổi tiếng hiện nay. Trong bài viết này, mình sẽ đưa ra một số hướng phát triển ứng dụng, cùng với những ưu nhược điểm của nó.

Hiện nay, có 3 hướng chính để phát triển một ứng dụng di động, đó là: Web App, Native App và Hybrid App. Mỗi hướng sẽ cần những kĩ năng riêng, có những ưu nhược điểm riêng, sẽ được nói rõ hơn bên dưới.

appsillustrated_nativewebhybrid

Web App

Hướng Mobile Web thường được áp dụng khi các bạn đã có sẵn một website đang hoạt động. Ta sẽ tạo thêm 1 trang web riêng cho mobile, sử dụng HTML, CSS, một số framework hỗ trợ mobile và responsive (Bootstrap, jQuery Mobile, Materialize). Người dùng sẽ trang web dành cho mobile để dùng ứng dụng.

Các xử lý khác liên quan đến backend như database sẽ được thực hiện phía trên server. Với một số công nghệ như AngularJS, một trang web có thể giống y hệt một ứng dụng di động thật sự. Mình có viết 1 game đơn giản trên nền web, bạn hãy thử vào bằng di động, nó cũng khá giống 1 ứng dụng thật sự: http://hoangphpetprojects.github.io/LadyboyChallenge/

Ưu điểm

  • Chỉ cần có kiến thức về web là viết được
  • Viết một lần, chạy được trên mọi hệ điều hành
  • Người dùng không cần phải cài app, có thể vào thẳng trang web
  • Không cần phải thông qua App Store, tiết kiệm tiền
  • Dễ nâng cấp (Chỉ việc nâng cấp web là xong)

Nhược điểm

  • Với một số máy đời cũ, Web App sẽ bị bể giao diện, hiển thị sai, hoặc javascript không chạy.
  • Performance chậm
  • Không thể tận dụng được các tính năng của di động: Push notification, chụp hình, nghiêng máy, định vị GPS…

Kĩ năng cần có

  • Kiến thức HTML, CSS, Javascript cơ bản.
  • Kiến thức về một số framework responsive/mobile như: jQuery Mobile, Bootstrap, …
  • Một số framework javascript để viết Single Page Application: AngularJS, EmberJS, …

mobile

Native App

Viết Native App nghĩa là lập trình viên sẽ sử dụng IDE, SDK mà nhà sản xuất cung cấp để lập trình ra một ứng dụng, build ứng dụng đó thành file cài và gửi lên App Store để kiểm duyệt. Người dùng sẽ phải tìm ứng dụng trên App Store, tải về máy và chạy.

Đây là hướng phát triển được áp dụng nhiều nhất, điển hình là game Flappy Bird của Nguyễn Hà Đông. Với những ứng dụng game, xử lý ảnh, cần tính toán nhiều, Native App là lựa chọn duy nhất.

Với những hệ thống lớn, cần đồng bộ, ta vẫn phải viết phần back-end trên server. Server sẽ đưa ra một số API. Native app lấy dữ liệu về máy, truyền dữ liệu lên server thông qua các API này.

Ưu điểm

  • Tận dụng được toàn bộ những tính năng của device: Chụp ảnh, nghiêng máy, rung, GPS, notification.
  • Có thể chạy được offline.
  • Performance rất nhanh, vì code native sẽ được chạy trực tiếp.
  • Là lựa chọn duy nhất cho các ứng dụng game, xử lý hình ảnh hay video …

Khuyết điểm

  • Cần cài đặt nặng nề (Eclipse, XCode, Android SDK, …), khó tiếp cận.
  • Với mỗi hệ điều hành, ta phải viết một ứng dụng riêng. Khó đảm bảo sự đồng bộ giữa các ứng dụng (1 button trên Android sẽ khác 1 button trên iOS, pop cũng khác).
  • Cần phải submit app lên App Store, mỗi lần update phải thông báo người dùng.
  • Code mệt và lâu hơn so với Mobile Web.

Kĩ năng cần có

  • Ngôn ngữ lập trình: Java cho Android, Objective-C hoặc Swift cho iOS, C# cho Windows Phone.
  • Kiến thức chuyên sâu về ứng dụng: View, Action, Adapter trong Android …
  • Cách xây dựng Web Serivce, Restful API, cách gọi API từ device, …

native_apps_vs_web_apps

Hybrid App

Hybrid App kết hợp những ưu điểm của Mobile Web và Native App. Ta xây dựng một ứng dụng bằng HTML, CSS, Javascript, chạy trên WebView của mobile. Tuy nhiên, Hybrid App vẫn có thể tận dụng những tính năng của device: chụp hình, GPS, rung, ….

Hybrid App sẽ được viết dựa trên một cross-platform framework: Cordova, Phonegap, Titanium, …. Ta sẽ gọi những chức năng của mobile thông qua API mà framework này cung cấp, dưới dạng Javascript. Bạn chỉ cần viết một lần, những framework này sẽ tự động dịch ứng dụng này ra các file cài đặt cho Android, iOS và Windows Phone.

Một số ứng dụng không quá nặng về xử lý, cần tận dụng chức năng của device sẽ chọn hướng phát triển này. Đây là một game dạng hybrid app mình viết bằng ionicPlatform, các bạn dùng Android có thể cài vào chơi thử nhé: https://dl.dropboxusercontent.com/u/46157401/ladyboy-debug.apk

Ưu điểm

  • Chỉ cần biết HTML, CSS, JS (Thế nên mình mới khuyên các bạn nên học Javascript).
  • Viết một lần, chạy được trên nhiều hệ điều hành
  • Tận dụng được các chức năng của device.

Khuyết điểm

  • Không ổn định, khó debug. Framework sẽ dịch code của bạn thành code native, việc sửa lỗi ứng dụng khá khó vì bạn không biết code sẽ được dịch ra như thế nào.
  • Performance chậm.
  • Cần cài đặt nhiều thứ (Titanium, Cordova đều bắt phải cài đặt SDK này nọ thì mới build ứng dụng được).

Kiến thức cần biết

  • HTML, CSS, Javscript cơ bản.
  • Cách dùng một số framework CSS, Javascript: jQuery Mobile, Ionic Framework, AngularJS, Bootstrap, …
  • Kiến thức về các cross-platform framework: Titanium, Cordova, Phonegap.
  • Cách xây dựng Web Serivce, Restful API, cách gọi API từ device, … (Hybrid app cũng sẽ kết nối với server thông qua API như Native App).

Monday_08-04-2013_Benefits-of-Hybrid-Mobile-App-Development

Sau 2 phần của bài viết, mình đã giúp các bạn đã có cái nhìn tổng quát về thị trường di động. Hi vọng các bạn có thể chọn được con đường mình muốn đi, cũng như biết được mình cần phải học gì. Các bạn có thể đóng góp hay đưa ý kiến cho bài viết bằng cách comment nhé.

22 thoughts on “Tổng quan về lập trình ứng dụng di động – Phần 2”

      1. hieuvecto : ý của bạn Huy Hoàng là những Apps mà tương tác với phần cứng của thiết bị đòi hỏi cao thì Hybrid tắt điện so vs Native nhiều! Mấy Apps To Do List các kiểu thì đâu cần tương tác phần cứng nhiều, nhưng Game thì tương tác rất nhiều nhưng motor rung, camera, gia tốc…Mình nói vậy đúng không Hoàng 😀

        Like

      2. Mấy app như Uber, Instagram, Twitter, … hầu như load dữ liệu từ Web Service là chính, mọi xử lý đều thực hiện trên server, do đó sử dụng Hybrid là lựa chọn đúng và phù hợp :D.

        Chỉ có những app như game, xử lý ảnh v..v cần áp dụng hiệu năng của máy nhiều thì mới dùng Native thôi. Hiện nay nhiều công ty tuyển dev Native trong khi Hybrid cũng làm được điều họ muốn rồi.

        Like

  1. Mình thấy mấy cái app ebanking ở VN cũng viết bằng hybrid app (ACB, DAB …). Mấy app dạng đó mà viết = native thì tốn quá nhiều chi phí.

    Like

  2. Bài viết của bạn Hoàng mở mang cho mình nhiều điều quá. Cảm ơn bạn nhé!

    Like

  3. Đọc bài viết của anh mà trong lòng lại có thêm động lực tìm hiểu sâu hơn về Android và biết mình cần phải học thêm nhiều thứ nữa. Cảm ơn anh nhiều ạ

    Like

    1. Thường thường người ta chọn theo trình độ của team, yêu cầu của ứng dụng, thời gian hoàn thành, viết cho hdh nào v…v chứ ko có lựa chọn cụ thể bạn nhé 😉

      Liked by 1 person

      1. Cảm ơn câu trả lời của bạn. Còn nếu bắt đầu bước chân vào lập trình mobile thì bạn khuyên nên đi theo hướng nào?

        Like

      2. Dựa vào kiến thức hiện tại bạn đã biết Java, objective-C chưa, hay chỉ mới biết html css, dựa vào app bạn muốn viết phức tạp hay đơn giản, có cần trên nhiều hdh ko nữa nhé 😀

        Liked by 1 person

      3. hiện tại mới chỉ biết html, css, js. Vậy hướng tiếp cận Hybrid là phù hợp phải không bạn? cảm ơn bạn

        Like

  4. Anh ơi cho em hỏi, em hiện đang muốn tìm hiểu về lập trình di động trên nền tảng iOS và viết một ứng dụng nhỏ giống Lazada, thì em phải dùng gì ạ? Hiện em rất mơ hồ, mong anh hướng dẫn giúp em ạ. Em xin cảm ơn.

    Like

  5. Anh ơi cho em hỏi, em hiện đang muốn tìm hiểu về lập trình di động trên nền tảng iOS và viết một ứng dụng bán hàng nhỏ giống Lazada, thì em phải dùng gì ạ? Hiện em rất mơ hồ, mong anh hướng dẫn giúp em ạ. Em xin cảm ơn.

    Like

  6. Cảm ơn anh Hoàng rất nhiều. Em là recruiter, đọc xong đã hiểu ra nhiều chỗ lắm rồi nè. Anh Hoàng dành thời gian chia sẻ thêm nữa nha anh

    Like

Leave a comment