Chia sẻ về các công nghệ phát triển application trên mobile.
Chào mọi người, Về xu thế và tiềm năng của mobile hiện nay thì chắc không cần phải bàn nhiều. Khi nói đến các thiết bị mobile thì đó không chỉ là điện thoại, máy tính bảng mà còn là các thiết bị đeo được trên cơ thể, nhỏ gọn dễ mang lại - wearable devices - ...
Chào mọi người, Về xu thế và tiềm năng của mobile hiện nay thì chắc không cần phải bàn nhiều. Khi nói đến các thiết bị mobile thì đó không chỉ là điện thoại, máy tính bảng mà còn là các thiết bị đeo được trên cơ thể, nhỏ gọn dễ mang lại - wearable devices - như Smartwatch, Smartglasses.. Bài viết này nhằm mục đích chia sẻ hiểu biết cơ bản về các xu thế, các lựa chọn khi phát triển 1 application trên mobile và các vấn đề xung quanh nó. Sẽ không bàn về option nào là tốt, xu thế nào sẽ được phát triển hơn. Chúng bao gồm:
- Native apps
- Hybrid apps
- Web mobile apps
Một điều khá là may mắn là: Mình đều được làm với cả 3 xu thế này khi làm việc trong các dự án trước đây: hoặc tham gia vào làm trực tiếp hoặc là quản lý các team sử dụng 3 công nghệ khác nhau này.
1 . Native app
Native app: đơn giản chính là sử dụng ngôn ngữ lập trình tự nhiên ( native programing language ) của devices ( hệ điều hành ) để phát triển ứng dụng. Như Java trên Android, Objective-C trên iOS, và C# trên Window phone, tương ứng với các ngôn ngữ là các SDK của từng nền tảng( hệ điều hành ). Phần lớn các ứng dụng hiện nay đều được phát triển là native app.
Ưu điểm:
- Được hỗ trợ nhiều từ các SDK của các hệ điều hành cũng như các thư viện tiện ích của các bên thứ 3
- Có thể thao tác, điều khiển trực tiếp đến các thành phần, dịch vụ và ứng dụng bên dưới của hệ điều hành và thiết bị như camera, location, keyboard, notification... Đặc biệt là với iOS dễ dàng thao tác và tích hợp với các app tiện ích của apple như iCalendar, iMessage.. vì vậy tốc độ sẽ nhanh hơn
Nhược điểm:
- Với các ứng dụng yêu cầu hỗ trợ nhiều nền tảng thì cần hỗ trợ bao nhiêu nền tảng thì cần phải bấy nhiêu team phát triển: Android team, iOS team, Window phone team..
- Phải tuân theo các quy tắc review của appstore, và có độ trễ khi chờ review. Mỗi lần nâng cấp version đều cần được review và đợi.
Có 1 câu hỏi là: amazon hay firefox cũng có hệ điều hành riêng. Nếu những hệ điều hành này cũng có thị phần riêng và phát triển được. Khi đó khách hàng yêu cầu ứng dụng của họ đều hỗ trợ được cho tất các các người dùng của các hệ điều hành khác nhau thì chúng ta phải có tương ứng bằng đấy team developer?
Hơi liên quan 1 chút đến design UI: 1 app chạy trên hệ điều hành khác nhau thường cần phải có design style riêng theo hệ điều hành mà app đó chạy. Một số khách hàng là fan của apple hoặc Android thường thì họ sẽ muốn clone theo một OS.
Nên suggess khách hàng giữ nguyên style của từng hệ điều hành riêng biệt, như thế sẽ tiết kiệm thời gian phát triển đồng thời nó còn giữ nguyên được bản chất của từng OS.
Khi phát triển native app thì cần phải lưu ý đến các điều kiện review của các store ( apple store, google play ) tương ứng. App của bạn chỉ có thể đưa lên store nếu review pass. Sau khi hì hụi phát triển 1 tính năng mà bạn nghĩ là hay ho rồi đẩy lên review, nhưng vào 1 ngày đẹp trời bạn nhận được 1 email của apple báo rằng tính năng hay đoạn code đó của bạn không phù hợp với điều kiện review. Team mình trước đây thì đã từng dính 1 vụ tương tự: khi đó khách hàng có yêu cầu làm 1 flow thanh toán ngay trên app --> team làm xong đẩy lên review --> cuối cùng chấp nhận remove bỏ đi vì không để ý cẩn thận điều kiện review --> cả team mình và khách hàng mất đâu đó hơn 1 tuần vô ích.
Ngoài ra với các doanh nghiệp lớn: họ có thể mua các license enterprise của apple và google để public app cho hệ thống của riêng họ. Hoặc là tự xây dựng 1 store của riêng mình.
2 . Hybrid apps
Tư tưởng của xu thế này là: one code build for cross platforms. Các ứng dụng tạo bằng hybrid về mặt người dùng vẫn như native app thông thường, và muốn public vẫn cần được đẩy lên store để review.
Bên trong xu thế Hybrid có 2 xu thế nổi bật:
-Op1 là sử dụng HTML, CSS, Javascript để phát triển app rồi sau đó sử dụng 1 native container ( native wrapper ) đóng gói lại thành application tương ứng cho từng platform. Ví dụ cho xu thế này là SenchaTouch hoặc jquery mobile rồi sử dung PhoneGap để đóng gói lại. PhoneGap trước đây là 1 nhóm phát triển riêng và sau này đã được Adobe mua lại.
Chia sẻ nhỏ là: trước đây team mình đã từng sử dụng SenchaTouch và PhoneGap để phát triển ứng dụng ERP cho khách hàng hơn 1 năm trên iOS và Android, ngoài ra có bản web version riêng nữa. , sau đó phải họp toàn bộ team bạn và team mình quyết định xem có tiếp tục sử dụng SenchaTouch hay là thay thế bằng native app. Cuối cùng là quyết định chuyển qua native app vì thời điểm đó Hybrid chưa phát triển mạnh và hoàn thiện như bây giờ. Khi đó nó ko thể đáp ứng được cho các yêu cầu phức tạp của ứng dụng tầm enterprise.