Chuyển tới nội dung chính
Trịnh Thị Mai
Đã hoàn thành

CIPPO

Lập trình viên Android cho CIPPO, một ứng dụng cộng đồng địa phương tại Nhật Bản (đăng tin doanh nghiệp, coupon, thẻ hội viên, đặt chỗ và thông tin đô thị) — hơn ba năm rưỡi làm việc trên nhiều mảng của ứng dụng từ điều hướng chính, thương mại đến giao tiếp.

Vai trò
Android Developer
Nền tảng
Android
Thời gian
2022–2026
Khách hàng
Khách hàng bảo mật

Tổng quan dự án

Lĩnh vực
Cộng đồng & thương mại địa phương — đăng tin doanh nghiệp, coupon, thẻ hội viên và thông tin đô thị (ví dụ lịch thu gom rác), phục vụ thị trường Nhật Bản, như một phần của nền tảng gồm hơn 60 ứng dụng Android.
Sản phẩm
CIPPO là ứng dụng Android kết nối doanh nghiệp địa phương và cư dân tại các thành phố Nhật Bản: xem và đăng tin quảng cáo/doanh nghiệp, đổi coupon và ưu đãi có thời hạn, thẻ hội viên trả phí, chat trong ứng dụng, quét mã QR, bản đồ, và thông tin theo từng thành phố như lịch thu gom rác. Cùng một mã nguồn còn được nhân bản và đổi thương hiệu cho từng thành phố/công ty triển khai riêng (xem ghi chú kiến trúc) — CIPPO chính là ứng dụng gốc trong một nền tảng lớn hơn gồm hơn 60 ứng dụng.
Người dùng
Cư dân và doanh nghiệp địa phương tại các thành phố mà CIPPO và các bản sao theo từng thành phố phục vụ — cư dân xem tin đăng, đổi coupon, dùng thẻ hội viên và tra cứu thông tin đô thị; doanh nghiệp đăng và quản lý tin/ưu đãi của mình.
Lý do ra đời
CIPPO mang đến cho doanh nghiệp địa phương một cách nhẹ nhàng để tiếp cận cư dân (đăng tin, coupon, thẻ hội viên trả phí), đồng thời là kênh thông tin đô thị cho thành phố nơi ứng dụng được triển khai — kết hợp thương mại và thông tin công dân trong một ứng dụng có thể đổi nhãn hiệu và triển khai lại cho từng thành phố.
Vấn đề
Trong hơn ba năm, những vấn đề tôi phụ trách trải rộng trên phần lớn bề mặt hàng ngày của ứng dụng: giữ cho khu vực điều hướng chính hoạt động ổn định khi có thêm tính năng mới, xây dựng và duy trì tính năng đăng tin/coupon, khu vực hội viên/phúc lợi, mua hàng trong ứng dụng, thông báo đẩy, chat trong ứng dụng, và thông tin thành phố như lịch thu gom rác.

Vai trò & đóng góp của tôi

Trong thời gian tham gia CIPPO, tôi làm việc trên nhiều phần của ứng dụng Android: khu vực điều hướng chính, đăng tin/quảng cáo doanh nghiệp và trang chi tiết, khu vực hội viên/phúc lợi, tính năng coupon và magazine, Google Play Billing cho mua hàng trong ứng dụng, thông báo đẩy, chat trong ứng dụng, bản đồ, và tính năng thông tin thu gom rác, cùng với công việc liên tục ở lớp dữ liệu và cấu hình dependency injection thủ công của ứng dụng.

Thách thức & giải pháp

  1. Thách thức kỹ thuật

    Hai điểm nổi bật. Thứ nhất, CIPPO tự xây dựng cơ chế dependency injection thủ công (không dùng Hilt/Dagger/Koin) — một class factory duy nhất khởi tạo 196 ViewModel, và việc mở rộng nó an toàn khi thêm tính năng mới đòi hỏi hiểu và duy trì đúng cách làm đó thay vì đi vòng qua nó. Thứ hai, ứng dụng kết hợp một REST API (Retrofit) với nhiều dịch vụ Firebase (Realtime Database, Firestore, Auth, Storage, Messaging) trên một tập tính năng lớn và liên tục phát triển, việc giữ dữ liệu nhất quán trên backend kết hợp này khi xây dựng tính năng mới là một mối quan tâm thường trực.

    Cách tôi tiếp cận

    Với dependency injection, các tính năng mới được kết nối vào pattern factory thủ công hiện có một cách nhất quán, thay vì đưa thêm một cách tiếp cận DI thứ hai không tương thích vào một ứng dụng đã lớn. Với backend kết hợp, các tính năng được xây dựng để đi qua các lớp trừu tượng nguồn dữ liệu sẵn có của ứng dụng (REST hay Firebase tuỳ tính năng), để phần còn lại của ứng dụng không cần biết tính năng đó dùng backend nào bên dưới.

Kiến trúc & công nghệ

CIPPO là một ứng dụng Android Kotlin dùng giao diện View/XML cổ điển (data binding + view binding, không dùng Compose), theo mô hình MVVM với một factory dependency-injection tự xây dựng (không dùng framework DI), RxJava2 cho xử lý bất đồng bộ, và backend kết hợp giữa REST API (Retrofit/Gson) và nhiều dịch vụ Firebase. Sản phẩm còn được triển khai lại dưới dạng các bản sao mang thương hiệu riêng cho từng thành phố/công ty (một pattern có thật, đã xác minh qua mã nguồn — lịch sử git của chính mã nguồn này cho thấy các nhánh nhân bản riêng cho các thành phố khác) — cùng mô hình kinh doanh nhân bản-theo-triển khai sau này cũng được dùng cho Biske, dù ở đây được thực hiện ở cấp độ nhánh git thay vì qua product flavor của Gradle.

Công nghệ

  • Kotlin
  • RxJava2
  • Retrofit
  • Firebase Realtime Database
  • Firebase Firestore
  • Firebase Crashlytics
  • Firebase Cloud Messaging
  • Glide
  • Google Maps
  • Google Play Billing
  • Branch
  • ZXing

Dự án này thể hiện

Dự án này thể hiện việc đảm nhận liên tục, lâu dài một ứng dụng Android thực tế đang hoạt động — làm việc trên điều hướng, thương mại (đăng tin, coupon, billing), giao tiếp (chat, thông báo đẩy), và thông tin công dân, tất cả trong một kiến trúc cũ nhưng vẫn được duy trì tích cực (DI thủ công, RxJava2, backend kết hợp REST+Firebase) trong hơn ba năm.

  • Phát triển Android
  • Tích hợp bên thứ ba
  • Bản đồ & Vị trí
  • Bảo trì hệ thống hiện có
  • Gỡ lỗi hệ thống thực tế

Bạn có dự án tương tự?

Chia sẻ sản phẩm hoặc vấn đề bạn đang gặp. Tôi sẽ trao đổi để tìm hướng hỗ trợ phù hợp.

Làm việc cùng tôi