Chuyển tới nội dung chính
Trịnh Thị Mai
Đang thực hiện

VoiceMap — Ứng dụng audio tour toàn cầu

Ứng dụng audio tour tự hướng dẫn dành cho du khách trên toàn thế giới. Từ tháng 4/2026, tôi tham gia phát triển ứng dụng Android của VoiceMap: làm tính năng mới, hiện đại hóa mã nguồn và xử lý lỗi trên production.

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

Tổng quan dự án

Lĩnh vực
Du lịch
Sản phẩm
Du khách tải tour về cho một thành phố, khu phố hay điểm tham quan, rồi nghe thuyết minh theo đúng vị trí mình đang đứng.
Người dùng
Du khách tự túc, thích khám phá theo nhịp độ của riêng mình.
Lý do ra đời
Hướng dẫn viên không phải lúc nào cũng sẵn có hoặc dễ đặt. Với VoiceMap, du khách có thể bắt đầu tour ngay khi đến nơi.
Vấn đề
Trong phạm vi tôi phụ trách, thách thức chính là giữ trải nghiệm đó ổn định khi ứng dụng, Android và thiết bị người dùng liên tục thay đổi.

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

Tôi bắt đầu làm ứng dụng Android của VoiceMap từ tháng 4/2026, khi ứng dụng đã chạy thực tế. Phần lớn công việc là cải tiến dần: làm tính năng và giao diện theo đúng kiến trúc hiện tại, đồng thời chuyển từng phần mã nguồn từ Java sang Kotlin. Tôi cũng điều tra và xử lý lỗi trên production. Đến nay, tôi đã làm với luồng mua hàng và Google Play Billing, tải tour và chế độ ngoại tuyến, đăng nhập, deep link và điều hướng, bản đồ và định vị, tải hình ảnh/media, xử lý nền, hành vi riêng trên từng dòng máy, và theo dõi analytics/doanh thu.

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

  1. Hoạt động ngoại tuyến

    Tour đã tải về phải dùng được khi không có mạng, kể cả hình ảnh và media. Một số đoạn code tải ảnh lại mặc định là luôn có kết nối, nên khi không có mạng, tour lúc hiển thị đúng lúc không. Tôi tìm ra những chỗ việc tải ảnh và media vẫn phụ thuộc vào mạng hoặc cache, rồi sửa lại để tour đã tải chạy ổn định khi ngoại tuyến.

    Luồng đăng nhập

    Luồng đăng nhập/đăng ký dần phình to và rối, sửa một chỗ nhỏ cũng mất thời gian và dễ phát sinh lỗi. Tôi gom lại thành một luồng chung do một host quản lý, tách riêng từng màn hình: bắt đầu, xác minh OTP, đăng nhập bằng mật khẩu và tạo tài khoản, đồng thời giúp điều hướng và back stack rõ ràng, dễ kiểm soát hơn. Nhờ vậy, luồng này dễ theo dõi và an toàn hơn mỗi khi cần thay đổi.

    Xử lý nền

    Các phiên bản Android mới siết chặt việc chạy nền, và một số phần của ứng dụng cần được cập nhật theo mà không làm hỏng những gì đang chạy tốt. Tôi chuyển các tác vụ phù hợp sang WorkManager và làm cho việc dọn dẹp thông báo, trạng thái ổn định hơn.

    Mua hàng, crash và analytics

    Có những lỗi liên quan đến cả ứng dụng lẫn các dịch vụ bên thứ ba: crash, lỗi trong luồng mua hàng, hay dữ liệu analytics/doanh thu ghi nhận thiếu nhất quán trên Firebase, Amplitude, Branch và Facebook. Với từng báo cáo, tôi kiểm tra đúng lớp liên quan — báo cáo crash, SDK cụ thể hoặc chính luồng mua hàng — để xác định nguyên nhân.

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

Ứng dụng Android native, ban đầu viết bằng Java và đang chuyển dần sang Kotlin, dùng Android Jetpack. Bản phát hành được build qua GitLab CI/CD, kiểm thử nội bộ bằng Firebase App Distribution và phát hành qua Google Play.

Công nghệ

  • Kotlin
  • Java
  • Android Jetpack
  • Retrofit
  • OkHttp
  • Glide
  • WorkManager
  • Room
  • SQLite
  • Google Maps
  • Google Location Services
  • Google Play Billing
  • Firebase
  • Amplitude
  • Branch
  • Facebook
  • Gradle
  • ProGuard/R8
  • GitLab CI/CD
  • Firebase App Distribution
  • Google Play Console

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

Dự án cho thấy tôi có thể tiếp nhận một codebase Android lớn, lâu năm, hiểu rõ cách nó thực sự vận hành rồi cải tiến dần — kể cả xử lý những lỗi liên quan đến cả ứng dụng lẫn các dịch vụ mà nó sử dụng.

  • Phát triển Android
  • Hiện đại hóa hệ thống cũ
  • Gỡ lỗi hệ thống thực tế
  • Hỗ trợ ngoại tuyến
  • Xác thực
  • Bản đồ & Vị trí
  • Xử lý nền
  • Tích hợp bên thứ ba
  • Hỗ trợ phát hành

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