Giới thiệu dự án

Thương mại điện tử (TMĐT) và các nền tảng di động đang tái định hình thói quen tiêu dùng toàn cầu. Tại Việt Nam, theo số liệu thống kê ngành bán lẻ và TMĐT nông sản giai đoạn 2019–2020, tốc độ tăng trưởng của các kênh mua sắm trực tuyến đạt trên 30%/năm. Tuy nhiên, hơn 80% thị phần phân phối các mặt hàng nông sản thiết yếu—đặc biệt là lương thực chính như gạo, nếp, tấm—vẫn phụ thuộc vào các kênh truyền thống như đại lý bán lẻ, chợ dân sinh và cửa hàng bách hóa nhỏ lẻ.

+-------------------------------------------------------------------------+
|                  BÀI TOÁN KÊNH PHÂN PHỐI GẠO TRUYỀN THỐNG                |
+-------------------------------------------------------------------------+
| [Khách hàng] ---> Mất thời gian tìm kiếm ---> Vận chuyển nặng nhọc (10-50kg)
|               ---> Thiếu minh bạch giá   ---> Khó kiểm chứng chất lượng |
+-------------------------------------------------------------------------+
| [Đại lý gạo]  ---> Quản lý sổ sách thủ công ---> Giới hạn bán kính phục vụ |
|               ---> Thiếu kênh tương tác  ---> Không có cập nhật Realtime|
+-------------------------------------------------------------------------+

Vấn đề thực tiễn (Problem Statement)

Gạo là mặt hàng lương thực thiết yếu xuất hiện trong mọi bữa ăn gia đình Á Đông, nhưng việc mua sắm mặt hàng này gặp nhiều rào cản đặc thù:

  • Đặc thù khối lượng và vận chuyển: Khối lượng sản phẩm lớn (bao 5kg, 10kg, 25kg, 50kg) gây khó khăn cho việc tự vận chuyển của người tiêu dùng thành thị bận rộn.
  • Phân mảnh chủng loại và khó kiểm định: Các giống gạo phong phú (ST24, ST25, Nàng Thơm Chợ Đào, Lài Sữa, Gạo Lứt, Tấm thơm...) khó phân biệt bằng mắt thường, trong khi các sàn TMĐT tổng hợp thường thiếu thông tin chuyên sâu và cam kết nguồn gốc.
  • Trải nghiệm mua sắm trực tuyến kém: Các ứng dụng bán gạo hiện có trên thị trường như Gạo Ngon hay Gạo Bách Khoa Duy Nhất bộc lộ nhiều điểm yếu: giao diện chưa tối ưu, tốc độ tải dữ liệu chậm, thiếu tính năng tìm kiếm nâng cao, và không hỗ trợ tương tác đánh giá thực tế từ người dùng.

Mục tiêu dự án

Đồ án tốt nghiệp ngành Công nghệ Thông tin tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) do nhóm tác giả Phạm Thanh Bằng, Ka’ Huừs Tam Bou, Lê Thị Kiều Phụng thực hiện dưới sự hướng dẫn của ThS. Trương Thị Ngọc Phượng tập trung vào 4 mục tiêu cốt lõi:

  1. Nghiên cứu kiến trúc Backend-as-a-Service (BaaS) với nền tảng Google Firebase và bộ công cụ phát triển phần mềm Android SDK.
  2. Xây dựng ứng dụng di động native trên hệ điều hành Android phục vụ hai phân hệ người dùng độc lập: Khách hàng (User Client) và Chủ cửa hàng (Admin Manager).
  3. Thiết kế và tối ưu hóa cơ sở dữ liệu thời gian thực dạng phi quan hệ (Firebase Realtime Database) theo mô hình cấu trúc cây JSON (JSON Tree Structure).
  4. Tích hợp đầy đủ các dịch vụ đám mây: Xác thực người dùng (Firebase Authentication), Lưu trữ tệp đa phương tiện (Firebase Storage), Đẩy thông báo tức thời (Firebase Cloud Messaging - FCM), và Định vị bản đồ đơn hàng (Google Maps API).

Giải pháp kỹ thuật và kết quả kỳ vọng

Dự án áp dụng mô hình Serverless Native Mobile Architecture, kết nối trực tiếp Android Client tới Firebase Cloud Platform qua giao thức bảo mật mã hóa SSL 2048-bit. Giải pháp giúp loại bỏ sự cần thiết của hệ thống máy chủ backend trung gian (như PHP/NodeJS tự host), giảm 60% thời gian phát triển và đảm bảo tính đồng bộ dữ liệu thời gian thực với độ trễ dưới 200ms.

Chỉ số kỳ vọng Mục tiêu định lượng Phương pháp đo lường
Độ trễ đồng bộ (Latency) < 200ms Firebase Performance Monitoring
Thời gian phản hồi UI < 16ms (Chuẩn 60 FPS) Android Profiler GPU/CPU
Tỷ lệ kiểm thử thành công > 95% Android Test Orchestrator
Mức tiêu thụ RAM thiết bị < 85MB Memory Profiler trên Android 9.0/10.0
Dung lượng cài đặt (APK) < 18MB Android Gradle Release Build

Phạm vi và giới hạn

  • Nền tảng: Hệ điều hành Android, hỗ trợ từ Android 5.0 (Lollipop - API Level 21) đến Android 10 (API Level 29).
  • Khu vực áp dụng: Khảo sát và vận hành mô phỏng chuỗi cung ứng gạo tại khu vực TP. Hồ Chí Minh.
  • Phương thức thanh toán: Thanh toán khi nhận hàng (COD) kết hợp chuyển khoản ngân hàng và quản lý biên lai.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực tế hai ứng dụng chuyên biệt về gạo trên Google Play Store vào thời điểm nghiên cứu cho thấy nhiều hạn chế trong thiết kế và kỹ thuật:

+-----------------------------------------------------------------------------+
|               BẢNG SO SÁNH CÁC GIẢI PHÁP ỨNG DỤNG HIỆN HÀNH                 |
+--------------------------+-------------------+--------------------+---------+
| Tiêu chí phân tích       | App Gạo Ngon      | App Gạo Bách Khoa  | ỨNG DỤNG|
|                          |                   | Duy Nhất           | ĐỀ XUẤT |
+--------------------------+-------------------+--------------------+---------+
| Tốc độ tải dữ liệu       | Chậm, hay treo    | Chậm, lỗi routing  | Realtime|
| Tìm kiếm sản phẩm        | Không hỗ trợ      | Tìm kiếm cơ bản    | Indexing|
| Hệ thống Đánh giá/Review | Không có          | Không có           | Có (Sao)|
| Cập nhật trạng thái đơn  | Thủ công/Trễ      | Không có realtime  | Push/FCM|
| Bản đồ định vị giao hàng | Không tích hợp    | Danh sách tĩnh     | Map Live|
| Phân hệ quản trị (Admin) | Không tách biệt   | Hạn chế nghiệp vụ  | Đầy đủ  |
+--------------------------+-------------------+--------------------+---------+

Phân loại yêu cầu người dùng (MoSCoW Prioritization)

  • Must Have (Bắt buộc): Đăng ký/đăng nhập bằng số điện thoại, duyệt danh mục gạo, giỏ hàng, đặt hàng, quản lý đơn hàng cho Admin, cập nhật trạng thái đơn (Chờ xử lý, Đang giao, Đã giao), đồng bộ dữ liệu Realtime Database.
  • Should Have (Nên có): Tìm kiếm tức thì theo từ khóa, đánh giá sao (Rating 1-5 sao) kèm bình luận chi tiết, định vị vị trí nhận hàng bằng Google Maps API, quản lý banner quảng cáo động từ Admin.
  • Could Have (Có thể có): Quên mật khẩu qua hệ thống cấp phát lại mật khẩu tạm thời, danh sách sản phẩm yêu thích (Wishlist).
  • Won't Have (Chưa triển khai): Cổng thanh toán trực tuyến tự động qua Visa/Mastercard (dự kiến giai đoạn nâng cấp tiếp theo).

Thiết kế hệ thống

Kiến trúc ứng dụng được xây dựng theo mô hình Client-to-Cloud Architecture, tận dụng toàn bộ hệ sinh thái SDK của Google.

       +-------------------------------------------------------------+
       |                       ANDROID CLIENTS                       |
       |  +--------------------------+  +-------------------------+  |
       |  |     User Application     |  |   Admin Manager App     |  |
       |  | (Java Native, AndroidSDK)|  | (Java Native, AndroidSDK|  |
       |  +------------+-------------+  +------------+------------+  |
       +---------------|-----------------------------|---------------+
                       |  HTTPS (SSL 2048-bit) / WSS |
                       v                             v
       +-------------------------------------------------------------+
       |                   GOOGLE CLOUD / FIREBASE                   |
       |  +--------------------------+  +-------------------------+  |
       |  |  Firebase Authentication |  | Firebase Cloud Messaging|  |
       |  |  (Phone, Email/Password) |  | (Push Notification FCM)|  |
       |  +--------------------------+  +-------------------------+  |
       |  +--------------------------+  +-------------------------+  |
       |  | Firebase Realtime DB     |  | Firebase Cloud Storage  |  |
       |  | (JSON Tree Data Sync)    |  | (Images, Banner, Media) |  |
       |  +--------------------------+  +-------------------------+  |
       |  +-------------------------------------------------------+  |
       |  | Google Maps Platform (Geocoding & Location Tracking)  |  |
       |  +-------------------------------------------------------+  |
       +-------------------------------------------------------------+

Technology Stack và phiên bản sử dụng

  • Ngôn ngữ lập trình: Java (JDK 1.8.0_231).
  • Môi trường phát triển tích hợp (IDE): Android Studio 3.5.3 với Gradle Build Tools v3.5.0.
  • Target SDK: Android 10.0 (API Level 29); Minimum SDK: Android 5.0 (API Level 21).
  • Firebase Libraries:
    • com.google.firebase:firebase-database:19.2.0 (Realtime Database NoSQL)
    • com.google.firebase:firebase-auth:19.2.0 (Authentication engine)
    • com.google.firebase:firebase-storage:19.1.0 (Cloud media storage)
    • com.google.firebase:firebase-messaging:20.0.0 (FCM push notification)
  • Thư viện bên thứ ba: com.github.bumptech.glide:glide:4.10.0 (Tối ưu hóa và cache hình ảnh), com.google.android.gms:play-services-maps:17.0.0 (Google Maps SDK), com.stepstone.app-rating:app-rating:1.0.8 (UI Component đánh giá).

Thiết kế cơ sở dữ liệu phi quan hệ (NoSQL JSON Schema)

Dữ liệu được tổ chức theo cấu trúc cây phân cấp (JSON tree structure) thay thế mô hình bảng quan hệ (RDBMS) truyền thống, tối ưu hóa tốc độ truy xuất:

{
  "User": {
    "0912345678": {
      "Name": "Nguyen Van A",
      "Password": "encrypted_password_string",
      "Phone": "0912345678",
      "IsStaff": "false"
    }
  },
  "Category": {
    "01": {
      "Name": "Gao Thom Dac San",
      "Image": "https://firebasestorage.googleapis.com/.../cat_01.jpg"
    }
  },
  "Foods": {
    "001": {
      "CategoryId": "01",
      "Description": "Gao ST25 dat giai gao ngon nhat the gioi",
      "Discount": "0",
      "Image": "https://firebasestorage.googleapis.com/.../st25.jpg",
      "Name": "Gao ST25 Soc Trang",
      "Price": "32000"
    }
  },
  "Requests": {
    "1578028912345": {
      "Address": "1 Vo Van Ngan, TP Thu Duc",
      "Name": "Nguyen Van A",
      "Phone": "0912345678",
      "Status": "0",
      "Total": "320000",
      "Foods": [
        {
          "FoodId": "001",
          "FoodName": "Gao ST25 Soc Trang",
          "Price": "32000",
          "Quantity": "10",
          "Discount": "0"
        }
      ]
    }
  },
  "Rating": {
    "001": {
      "0912345678": {
        "UserPhone": "0912345678",
        "FoodId": "001",
        "RateValue": "5",
        "Comments": "Gao thom, deo, dong goi can than."
      }
    }
  }
}

Thiết kế quy tắc bảo mật (Firebase Security Rules)

Hệ thống sử dụng các quy tắc bảo mật nhằm ngăn chặn truy cập trái phép:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "Foods": {
      ".read": true,
      ".indexOn": ["CategoryId", "Name"]
    },
    "Requests": {
      ".indexOn": ["Phone", "Status"]
    }
  }
}

Phương pháp nghiên cứu và quản lý dự án (Methodology)

Dự án áp dụng mô hình phát triển phần mềm kết hợp giữa Agile/Scrum (trong các chu kỳ lặp phát triển tính năng) và Waterfall (trong giai đoạn phân tích đặc tả yêu cầu). Kế hoạch triển khai được chia thành 34 hạng mục công việc trong 12 tuần làm việc từ 09/10/2019 đến 02/01/2020:

  • Tuần 1–2: Khảo sát hiện trạng, nghiên cứu SDK và cấu trúc Firebase BaaS.
  • Tuần 3–4: Đặc tả Usecase, vẽ Sequence Diagram, thiết kế cấu trúc JSON và giao diện UI/UX.
  • Tuần 5–8: Lập trình phân hệ Khách hàng (User Client): Auth, Danh mục, Giỏ hàng, Đặt hàng, Rating.
  • Tuần 9–10: Lập trình phân hệ Quản trị (Admin Manager): Quản lý danh mục, CRUD sản phẩm, xử lý đơn hàng, Banner.
  • Tuần 11–12: Kiểm thử chức năng, tối ưu hóa hiệu năng, đóng gói APK và hoàn thiện tài liệu.

Implementation và kết quả

Quy trình phát triển và hiện thực mã nguồn (Development Process)

Quá trình phát triển tập trung vào việc áp dụng các mẫu thiết kế hướng sự kiện (Event-Driven Programming) thông qua các lớp Listener của Firebase.

1. Xử lý đồng bộ dữ liệu thời gian thực với FirebaseRecyclerAdapter

Để hiển thị danh sách sản phẩm theo loại thời gian thực mà không làm giật khung hình (frame drop), nhóm phát triển triển khai FirebaseRecyclerAdapter kết hợp cơ chế ViewHolder:

// Khởi tạo truy vấn phân cấp theo CategoryId
Query query = FirebaseDatabase.getInstance()
        .getReference("Foods")
        .orderByChild("CategoryId")
        .equalTo(categoryId);

FirebaseRecyclerOptions<Food> options = new FirebaseRecyclerOptions.Builder<Food>()
        .setQuery(query, Food.class)
        .build();

adapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(options) {
    @Override
    protected void onBindViewHolder(@NonNull FoodViewHolder holder, int position, @NonNull Food model) {
        holder.txtFoodName.setText(model.getName());
        holder.txtFoodPrice.setText(String.format("%,d VNĐ/kg", Long.parseLong(model.getPrice())));
        
        // Tối ưu hóa tải ảnh đa luồng với Glide
        Glide.with(context)
             .load(model.getImage())
             .placeholder(R.drawable.rice_placeholder)
             .diskCacheStrategy(DiskCacheStrategy.ALL)
             .into(holder.imgFood);

        holder.setItemClickListener((view, pos, isLongClick) -> {
            Intent intent = new Intent(FoodListActivity.this, FoodDetailActivity.class);
            intent.putExtra("FoodId", adapter.getRef(position).getKey());
            startActivity(intent);
        });
    }

    @NonNull
    @Override
    public FoodViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_food, parent, false);
        return new FoodViewHolder(view);
    }
};

2. Thuật toán tìm kiếm tiền tố (Prefix Search) trên Firebase NoSQL

Firebase Realtime Database không hỗ trợ toán tử LIKE '%text%' như SQL. Giải pháp được triển khai bằng việc kết hợp startAt()endAt() với ký tự Unicode đặc biệt \uf8ff:

private void startSearch(CharSequence text) {
    Query searchQuery = FirebaseDatabase.getInstance()
            .getReference("Foods")
            .orderByChild("Name")
            .startAt(text.toString())
            .endAt(text.toString() + "\uf8ff");

    FirebaseRecyclerOptions<Food> searchOptions = new FirebaseRecyclerOptions.Builder<Food>()
            .setQuery(searchQuery, Food.class)
            .build();

    searchAdapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(searchOptions) {
        @Override
        protected void onBindViewHolder(@NonNull FoodViewHolder holder, int position, @NonNull Food model) {
            holder.txtFoodName.setText(model.getName());
            Glide.with(getBaseContext()).load(model.getImage()).into(holder.imgFood);
        }
        // ... Cài đặt ViewHolder tương ứng
    };
    searchAdapter.startListening();
    recyclerView.setAdapter(searchAdapter);
}

3. Xử lý tải đa phương tiện lên Firebase Storage và liên kết URL

Quá trình Admin thêm mới hoặc chỉnh sửa sản phẩm được hiện thực hóa qua quy trình bất đồng bộ: Tải ảnh lên Storage -> Lấy đường dẫn URI công khai (downloadUrl) -> Ghi dữ liệu vào Realtime Database:

private void uploadImageAndSaveProduct(Uri saveUri, final Food newFood) {
    if (saveUri != null) {
        final ProgressDialog mDialog = new ProgressDialog(this);
        mDialog.setMessage("Đang tải dữ liệu lên...");
        mDialog.show();

        String imageName = UUID.randomUUID().toString();
        final StorageReference imageFolder = storageReference.child("images/" + imageName);

        imageFolder.putFile(saveUri)
            .addOnSuccessListener(taskSnapshot -> {
                mDialog.dismiss();
                imageFolder.getDownloadUrl().addOnSuccessListener(uri -> {
                    newFood.setImage(uri.toString());
                    foodsDatabaseReference.push().setValue(newFood)
                        .addOnCompleteListener(task -> {
                            Toast.makeText(AdminProductActivity.this, 
                                "Thêm sản phẩm thành công!", Toast.LENGTH_SHORT).show();
                        });
                });
            })
            .addOnFailureListener(e -> {
                mDialog.dismiss();
                Toast.makeText(AdminProductActivity.this, "Lỗi: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            });
    }
}

Kiểm thử và đánh giá kết quả (Testing & Validation)

Hệ thống đã trải qua quá trình kiểm thử toàn diện qua 48 kịch bản kiểm thử (Test Cases) trên các thiết bị thật: Xiaomi Mi 8 (Android 10), Samsung Galaxy J7 Prime (Android 8.1), và Google Pixel 3 Emulator (Android 9.0).

+-----------------------------------------------------------------------------+
|                     KẾT QUẢ KIỂM THỬ CHỨC NĂNG HỆ THỐNG                     |
+--------------------------+------------+------------+-----------+------------+
| Phân hệ kiểm thử         | Số Testcase| Đạt (Pass) | Lỗi (Fail)| Tỷ lệ (%)  |
+--------------------------+------------+------------+-----------+------------+
| Xác thực (Authentication)|     08     |     08     |     00    |   100.0%   |
| Quản lý giỏ hàng & Đơn   |     12     |     12     |     00    |   100.0%   |
| Tìm kiếm & Lọc sản phẩm  |     06     |     06     |     00    |   100.0%   |
| Đánh giá & Bình luận     |     06     |     05     |     01    |    83.3%   |
| Quản trị Admin (CRUD)    |     10     |     10     |     00    |   100.0%   |
| Đồng bộ Realtime & Map   |     06     |     06     |     00    |   100.0%   |
+--------------------------+------------+------------+-----------+------------+
| TỔNG CỘNG                |     48     |     47     |     01    |    97.9%   |
+--------------------------+------------+------------+-----------+------------+

Đo lường hiệu năng kỹ thuật (Performance Benchmarks)

  • Thời gian khởi động ứng dụng (App Launch Time): Cold Start trung bình đạt 1.35 giây; Warm Start đạt 0.58 giây.
  • Tiêu thụ bộ nhớ (RAM Consumption): Mức chiếm dụng RAM ổn định ở mức 62MB - 78MB trong suốt quá trình cuộn danh sách lớn (Infinite Scrolling).
  • Độ trễ đồng bộ đơn hàng (Sync Latency): Khi Admin thay đổi trạng thái đơn hàng từ "0" (Chờ xử lý) sang "1" (Đang giao), thiết bị người dùng nhận được cập nhật sau trung bình 182ms trên mạng 4G và 95ms trên mạng Wifi.
  • Đánh giá trải nghiệm người dùng (UAT): Khảo sát 30 người dùng thử nghiệm đạt điểm hài lòng trung bình 4.65/5.0 về tính tiện dụng và độ mượt của giao diện.

Đổi mới và đóng góp

  1. Loại bỏ hoàn toàn chi phí máy chủ trung gian (Serverless Architecture): Bằng việc kết nối trực tiếp Android SDK tới Google Firebase Cloud, hệ thống cắt giảm 100% chi phí duy trì phần cứng hoặc VPS cho các chủ đại lý gạo quy mô vừa và nhỏ trong giai đoạn đầu khởi nghiệp.
  2. Cơ chế phản hồi đơn hàng hai chiều thời gian thực (Two-Way Realtime Interaction): So với các ứng dụng bán gạo truyền thống sử dụng mô hình HTTP Polling (gửi request liên tục để kiểm tra trạng thái), ứng dụng giảm 85% lưu lượng mạng tiêu thụ và loại bỏ hoàn toàn tình trạng trễ thông tin đơn hàng.
  3. Mô hình định danh và phân loại gạo chuyên biệt: Hệ thống tổ chức danh mục chuẩn hóa cho ngành nông sản lương thực, hỗ trợ hiển thị chi tiết chỉ số độ nở, độ dẻo, xuất xứ và hạn sử dụng của từng loại gạo.
  4. Tích hợp kiểm chứng chất lượng cộng đồng: Hệ thống xếp hạng 5 sao và bình luận minh bạch cho từng dòng gạo giúp người tiêu dùng giải quyết bài toán thiếu tin cậy về chất lượng gạo trên thị trường trực tuyến.
+-----------------------------------------------------------------------------+
|                ĐỐI CHIẾU CẢI TIẾN HIỆU NĂNG VÀ TÍNH NĂNG                    |
+-------------------------------+----------------------+----------------------+
| Thông số kỹ thuật             | Giải pháp cũ (MySQL) | Đồ án (Firebase BaaS)|
+-------------------------------+----------------------+----------------------+
| Tốc độ nhận thông báo đơn     | 15 - 30 giây (Poll)  | < 0.2 giây (FCM Push)|
| Chi phí hạ tầng khởi tạo      | $10 - $30/tháng      | $0.00 (Spark Tier)   |
| Khả năng mở rộng (Scale)      | Cần cấu hình cụm DB  | Tự động mở rộng      |
| Hỗ trợ lưu trữ offline        | Phức tạp             | Tích hợp sẵn (Cache) |
+-------------------------------+----------------------+----------------------+

Ứng dụng thực tế và triển khai

Tình huống sử dụng thực tế (Real-World Use Cases)

  • Hộ gia đình đô thị: Đặt gạo định kỳ (10–20kg) chỉ qua 3 bước chạm màn hình, theo dõi trực quan trạng thái giao hàng trên bản đồ và nhận hàng tận cửa nhà.
  • Chủ đại lý / Cửa hàng gạo: Quản lý toàn bộ danh mục sản phẩm, banner khuyến mãi và đơn hàng tức thời trên điện thoại mà không cần đầu tư máy tính để bàn hay máy POS đắt tiền.
  • Doanh nghiệp cung ứng gạo đặc sản: Tiếp cận trực tiếp tệp khách hàng có nhu cầu cao về gạo sạch, gạo hữu cơ có thương hiệu (ST25, Gạo lứt huyết rồng).

Chiến lược triển khai và yêu cầu hệ thống

  • Yêu cầu môi trường vận hành Client:
    • Thiết bị di động chạy hệ điều hành Android từ phiên bản 5.0 trở lên.
    • Bộ nhớ RAM tối thiểu 1GB (Khuyến nghị 2GB+).
    • Kết nối Internet qua 3G/4G/5G hoặc Wi-Fi.
  • Quy trình triển khai trên Cloud:
    1. Khởi tạo Project trên Google Firebase Console.
    2. Kích hoạt dịch vụ Realtime Database, Authentication và Cloud Storage.
    3. Cấu hình file chứng chỉ định danh google-services.json vào thư mục /app của dự án Android.
    4. Đăng ký Google Maps API Key và phân quyền trong file AndroidManifest.xml.
    5. Đóng gói bản phát hành (Signed APK / Android App Bundle) và phân phối qua Google Play Store hoặc tệp APK nội bộ.

Phân tích hiệu quả đầu tư (Cost-Benefit & ROI Analysis)

Nhờ sử dụng gói dịch vụ miễn phí Spark Plan của Firebase (hỗ trợ tới 100 kết nối đồng thời, 1GB dung lượng lưu trữ DB và 10GB lưu lượng tải/tháng), một cửa hàng gạo nhỏ có thể triển khai hệ thống với chi phí đầu tư công nghệ ban đầu xấp xỉ 0 đồng. Thời gian hoàn vốn đầu tư phần mềm ước tính đạt dưới 2 tháng nhờ gia tăng 25% lượng khách hàng mới và tối ưu 40% chi phí quản lý đơn hàng.


Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Truy vấn phức tạp: Cấu trúc NoSQL của Realtime Database gây khó khăn cho các tác vụ báo cáo thống kê doanh thu đa biến hoặc truy vấn kết hợp nhiều điều kiện (Compound Queries).
  • Hạ tầng thanh toán: Chưa tích hợp trực tiếp cổng thanh toán qua thẻ tín dụng quốc tế hoặc ví điện tử (MoMo, ZaloPay, VNPay) qua Webhook tự động.
  • Nền tảng đơn lẻ: Ứng dụng hiện chỉ hỗ trợ hệ điều hành Android, chưa có phiên bản tương ứng cho iOS hoặc Web App cho người quản trị.

Hướng phát triển trong tương lai

  1. Chuyển đổi sang Cloud Firestore: Nâng cấp từ Realtime Database lên Cloud Firestore để hỗ trợ lưu trữ theo cấu trúc Collection/Document, tăng cường khả năng mở rộng đa vùng (Multi-region Database) và truy vấn dữ liệu mạnh mẽ hơn.
  2. Tích hợp cổng thanh toán trực tuyến: Kết nối SDK thanh toán của MoMo/ZaloPay và cổng thanh toán nội địa để tự động hóa 100% quy trình thu tiền.
  3. Thuật toán gợi ý cá nhân hóa (Recommendation Engine): Tích hợp công nghệ học máy (Machine Learning) dựa trên Firebase ML Kit hoặc TensorFlow Lite để gợi ý loại gạo phù hợp với khẩu vị và nhu cầu sức khỏe (ví dụ: gạo dành cho người tiểu đường, gạo dẻo ít calo).
  4. Phát triển phiên bản Cross-Platform: Ứng dụng công nghệ Flutter hoặc React Native để đồng bộ hóa phiên bản trên cả iOS và Android từ một cơ sở mã nguồn duy nhất.

Đối tượng hưởng lợi

  • Sinh viên ngành Kỹ thuật Phần mềm / CNTT: Tài liệu tham khảo hoàn chỉnh về quy trình xây dựng ứng dụng di động native từ khâu khảo sát, phân tích usecase, thiết kế sơ đồ tuần tự (Sequence Diagram), xây dựng cấu trúc NoSQL đến kiểm thử thực tế.
  • Lập trình viên Mobile (Android Developers): Cung cấp các mẫu thiết kế (Design Patterns) thực tế về việc tích hợp trọn bộ Firebase SDK (Realtime DB, Storage, FCM, Auth) kết hợp Google Maps API và thư viện tối ưu hóa hình ảnh Glide.
  • Chủ đại lý và Doanh nghiệp phân phối gạo: Bản thiết kế giải pháp chuyển đổi số tinh gọn (Lean Digital Transformation) giúp hiện đại hóa quy trình bán lẻ truyền thống với chi phí vận hành tối thiểu.
  • Người tiêu dùng: Trải nghiệm mua sắm lương thực thiết yếu nhanh chóng, tiện lợi, minh bạch về giá cả và được đảm bảo chất lượng thông qua hệ thống đánh giá cộng đồng.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu của thiết bị để vận hành ứng dụng là gì?

Ứng dụng tương thích với mọi thiết bị di động chạy hệ điều hành Android từ phiên bản 5.0 (API Level 21) trở lên, yêu cầu tối thiểu 1GB RAM và khoảng 35MB dung lượng bộ nhớ trống để cài đặt và lưu trữ bộ nhớ đệm (cache).

2. Firebase Realtime Database có đảm bảo an toàn dữ liệu và chịu tải lớn không?

Có. Firebase Realtime Database được bảo vệ qua kết nối mã hóa SSL 2048-bit tiêu chuẩn ngân hàng. Về khả năng chịu tải, nền tảng của Google tự động cân bằng tải và có thể xử lý đồng thời hơn 100.000 kết nối song song mà không cần can thiệp cấu hình phần cứng thủ công.

3. Làm thế nào ứng dụng hoạt động khi mất kết nối mạng Internet đột ngột?

Hệ thống sử dụng cơ chế đệm dữ liệu cục bộ (FirebaseDatabase.getInstance().setPersistenceEnabled(true)). Khi mất mạng, ứng dụng vẫn hiển thị dữ liệu đã lưu ở cache và ghi nhận thao tác của người dùng; khi có mạng trở lại, dữ liệu sẽ tự động đồng bộ lên máy chủ đám mây.

4. Chi phí duy trì hệ sinh thái Firebase khi vận hành thực tế là bao nhiêu?

Với quy mô cửa hàng vừa và nhỏ (dưới 100 đơn hàng/ngày), gói miễn phí Spark Plan hoàn toàn đáp ứng đủ nhu cầu. Khi quy mô mở rộng, gói trả phí theo nhu cầu sử dụng (Blaze Plan - Pay as you go) có mức chi phí chỉ khoảng $5–$15/tháng, tối ưu hơn nhiều so với việc thuê server riêng.

5. Sự khác biệt giữa phân hệ của Khách hàng (User) và Quản trị viên (Admin) là gì?

Hai phân hệ được tách biệt rõ ràng về mặt phân quyền bảo mật. Phân hệ Khách hàng chỉ có quyền đọc sản phẩm, thêm giỏ hàng, đặt hàng và đánh giá sản phẩm của chính mình. Phân hệ Admin có quyền thêm, sửa, xóa danh mục/sản phẩm/banner, xem vị trí đơn hàng trên bản đồ và cập nhật trạng thái xử lý đơn hàng.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng bán gạo trên nền tảng Android" của nhóm sinh viên Phạm Thanh Bằng, Ka’ Huừs Tam Bou, Lê Thị Kiều Phụng (Khoa Công nghệ Thông tin - Trường Đại học Sư phạm Kỹ thuật TP.HCM) đã giải quyết trọn vẹn bài toán số hóa kênh phân phối nông sản thiết yếu.

Bằng việc kết hợp sức mạnh của ngôn ngữ lập trình Java Native trên nền tảng Android với hệ sinh thái đám mây Backend-as-a-Service từ Google Firebase, dự án đã chứng minh tính khả thi vượt trội về cả mặt kỹ thuật lẫn hiệu quả kinh tế:

  • Về mặt học thuật và kỹ thuật: Đồ án cung cấp một kiến trúc hệ thống mẫu mực về phát triển ứng dụng di động hướng dữ liệu thời gian thực (Realtime Event-Driven), chuẩn hóa cấu trúc dữ liệu NoSQL JSON và tích hợp linh hoạt các dịch vụ của bên thứ ba.
  • Về mặt giá trị thực tiễn: Ứng dụng mở ra hướng đi mới cho các hộ kinh doanh và đại lý bán lẻ trong việc tiếp cận khách hàng đô thị, tối ưu chi phí vận hành và nâng cao trải nghiệm mua sắm mặt hàng lương thực chính của người Việt.

Mô hình kiến trúc và mã nguồn của đồ án là tài liệu tham khảo giá trị cho sinh viên công nghệ, các nhà phát triển phần mềm độc lập và các đơn vị kinh tế nông nghiệp đang tìm kiếm giải pháp chuyển đổi số nhanh chóng, hiệu quả và bền vững.