Bối cảnh và vấn đề nghiên cứu
Trong bối cảnh chuyển đổi số và sự phát triển của công nghệ thông tin, nhu cầu về sự tiện lợi trong sinh hoạt hằng ngày ngày càng gia tăng. Việc đặt món ăn qua các thiết bị di động đã trở thành một phương thức tiêu dùng phổ biến, giúp tối ưu hóa thời gian và mang lại sự tiện lợi cho người sử dụng. Nhằm đáp ứng nhu cầu thực tiễn đó, đề tài "Phát triển ứng dụng đặt thức ăn di động hiện đại" (tên đề tài trong chương trình: App đặt thức ăn) được thực hiện trong khuôn khổ môn học Phát triển ứng dụng cho các thiết bị di động tại Học viện Công nghệ Bưu chính Viễn thông (Cơ sở TP. Hồ Chí Minh), Khoa Công nghệ Thông tin.
Mục tiêu chính của đề tài bao gồm:
- Xây dựng một ứng dụng di động hoàn chỉnh hỗ trợ khách hàng tìm kiếm, lựa chọn món ăn, áp dụng mã giảm giá, thực hiện thanh toán và theo dõi đơn hàng theo thời gian thực ngay tại nhà.
- Cung cấp hệ thống công cụ quản trị dành cho cửa hàng nhằm quản lý danh mục món ăn, cập nhật sản phẩm, tạo mã khuyến mãi, phê duyệt đơn hàng và điều phối người giao hàng.
- Thiết lập hệ thống hỗ trợ nhân viên giao hàng (shipper) tiếp nhận đơn, xác thực tài khoản và cập nhật vị trí hành trình giao hàng.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Quy trình vận hành, phân tích yêu cầu, thiết kế giao diện và xây dựng ứng dụng di động quản lý - đặt món ăn trực tuyến.
- Phạm vi không gian và triển khai: Môi trường hệ điều hành di động iOS (phiên bản từ 17.2 trở lên).
- Phạm vi thời gian: Báo cáo được hoàn thiện và nghiệm thu vào ngày 26 tháng 04 năm 2024 tại Học viện Công nghệ Bưu chính Viễn thông cơ sở TP. Hồ Chí Minh (Lớp D20CQCNPM01-N, giảng viên hướng dẫn: Thầy Trương Bá Thái).
Cơ sở lý thuyết và phương pháp
Nền tảng công nghệ và mô hình kiến trúc
Đề tài áp dụng các công nghệ, framework và mẫu thiết kế chuẩn trong phát triển phần mềm di động trên nền tảng Apple:
- Hệ điều hành & Công cụ phát triển: Nền tảng iOS 17.2, tích hợp môi trường phát triển Xcode của Apple.
- Ngôn ngữ & Giao diện: Ngôn ngữ lập trình Swift kết hợp với framework giao diện khai báo SwiftUI (declarative syntax), tối ưu hóa việc xây dựng giao diện đa chạm và tương tác người dùng.
- Mẫu thiết kế phần mềm: Kiến trúc Model-View-ViewModel (MVVM), cho phép phân tách độc lập giữa tầng giao diện hiển thị (View), tầng dữ liệu (Model) và tầng xử lý logic nghiệp vụ trung gian (ViewModel).
- Nền tảng dịch vụ phụ trợ (Backend as a Service): Google Firebase, đảm nhiệm vai trò cơ sở dữ liệu thời gian thực (Realtime Database), dịch vụ xác thực tài khoản (Authentication) và báo cáo lỗi hệ thống (Crash Reporting).
- Công cụ thiết kế UI/UX: Nền tảng đồ họa vector và tạo mẫu Figma, hỗ trợ xây dựng toàn bộ hệ thống mockup và luồng tương tác của ứng dụng trước khi lập trình.
Phương pháp nghiên cứu
- Phương pháp thu thập và phân tích yêu cầu: Phân tích nhu cầu thực tế của người dùng, cửa hàng và nhân viên vận chuyển để xác định các đặc tả yêu cầu chức năng và yêu cầu phi chức năng.
- Phương pháp thiết kế mẫu (Prototyping): Xây dựng các bản mẫu giao diện người dùng trên Figma nhằm mô phỏng luồng thao tác từ đăng nhập, đặt hàng, xử lý đơn đến giao vận.
- Phương pháp thực nghiệm phần mềm: Triển khai mã nguồn trực tiếp trên môi trường Xcode, tích hợp SDK Firebase và kiểm thử tính năng trên các thiết bị chạy iOS 17.2.
Thiết kế và kiến trúc hệ thống
Hệ thống được tổ chức thành các phân hệ ứng dụng độc lập dành cho ba đối tượng tương tác: Khách hàng (Client App), Quản trị viên (Admin App) và Nhân viên giao hàng (Shipper App).
+-------------------------------------------------------------------------+
| KIẾN TRÚC MVVM |
| |
| +-------------------+ +--------------------+ +------------+ |
| | VIEW | <-> | VIEWMODEL | <-> | MODEL | |
| | (Giao diện SwiftUI)| | (Xử lý Logic/State)| | (Cấu trúc) | |
| +-------------------+ +--------------------+ +------------+ |
+-------------------------------------------------------------------------+
|
(Tích hợp Firebase SDK)
v
+-------------------------------------------------------------------------+
| FIREBASE BACKEND |
| [Authentication] [Realtime Database] [Crash Reporting] |
+-------------------------------------------------------------------------+
Phân cấp chức năng theo đối tượng người dùng
| Nhóm người dùng |
Các chức năng chính |
Mô tả luồng xử lý dữ liệu |
| Khách hàng (User) |
• Đăng ký, đăng nhập, khôi phục mật khẩu • Xem danh mục và tìm kiếm món ăn • Quản lý giỏ hàng, áp dụng mã discount • Thanh toán (Tiền mặt / Crypto qua Coinbase) • Theo dõi vị trí shipper thời gian thực trên bản đồ • Quản lý thông tin cá nhân và lịch sử đơn hàng |
Nhận dữ liệu thực đơn thời gian thực từ Firebase; đẩy thông tin đặt hàng vào cơ sở dữ liệu; lắng nghe tọa độ shipper để hiển thị lên bản đồ. |
| Quản trị viên (Admin) |
• Xác thực tài khoản quản trị • Quản lý danh mục (Thêm, xóa, cập nhật) • Quản lý sản phẩm món ăn (Thêm, xóa, sửa) • Quản lý mã giảm giá (Thêm, xóa discount) • Xem danh sách đơn hàng và gán đơn cho shipper • Xác minh tài khoản nhân viên giao hàng mới |
Toàn quyền kiểm soát và cập nhật cơ sở dữ liệu sản phẩm, phê duyệt và giám sát toàn bộ đơn hàng trong hệ thống. |
| Người giao hàng (Shipper) |
• Đăng ký tài khoản và chờ admin xác minh • Tiếp nhận đơn hàng được phân công • Chuyển sang chế độ giao hàng và mở bản đồ • Cập nhật tọa độ vị trí hiện tại lên hệ thống • Hoàn tất đơn hàng và xem lịch sử giao nhận |
Lắng nghe các đơn hàng được gán; gửi định kỳ tọa độ GPS lên Firebase Realtime Database để khách hàng theo dõi. |
Cấu trúc thư mục mã nguồn
Dự án được phân chia theo cấu trúc mô-đun hóa trong môi trường Xcode:
ModelView: Chứa các lớp ViewModel xử lý logic lấy dữ liệu và kết nối Firebase.
Model: Định nghĩa cấu trúc dữ liệu của sản phẩm, danh mục, người dùng, đơn hàng và giảm giá.
Modules: Chứa các phần ứng dụng được chia nhỏ theo tính năng cụ thể.
UI: Chứa các thành phần giao diện tái sử dụng dùng chung (Custom Textfield, Button...).
Common: Thư mục lưu trữ hình ảnh, biểu tượng (assets) và các tiện ích dùng chung.
Nội dung chính theo từng chương
Chương 1: Phân tích hệ thống và thiết kế
Chương này tập trung vào việc mô tả lý do chọn đề tài, xác định yêu cầu hệ thống và hoàn thiện toàn bộ thiết kế giao diện dưới dạng mockup trên nền tảng Figma.
-
Phân tích yêu cầu chức năng và phi chức năng:
- Yêu cầu chức năng cơ bản: Đăng nhập, đăng ký tài khoản, khôi phục mật khẩu (reset password).
- Yêu cầu chức năng người dùng: Xem danh sách món ăn, tìm kiếm thức ăn, quản lý giỏ hàng, đặt hàng, theo dõi đơn hàng, quản lý thông tin cá nhân và xử lý thanh toán.
- Yêu cầu chức năng admin: Quản lý thông tin sản phẩm, theo dõi đơn đặt hàng và cung cấp thống kê biểu đồ.
- Yêu cầu phi chức năng: Hệ thống hoạt động mượt mà, cơ sở dữ liệu Firebase chịu tải tốt khi có nhiều người dùng truy cập đồng thời, giao diện thân thiện và dễ sử dụng.
-
Đặc tả thiết kế Mockup Figma (13 màn hình thiết kế):
- Figma 1: Màn hình chờ (launcher) và màn hình chào mừng (welcome) kèm hiệu ứng animation.
- Figma 2: Giao diện đăng nhập, đăng ký (nhập email, password, repeat password) và khôi phục mật khẩu qua email.
- Figma 3: Màn hình chính với thanh tìm kiếm (search bar), danh mục món ăn (category) và màn hình chi tiết sản phẩm cho phép tùy chọn số lượng.
- Figma 4: Giao diện giỏ hàng (cho phép sửa, xóa món, thêm discount) và luồng thanh toán chia làm hai nhánh: Tiền mặt (Xác nhận -> Thành công) và Tiền mã hóa Crypto qua Coinbase (Xác nhận -> Chờ thanh toán -> Thành công).
- Figma 5: Thông báo đơn hàng và giao diện theo dõi vị trí shipper trên bản đồ.
- Figma 6: Màn hình cài đặt tài khoản người dùng và xem lại toàn bộ lịch sử đơn hàng.
- Figma 7: Giao diện chào mừng, đăng nhập, đăng ký và khôi phục mật khẩu dành cho ứng dụng Admin và Shipper.
- Figma 8: Giao diện quản trị viên duyệt đơn hàng mới và chỉ định shipper thực hiện giao hàng.
- Figma 9: Màn hình chính admin tích hợp quản lý sản phẩm, danh mục, mã giảm giá và danh sách đơn hàng.
- Figma 10: Giao diện xác minh danh tính shipper mới đăng ký dành cho admin.
- Figma 11: Giao diện đăng xuất của quản trị viên.
- Figma 12: Giao diện dành cho shipper bao gồm bước kiểm tra xác minh, bảng tiếp nhận đơn hàng và chế độ hiển thị bản đồ giao hàng.
- Figma 13: Giao diện xem lịch sử các đơn hàng đã giao thành công và chức năng đăng xuất của shipper.
Chương 2: Cài đặt hệ thống
Chương 2 trình bày chi tiết về môi trường phát triển, phương thức cài đặt mã nguồn từ kho lưu trữ GitHub và các phân đoạn mã nguồn thực thi chính của hệ thống.
-
Cài đặt và thiết lập dự án:
- Hệ điều hành mục tiêu: iOS 17.2 trở lên.
- Môi trường lập trình: Xcode, tích hợp thư viện Firebase.
- Mã nguồn được lưu trữ tại GitHub:
- Ứng dụng khách hàng (App Order Food):
https://github.com/henrytran1803/apporderfool (repository henrytran1803/AppOrderFood).
- Ứng dụng quản trị & giao hàng:
henrytran1803/AdminShipperApp.
-
Chi tiết hiện thực các mô-đun mã nguồn (17 hình ảnh triển khai thực tế):
- Cấu trúc và tài nguyên (Hình ảnh 1 - 4): Thiết lập cấu trúc thư mục dự án, Icon ứng dụng, màn hình Launcher và màn hình Welcome.
- Mô-đun xác thực người dùng (Hình ảnh 5): Triển khai code Swift xử lý Đăng nhập, Đăng ký và Khôi phục mật khẩu tích hợp Firebase Authentication.
- Mô-đun hiển thị và lọc thực đơn (Hình ảnh 6): Triển khai code lấy toàn bộ danh sách món ăn từ Firebase, code lọc món theo danh mục (category) và code thêm món ăn vào giỏ hàng.
- Mô-đun giỏ hàng và khuyến mãi (Hình ảnh 7): Triển khai code lấy dữ liệu giỏ hàng và truy vấn danh sách mã giảm giá (discount).
- Mô-đun thanh toán và chuyển trạng thái đơn hàng (Hình ảnh 8): Xử lý code chuyển đổi từ trạng thái giỏ hàng sang đơn hàng chính thức, code cập nhật trạng thái đơn hàng sang "thành công" hoặc "thất bại".
- Mô-đun quản lý người dùng và lịch sử (Hình ảnh 9): Code cập nhật thông tin cá nhân và truy vấn lịch sử đơn hàng của người dùng.
- Mô-đun theo dõi đơn hàng (Hình ảnh 10): Code lấy tọa độ vị trí của shipper từ cơ sở dữ liệu thời gian thực và cập nhật trạng thái tiến trình giao hàng.
- Mô-đun quản trị danh mục (Hình ảnh 11 - 12): Xử lý các thao tác Thêm danh mục, Xóa danh mục và Cập nhật (Update) danh mục.
- Mô-đun quản trị sản phẩm (Hình ảnh 13): Code xử lý Thêm sản phẩm mới, Chỉnh sửa thông tin sản phẩm và Xóa sản phẩm khỏi hệ thống.
- Mô-đun quản lý mã giảm giá (Hình ảnh 14): Triển khai code Thêm discount mới và Xóa discount.
- Mô-đun quản lý đơn hàng của Admin (Hình ảnh 15): Code truy vấn toàn bộ lịch sử đơn hàng trong hệ thống (chế độ chỉ xem, không cho phép sửa/xóa trực tiếp để đảm bảo tính toàn vẹn dữ liệu).
- Mô-đun xác thực và phân quyền shipper (Hình ảnh 16): Code lọc danh sách shipper đang chờ phê duyệt và code lấy danh sách các shipper đã được xác minh để gán đơn hàng.
- Mô-đun điều phối và cập nhật vị trí giao hàng (Hình ảnh 17): Code dành cho shipper tiếp nhận đơn hàng mới và cập nhật tọa độ vị trí hiện tại theo thời gian thực lên Firebase.
Chương 3: Kết luận & kiến nghị
-
Kết luận:
- Việc ứng dụng Firebase làm backend mang lại giải pháp quản lý dữ liệu linh hoạt, hỗ trợ đồng bộ hóa dữ liệu thời gian thực giữa ứng dụng khách hàng, quản trị viên và người giao hàng.
- Đảm bảo tính nhất quán của dữ liệu người dùng, thực đơn và trạng thái đơn hàng.
-
Kiến nghị phát triển:
- Nâng cấp cơ sở dữ liệu: Cần tối ưu hóa cơ sở dữ liệu để đáp ứng các truy vấn phức tạp đồng thời khi số lượng người dùng tăng cao, kết hợp các dịch vụ điện toán đám mây nâng cao.
- Tối ưu hóa trải nghiệm người dùng (UX): Nâng cao tốc độ phản hồi của giao diện và bổ sung các tính năng cá nhân hóa theo từng người dùng.
- Tăng cường bảo mật: Định kỳ rà soát các tiêu chuẩn an toàn thông tin, triển khai các kỹ thuật mã hóa dữ liệu giao dịch và thông tin cá nhân.
Kết quả và đóng góp
Kết quả triển khai thực tế
Dự án đã xây dựng thành công bộ đôi ứng dụng di động trên nền tảng iOS sử dụng Swift và SwiftUI, bao gồm đầy đủ các luồng xử lý nghiệp vụ từ phía người tiêu dùng đến khâu vận hành quản lý:
| Thành phần triển khai |
Kết quả kỹ thuật đạt được |
Nền tảng kết nối |
| Hệ thống xác thực |
Đăng ký, đăng nhập và khôi phục mật khẩu thông qua Email |
Firebase Authentication |
| Quản lý thực đơn & Giỏ hàng |
Tải danh mục, tìm kiếm, lọc sản phẩm và tính toán chi phí giỏ hàng kèm mã giảm giá |
Firebase Realtime Database |
| Tích hợp thanh toán |
Hỗ trợ 2 phương thức: Thanh toán tiền mặt và thanh toán tiền mã hóa (Crypto) qua Coinbase |
Cổng thanh toán & Logic ứng dụng |
| Hệ thống giao vận & Định vị |
Phân quyền shipper sau khi admin duyệt, cập nhật và hiển thị vị trí người giao hàng trên bản đồ |
Bản đồ tích hợp & Firebase Realtime |
| Bảng điều khiển quản trị |
Thao tác CRUD hoàn chỉnh đối với danh mục, sản phẩm, mã giảm giá và theo dõi đơn hàng |
Mô hình MVVM trên SwiftUI |
Đóng góp của đề tài
- Cung cấp giải pháp phần mềm khép kín phục vụ cả ba tác nhân: Khách hàng - Cửa hàng - Shipper trong cùng một hệ sinh thái ứng dụng.
- Hiện thực hóa việc ứng dụng các công nghệ mới của Apple (SwiftUI trên iOS 17.2) kết hợp với dịch vụ đám mây Firebase trong việc giải quyết bài toán đặt món và giao vận trực tuyến.
- Mở rộng phương thức thanh toán truyền thống bằng việc tích hợp thử nghiệm cổng thanh toán tiền mã hóa (Crypto qua Coinbase).
Hạn chế và hướng nghiên cứu tiếp
Hạn chế
- Xử lý tải truy vấn phức tạp: Cấu trúc dữ liệu hiện tại phụ thuộc chủ yếu vào các dịch vụ cơ bản của Firebase, chưa được tối ưu hóa cho các truy vấn dữ liệu lớn và phức tạp phát sinh đồng thời.
- Tính cá nhân hóa: Ứng dụng chưa tích hợp các thuật toán gợi ý món ăn tự động theo sở thích hoặc thói quen của từng người dùng cụ thể.
- Bảo mật và mã hóa nâng cao: Hệ thống chưa áp dụng các tầng mã hóa chuyên sâu độc lập cho dữ liệu giao dịch ngoài các cơ chế mặc định của dịch vụ backend.
Hướng nghiên cứu và phát triển tiếp theo
- Nâng cấp cơ sở dữ liệu bằng cách tích hợp thêm các dịch vụ Cloud chuyên sâu nhằm cải thiện hiệu năng xử lý truy vấn dữ liệu lớn.
- Bổ sung cơ chế cá nhân hóa giao diện và trải nghiệm người dùng dựa trên hành vi mua hàng.
- Nâng cao tiêu chuẩn bảo mật hệ thống thông qua việc cập nhật định kỳ các chính sách bảo mật và ứng dụng các thuật toán mã hóa dữ liệu nâng cao.
Giá trị tham khảo
Báo cáo đề tài có giá trị tham khảo thiết thực đối với:
- Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm: Là tài liệu tham khảo cụ thể về quy trình phát triển ứng dụng di động trên nền tảng iOS sử dụng ngôn ngữ Swift và framework SwiftUI theo kiến trúc MVVM.
- Người phát triển ứng dụng di động: Cung cấp tài liệu tham khảo về cách tổ chức luồng tương tác đa người dùng (Khách hàng - Quản trị - Shipper), thiết kế giao diện trên Figma và kỹ thuật kết nối Firebase Realtime Database để đồng bộ trạng thái đơn hàng cũng như tọa độ vị trí theo thời gian thực.
- Các đề tài liên quan đến thương mại điện tử / đặt món: Tham khảo cấu trúc cơ sở dữ liệu, quy trình chuyển đổi trạng thái đơn hàng và tích hợp phương thức thanh toán tiền mặt kết hợp thanh toán crypto.
Câu hỏi thường gặp
1. Đề tài sử dụng những công nghệ và công cụ chính nào để phát triển ứng dụng?
Ứng dụng được xây dựng trên hệ điều hành iOS (yêu cầu từ phiên bản 17.2 trở lên) bằng ngôn ngữ lập trình Swift kết hợp với framework giao diện SwiftUI theo kiến trúc MVVM. Môi trường phát triển tích hợp là Xcode, backend sử dụng nền tảng Google Firebase (Realtime Database, Authentication, Crash Reporting) và giao diện được thiết kế mẫu bằng công cụ Figma.
2. Hệ thống bao gồm những nhóm phân hệ và vai trò người dùng nào?
Hệ thống gồm ba nhóm vai trò chính:
- Khách hàng (User): Xem thực đơn, tìm kiếm món, quản lý giỏ hàng, áp mã giảm giá, thanh toán và theo dõi shipper trên bản đồ.
- Quản trị viên (Admin): Quản lý danh mục, quản lý sản phẩm, quản lý mã giảm giá, xem danh sách đơn hàng, phân công đơn cho shipper và phê duyệt shipper mới.
- Người giao hàng (Shipper): Đăng ký tài khoản, chờ admin xác thực, tiếp nhận đơn hàng, mở bản đồ giao hàng, cập nhật tọa độ vị trí và xem lịch sử giao hàng.
3. Ứng dụng hỗ trợ những phương thức thanh toán nào và quy trình xử lý ra sao?
Ứng dụng hỗ trợ hai phương thức thanh toán chính:
- Thanh toán tiền mặt: Người dùng xác nhận đơn hàng -> Chuyển trực tiếp sang màn hình thành công.
- Thanh toán bằng tiền mã hóa (Crypto qua Coinbase): Người dùng chọn phương thức -> Thực hiện bước xác nhận thanh toán -> Hệ thống đợi xác nhận xử lý từ phía dịch vụ Coinbase -> Chuyển sang màn hình thành công sau khi hoàn tất.
4. Cơ chế xác thực và nhận đơn của nhân viên giao hàng (Shipper) được vận hành như thế nào?
Khi một shipper mới đăng ký tài khoản, hệ thống không cho phép nhận đơn ngay mà yêu cầu xác minh. Quản trị viên (Admin) sẽ vào giao diện xác thực để duyệt tài khoản shipper. Sau khi được xác minh, shipper mới xuất hiện trong danh sách có thể nhận đơn. Khi có đơn hàng mới do Admin gán, shipper sẽ tiếp nhận đơn, chuyển sang giao diện bản đồ và hệ thống sẽ liên tục cập nhật tọa độ hiện tại của shipper lên Firebase để khách hàng theo dõi.
5. Mã nguồn của dự án được tổ chức theo những thành phần thư mục nào trong Xcode?
Mã nguồn dự án được tổ chức thành 5 thư mục thành phần chính:
ModelView: Xử lý logic và kết nối lấy dữ liệu.
Model: Định nghĩa cấu trúc dữ liệu.
Modules: Chứa các thành phần giao diện và chức năng được chia nhỏ theo mô-đun.
UI: Chứa các thành phần giao diện dùng chung (như TextField, Button).
Common: Lưu trữ tài nguyên hình ảnh và dữ liệu dùng chung.
Kết luận
Báo cáo đề tài "Phát triển ứng dụng đặt thức ăn di động hiện đại" của nhóm sinh viên lớp D20CQCNPM01-N, Học viện Công nghệ Bưu chính Viễn thông cơ sở TP. Hồ Chí Minh đã hoàn thành việc nghiên cứu, thiết kế và cài đặt một hệ sinh thái ứng dụng di động hoàn chỉnh trên nền tảng iOS 17.2. Bằng việc ứng dụng ngôn ngữ Swift, framework SwiftUI theo mô hình MVVM cùng nền tảng backend Firebase, nhóm tác giả đã hiện thực hóa thành công các luồng nghiệp vụ tương tác giữa khách hàng, cửa hàng quản trị và nhân viên giao hàng. Các định hướng về nâng cấp cơ sở dữ liệu đám mây, tối ưu hóa giao diện cá nhân hóa và tăng cường mã hóa bảo mật được đề xuất làm cơ sở để hoàn thiện ứng dụng trong các giai đoạn phát triển tiếp theo.