Một doanh nghiệp gửi yêu cầu làm app bán hàng và nhận về ba báo giá. Bên thứ nhất ghi “native app”, bên thứ hai ghi “hybrid app”, bên thứ ba đề xuất “web app”, và ba con số chênh nhau khá xa. Muốn đọc được ba báo giá đó, trước hết cần biết native app là gì. Native app là ứng dụng được viết riêng cho một hệ điều hành di động, dùng ngôn ngữ và bộ công cụ của chính hệ điều hành đó: Swift hoặc Objective-C cho iOS, Kotlin hoặc Java cho Android. App cài từ cửa hàng ứng dụng, gọi thẳng tới máy ảnh, danh bạ, định vị, và chạy được khi mất mạng nếu được thiết kế như vậy.
Hybrid app dựng giao diện bằng công nghệ web rồi đặt vào một khung app, còn web app chạy trong trình duyệt và không cần cài. Bài này giải thích từng loại, sửa vài hiểu lầm phổ biến về chúng, đưa bảng so sánh và trả lời các câu hỏi hay gặp. Mọi chi tiết về ngôn ngữ, công cụ và quy định cửa hàng lấy từ tài liệu chính thức của Apple, Google, Microsoft và MDN, tra ngày 14/10/2026. Nếu cần hiểu app nói chung trước, xem bài app là gì và vì sao doanh nghiệp làm app riêng. Câu hỏi “doanh nghiệp mình nên làm loại nào” có một bài riêng, đường dẫn nằm ở cuối bài.
Native App là gì và được viết bằng ngôn ngữ nào
Chữ “native” nghĩa là “gốc”, tức app được viết bằng ngôn ngữ lập trình và bộ công cụ của chính hệ điều hành mà nó chạy trên. Một app native cho iPhone được biên dịch thành mã chạy trên iOS, dùng các khung giao diện của Apple, còn bản Android được viết cho Android và dùng thư viện của Google. Hai bản nhìn có thể giống nhau, nhưng bên dưới là hai mã nguồn tách biệt. Đó là đặc điểm quyết định gần hết ưu và nhược điểm nói ở các phần sau.
Nhiều tài liệu tiếng Việt vẫn ghi “Objective-C cho iOS, Java cho Android”. Hai ngôn ngữ này vẫn dùng được, nhưng cả hai nền tảng đã chuyển ưu tiên. Trang Swift của Apple Developer gọi Swift là ngôn ngữ cho mọi nền tảng của Apple, gồm iOS, iPadOS, macOS, tvOS, visionOS và watchOS, được phát triển dạng mã nguồn mở, và có thể đặt chung trong một dự án với mã Objective-C và C++. Phía Android, Google công bố tại Google I/O 2019 rằng việc phát triển Android sẽ ngày càng theo hướng Kotlin-first, và trang Android’s Kotlin-first approach khuyên app Android mới bắt đầu bằng Kotlin.

Java chưa bị bỏ. Bảng so sánh trên cùng trang Android ghi Java vẫn được hỗ trợ đầy đủ ở SDK nền tảng, Android Studio, Lint và tài liệu API. Điểm khác nằm ở các công cụ mới: Jetpack Compose, bộ giao diện khai báo hiện nay của Android, chỉ dùng được với Kotlin, và Java không có mặt trong dự án đa nền tảng. Một app Android viết bằng Java vẫn chạy và vẫn bảo trì được, còn app mới thì đi theo Kotlin.
Native app làm được gì mà loại khác khó làm
Lợi thế dễ thấy nhất của native app là quyền gọi trực tiếp các tính năng của máy. Máy ảnh, danh bạ, định vị, micro, cảm biến, Bluetooth, thông báo đẩy đều có API riêng của hệ điều hành, và app native dùng chúng ngay khi hệ điều hành mở ra, không chờ trình duyệt hỗ trợ. Một app quét mã vạch trong kho hay một app chấm công bằng định vị cho nhân viên thị trường là những trường hợp cần đúng các API này.
Chạy khi mất mạng cũng là thế mạnh của app native, vì mã và dữ liệu nằm sẵn trong máy. Đội phát triển tự chọn cách lưu dữ liệu và cách đồng bộ khi có mạng trở lại. Một nhân viên giao hàng đi qua vùng sóng yếu vẫn ghi được phiếu giao, chụp được ảnh biên nhận, rồi app tự gửi lên máy chủ khi điện thoại bắt lại sóng. Việc này phải thiết kế từ đầu.

Giao diện cũng là một điểm cộng. App native dùng sẵn nút, menu, cử chỉ vuốt và bàn phím của hệ điều hành, nên người dùng iPhone thấy app giống các app iPhone khác, người dùng Android thấy app quen tay như app Android khác. Khi Apple hoặc Google cập nhật giao diện hệ điều hành, các thành phần chuẩn trong app native thường đổi theo mà đội phát triển khỏi vẽ lại.
Công cụ làm native app hiện nay
Viết riêng hai app bằng Swift và Kotlin là cách “native thuần”. Ngoài ra còn các bộ công cụ đa nền tảng cho phép viết một mã nguồn rồi đóng gói ra cả iOS lẫn Android, và chúng không giống nhau về cách hiển thị giao diện. Tài liệu chính thức của từng bộ, tra ngày 14/10/2026, mô tả như sau:
- React Native: theo trang tài liệu của React Native, lúc chạy, framework tạo ra đúng các view Android và iOS tương ứng với từng component viết bằng JavaScript, nên các thành phần này được gọi là Native Components.
- Flutter: theo phần tổng quan kiến trúc trên docs.flutter.dev, bản phát hành được biên dịch thẳng ra mã máy ARM hoặc x64, nhưng Flutter tự vẽ toàn bộ giao diện bằng bộ widget riêng thay cho widget của hệ điều hành. Chi tiết hơn có trong bài Flutter là gì và vì sao được dùng để làm app đa nền tảng.
- Xamarin: nhiều tài liệu vẫn nhắc Xamarin như một công cụ viết app gốc bằng C#. Theo trang chính sách hỗ trợ Xamarin của Microsoft, mọi Xamarin SDK, kể cả Xamarin.Forms, đã ngừng hỗ trợ từ ngày 01/05/2024. Xamarin.Android và Xamarin.iOS nhập vào .NET thành .NET for Android và .NET for iOS, còn Xamarin.Forms chuyển thành .NET MAUI. Dự án đang chạy Xamarin cần lên kế hoạch chuyển đổi.
Ranh giới giữa “native” và “đa nền tảng” vì vậy khá mờ. App React Native hay Flutter vẫn được cài từ cửa hàng, vẫn gọi được tính năng của máy và được biên dịch hoặc ánh xạ ra thành phần gốc, nên nhiều đội gọi chúng là “cross-platform native”. Điều khác nằm ở chỗ một mã nguồn phục vụ hai nền, và khi cần một tính năng mới của hệ điều hành, đội phải chờ bộ công cụ cập nhật hoặc tự viết phần cầu nối bằng Swift và Kotlin.
Ưu điểm và nhược điểm của native app
Gộp lại từ các phần trên, native app có ba điểm mạnh rõ ràng. Thứ nhất là toàn quyền với tính năng của máy, kể cả tính năng vừa ra trong phiên bản hệ điều hành mới. Thứ hai là chủ động chạy khi mất mạng. Thứ ba là giao diện đúng thói quen của người dùng từng nền tảng. Với các app phải xử lý nặng như dựng hình, xử lý ảnh, video hay game, việc chạy trực tiếp trên hệ điều hành cũng cho đội kỹ thuật nhiều cách tối ưu hơn.
Chi phí là mặt còn lại. Hai nền tảng nghĩa là hai mã nguồn, hai đội hoặc một đội biết cả hai ngôn ngữ, hai lần kiểm thử và hai đường phát hành. Mỗi lần sửa lỗi, bản iOS và bản Android phải sửa riêng rồi gửi duyệt riêng. Ngoài công làm app còn có phí tài khoản cửa hàng: trang Apple Developer Program ghi phí thành viên 99 USD mỗi năm, còn trang hỗ trợ Google Play Console ghi phí đăng ký tài khoản nhà phát triển 25 USD, trả một lần (tra ngày 14/10/2026).
Bước duyệt của cửa hàng cũng cần tính vào lịch. Mọi app trên App Store phải qua bước xét duyệt theo App Store Review Guidelines trước khi người dùng tải được, và bản sửa gấp cũng đi qua bước này. Mục 4.2 của bộ quy định yêu cầu app có tính năng, nội dung và giao diện vượt hơn một website được đóng gói lại, còn mục 4.2.2 nói app không được chủ yếu là tài liệu tiếp thị, quảng cáo, web clipping hay tập hợp liên kết.

Bước duyệt này giúp cửa hàng lọc bớt app kém chất lượng, nhưng nó không biến app thành “được chứng nhận an toàn” như đôi khi vẫn được hiểu. Với doanh nghiệp, điều cần nhớ đơn giản hơn: app native phải có phần riêng của app, và lịch phát hành luôn cộng thêm thời gian chờ duyệt.
Hybrid app là gì và khác native app ở đâu
Hybrid app là app được cài như app thường nhưng phần lớn giao diện viết bằng HTML, CSS và JavaScript, chạy bên trong một WebView. Trang tài liệu WebView của Android mô tả WebView là thành phần hiển thị trang web như một phần giao diện của app, không có thanh địa chỉ hay nút điều hướng như trình duyệt đầy đủ. Trên iOS, thành phần tương ứng thuộc bộ WebKit của Apple, và mục 2.5.6 của App Store Review Guidelines yêu cầu app duyệt web phải dùng WebKit.
Một hiểu lầm phổ biến là hybrid app chỉ chạy khi có internet. Trang Load in-app content của Android cho thấy điều ngược lại: HTML, JavaScript và CSS có thể biên dịch sẵn vào app thay vì tải qua mạng, và nội dung đóng gói trong app không cần kết nối internet, cũng không tốn dung lượng mạng của người dùng. App hybrid mất mạng hay không là do cách đội phát triển thiết kế phần dữ liệu.

Cùng trang đó nêu cái giá đi kèm. Cập nhật phần nội dung web đã đóng gói đòi hỏi phát hành bản app mới, và người dùng chưa cập nhật app sẽ thấy nội dung lệch với website. Trang WebView còn có một cảnh báo bảo mật đáng đọc: hàm addJavascriptInterface cho phép JavaScript điều khiển app Android, nên Google khuyên chỉ dùng khi toàn bộ HTML và JavaScript trong WebView do chính đội viết, và không để người dùng đi tới trang của bên khác ngay trong WebView đó.
So với native, hybrid tiết kiệm phần giao diện vì một bộ HTML chạy được cả hai nền. Phần gọi tính năng của máy vẫn đi qua plugin hoặc cầu nối viết bằng mã gốc.
Web app khác native app ở đâu
Web app chạy trong trình duyệt. Người dùng mở một địa chỉ, đăng nhập và dùng ngay, không tải gì từ cửa hàng. Một mã nguồn chạy được trên điện thoại, máy tính bảng và máy tính, miễn là máy có trình duyệt, và mỗi lần sửa trên máy chủ là mọi người nhận bản mới khi tải lại trang. Web app dùng chung một mã nguồn chính vì nó không gắn với thiết bị nào, và đó cũng là lý do nó rẻ nhất để duy trì.
Giữa web app và native app còn có PWA, viết tắt của Progressive Web App. Theo MDN, PWA là ứng dụng xây bằng công nghệ web nhưng cho trải nghiệm giống app riêng của từng nền tảng: chạy trên nhiều thiết bị từ một mã nguồn như website, đồng thời cài được lên máy, chạy được khi mất mạng và tích hợp với thiết bị như app thường. Trên iPhone, PWA có những giới hạn riêng về cách cài và cách giữ dữ liệu offline, được phân tích kỹ trong bài web app hay app native cho phần mềm nội bộ.
Điểm yếu của web app nằm ở phần tính năng của máy. Trình duyệt chỉ mở những API đã được chuẩn hoá và được từng trình duyệt hỗ trợ, nên các việc như quét mã liên tục, kết nối máy in Bluetooth hay chạy nền lâu thường kém ổn định hơn so với app native. Web app cũng không có mặt trên App Store hay Google Play, trừ khi được bọc thành app, và lúc đó lại chịu mục 4.2 nói ở trên.
Bảng so sánh native app, hybrid app và web app
Bảng dưới gom các điểm khác nhau đã nêu, theo tài liệu của Apple, Google và MDN tra ngày 14/10/2026. Hàng chi phí là nhận định từ cách mỗi loại được xây dựng, chưa có số đo đi kèm.

| Tiêu chí | Native app | Hybrid app | Web app |
|---|---|---|---|
| Viết bằng | Swift, Objective-C (iOS); Kotlin, Java (Android) | HTML, CSS, JavaScript trong WebView, kèm phần cầu nối mã gốc | HTML, CSS, JavaScript chạy trong trình duyệt |
| Số mã nguồn | Một cho mỗi nền tảng, hoặc một nếu dùng bộ đa nền tảng | Một phần giao diện chung, phần cầu nối riêng từng nền | Một |
| Cài đặt | Tải từ App Store, Google Play | Tải từ App Store, Google Play | Không cài; PWA cài được từ trình duyệt |
| Tính năng của máy | Gọi trực tiếp API hệ điều hành | Qua plugin hoặc cầu nối | Chỉ những API trình duyệt hỗ trợ |
| Khi mất mạng | Chạy được nếu thiết kế lưu dữ liệu trong máy | Chạy được nếu nội dung đóng gói trong app | Cần mạng, trừ PWA có service worker |
| Cập nhật | Phát hành bản mới, chờ cửa hàng duyệt | Phần đóng gói cần bản app mới; phần tải từ máy chủ đổi ngay | Sửa trên máy chủ, có hiệu lực khi tải lại trang |
| Phí tài khoản cửa hàng | Apple 99 USD/năm, Google Play 25 USD một lần | Như native | Không cần |
| Chi phí làm và duy trì | Cao nhất khi viết riêng hai nền | Thấp hơn native ở phần giao diện | Thấp nhất, một đường phát hành |
Những câu cần hỏi trước khi chọn loại app
Chọn loại app phụ thuộc vào việc app phải làm gì, ai dùng và dùng trên máy nào. Bài chọn web app, PWA hay app native cho phần mềm nội bộ đi qua từng tình huống với ví dụ một kho hàng quét mã vạch. Ở đây chỉ gói lại thứ tự các câu hỏi, để đọc báo giá app cho đúng:
- Ghi ra người dùng chính: khách hàng tải app từ cửa hàng, hay nhân viên dùng trong nội bộ.
- Liệt kê tính năng cần đến phần cứng của máy, như máy ảnh, định vị, Bluetooth, thông báo đẩy, chạy nền.
- Xác định app có phải chạy lâu khi mất mạng và dữ liệu nào phải lưu trên máy trong thời gian đó.
- Đếm số nền tảng cần hỗ trợ: chỉ iPhone, chỉ Android, hay cả hai cộng bản trên máy tính.
- Hỏi đơn vị báo giá app sẽ viết bằng ngôn ngữ hoặc bộ công cụ nào, và còn được nhà phát hành hỗ trợ hay không.
- Tính thêm phí tài khoản cửa hàng, thời gian chờ duyệt mỗi lần cập nhật và người chịu trách nhiệm phát hành.
Nếu danh sách ở bước 2 trống và người dùng chủ yếu là nhân viên, web app thường đủ dùng. Khi bước 2 và bước 3 có nhiều mục, native app hoặc bộ đa nền tảng có biên dịch ra mã gốc đáng được cân nhắc trước.
Hỏi đáp
Native app có chạy được khi không có mạng không?
Chạy được, nếu app được thiết kế để lưu mã và dữ liệu trên máy. Mã của app native luôn nằm sẵn trong máy sau khi cài, còn dữ liệu thì tùy cách đội phát triển chọn lưu và đồng bộ. Phần nào lấy từ máy chủ, như đơn hàng mới hay tồn kho của chi nhánh khác, vẫn cần mạng để cập nhật.
App làm bằng Flutter hay React Native có được gọi là native app không?
Tùy cách định nghĩa. Theo tài liệu chính thức, React Native tạo ra đúng view của Android và iOS lúc chạy, còn Flutter biên dịch ra mã máy nhưng tự vẽ giao diện. Cả hai đều cài từ cửa hàng và gọi được tính năng của máy, nên thường được xếp vào nhóm “cross-platform native”, khác với hybrid app chạy giao diện trong WebView.
Làm native app cho cả iPhone và Android có phải viết hai lần không?
Nếu viết native thuần bằng Swift và Kotlin thì có, mỗi nền một mã nguồn. Dùng bộ đa nền tảng thì phần lớn mã viết một lần, nhưng phần cầu nối với tính năng riêng của từng hệ điều hành, phần kiểm thử và việc phát hành lên hai cửa hàng vẫn làm riêng.
Đưa app lên App Store và Google Play tốn phí bao nhiêu?
Theo trang chính thức tra ngày 14/10/2026, Apple Developer Program thu 99 USD mỗi năm, còn tài khoản nhà phát triển Google Play thu 25 USD một lần khi đăng ký. Đây là phí tài khoản, chưa gồm chi phí làm app, thiết kế, máy chủ và bảo trì.
Bọc website thành app để đưa lên App Store có được không?
Khó qua duyệt nếu app chỉ có vậy. Mục 4.2 của App Store Review Guidelines yêu cầu app có tính năng, nội dung và giao diện vượt hơn một website đóng gói lại, và mục 4.2.2 nói app không được chủ yếu là web clipping hay tập hợp liên kết. App cần có phần riêng, ví dụ thông báo đẩy, quét mã hay dùng khi mất mạng.
Khi đã rõ app cần làm gì trên máy và chạy cho ai, loại app gần như tự lộ ra. MONA Software lập trình ứng dụng di động iOS và Android theo yêu cầu, làm web app cho doanh nghiệp khi trình duyệt là đủ, và nhận viết phần mềm theo yêu cầu khi app chỉ là một phần của hệ thống lớn hơn. Nếu đang cầm ba báo giá native, hybrid và web app mà chưa biết so thế nào, gọi hotline 1900 636 648 và gửi kèm danh sách tính năng cần dùng trên điện thoại, MONA sẽ đọc cùng từng hạng mục.




















































