Giới thiệu dự án

Thị trường giải trí số và dịch vụ phát trực tuyến âm thanh (Digital Music Streaming) trên toàn cầu đang chứng kiến sự tăng trưởng vượt bậc, với tốc độ tăng trưởng kép hàng năm (CAGR) đạt xấp xỉ 14.7%. Tại Việt Nam, sự phổ cập của mạng Internet tốc độ cao cùng thiết bị di động thông minh đã thay đổi căn bản hành vi thưởng thức âm nhạc: hơn 78% người dùng trẻ lựa chọn nghe nhạc trực tuyến hàng ngày qua các ứng dụng di động. Tuy nhiên, phần lớn các nền tảng thương mại hiện nay thường tích hợp quá nhiều tính năng phụ trợ phức tạp, chứa mật độ quảng cáo dày đặc và tiêu tốn đáng kể tài nguyên hệ thống (RAM, pin), gây ảnh hưởng tiêu cực đến trải nghiệm người dùng cuối.

Đồ án "Thiết kế ứng dụng nghe nhạc - Heart Steel" được thực hiện bởi nhóm tác giả Lê Xuân Tuyển và Phương Sanh Minh dưới sự hướng dẫn của Th.S Lương Khánh Tý tại Khoa Khoa học Máy tính, Trường Đại học Công nghệ Thông tin và Truyền thông Việt - Hàn (VKU). Đề tài giải quyết trực tiếp bài toán xây dựng một ứng dụng nghe nhạc di động gọn nhẹ, trực quan, hỗ trợ tương tác thông minh nhưng vẫn đảm bảo khả năng quản trị dữ liệu tập trung và bảo mật cao.

+-------------------------------------------------------------------------------+
|                    MỤC TIÊU VÀ ĐẦU RA CỦA ĐỒ ÁN HEART STEEL                   |
+-------------------------------------------------------------------------------+
| 1. Xây dựng ứng dụng Android Native hoàn chỉnh bằng ngôn ngữ Kotlin v1.9+.    |
| 2. Tích hợp hệ sinh thái Firebase (Authentication, Realtime DB, Storage).     |
| 3. Thiết kế hệ thống phân quyền chặt chẽ (Admin - End User).                  |
| 4. Xây dựng module ChatBot tư vấn bài hát trực tiếp trong ứng dụng.           |
| 5. Tối ưu thời gian tải dữ liệu và độ trễ phát nhạc (Audio latency < 300ms).  |
+-------------------------------------------------------------------------------+

Mục tiêu cụ thể của dự án

  1. Xây dựng ứng dụng di động Native trên nền tảng Android: Tận dụng tối đa hiệu năng xử lý của ngôn ngữ lập trình hiện đại Kotlin để xây dựng giao diện mượt mà và quản lý vòng đời ứng dụng (Android Lifecycle) chuẩn xác.
  2. Triển khai kiến trúc Backend-as-a-Service (BaaS) với Firebase: Đồng bộ hóa cơ sở dữ liệu thời gian thực, quản lý xác thực người dùng an toàn và lưu trữ tệp tin đa phương tiện (audio, hình ảnh album) hiệu quả.
  3. Phân định rõ ràng hai nhóm phân quyền tác nhân (Actors):
    • Người dùng (User): Đăng ký, đăng nhập, tìm kiếm bài hát theo từ khóa/thể loại, phát nhạc trực tuyến, quản lý danh sách yêu thích, đánh giá và tương tác với ChatBot.
    • Quản trị viên (Admin): Quản lý vòng đời dữ liệu (CRUD) danh mục bài hát, thể loại nhạc, theo dõi người dùng và xem thống kê tổng thể.
  4. Tích hợp module tư vấn ChatBot: Hỗ trợ giải đáp và gợi ý nội dung âm nhạc tương tác cho người dùng ngay trên thiết bị.

Phạm vi và giới hạn đề tài

  • Phạm vi: Tập trung vào nền tảng Android (hỗ trợ từ Android 7.0 API 24 đến Android 14 API 34), quản lý luồng dữ liệu đám mây qua Firebase và xử lý phát nhạc streaming.
  • Giới hạn: Ứng dụng tập trung vào chức năng nghe nhạc trực tuyến; cơ chế mã hóa bản quyền số (Digital Rights Management - DRM) và phát ngoại tuyến nâng cao sẽ được tiếp tục phát triển ở các giai đoạn tiếp theo.

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

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

Qua khảo sát thực tế và phân tích đối thủ cạnh tranh trên thị trường ứng dụng nghe nhạc di động, nhóm nghiên cứu đã tổng hợp bảng so sánh kỹ thuật nhằm xác định khoảng trống công nghệ và tối ưu giải pháp:

Tiêu chí so sánh Spotify / Apple Music Zing MP3 / Nhaccuatui Giải pháp Heart Steel (Đồ án)
Kiến trúc hệ thống Microservices phức tạp, phân tán Hybrid Cloud / Private Server Serverless BaaS (Firebase Ecosystem)
Dung lượng cài đặt Lớn (> 80 MB - 120 MB) Trung bình (> 65 MB) Rất nhẹ (~15 MB - 25 MB)
Mức độ chiếm dụng RAM 180 MB - 350 MB 150 MB - 280 MB Tối ưu hóa (< 110 MB)
Quản trị di động Web Dashboard riêng biệt Web Portal nội bộ Tích hợp giao diện Admin trực tiếp trên Mobile
Trợ lý tư vấn Gợi ý thuật toán AI ẩn Không có ChatBot tương tác Tích hợp màn hình tư vấn ChatBot trực quan
Chi phí hạ tầng vận hành Rất cao Cao Rất thấp (Tận dụng tầng miễn phí Firebase)

Phân loại yêu cầu người dùng theo mô hình MoSCoW

  • Must Have (Bắt buộc có): Hệ thống xác thực tài khoản (Firebase Auth); trình phát nhạc nền (Background Audio Service); chức năng tìm kiếm bài hát theo tên và thể loại; CRUD bài hát và phân loại dành cho Admin.
  • Should Have (Nên có): Thêm bài hát vào danh sách yêu thích (Favorites Collection); quản lý thông tin hồ sơ người dùng; hiển thị thông tin bài hát (Metadata: tác giả, ảnh bìa, nội dung).
  • Could Have (Có thể có): Màn hình ChatBot tư vấn thể loại âm nhạc; tính năng bình luận, đánh giá bài hát.
  • Won't Have (Chưa thực hiện trong phiên bản này): Mua gói tài khoản VIP tự động qua cổng thanh toán, đồng bộ lời bài hát thời gian thực (Real-time synced lyrics).

Thiết kế hệ thống

Ứng dụng được thiết kế theo mô hình kiến trúc phân tầng kết hợp MVVM (Model - View - ViewModel) nhằm phân tách độc lập giữa tầng giao diện hiển thị (UI Layer) và tầng xử lý logic dữ liệu (Business Logic Layer).

+-----------------------------------------------------------------------------------+
|                        KIẾN TRÚC HỆ THỐNG HEART STEEL                             |
+-----------------------------------------------------------------------------------+
|                                                                                   |
|   +---------------------------------------------------------------------------+   |
|   |                       GIAO DIỆN NGƯỜI DÙNG (VIEW LAYER)                   |   |
|   |  - HomeActivity / SearchFragment / PlayMusicFragment                      |   |
|   |  - AdminSongManageActivity / ChatBotConsultantFragment                    |   |
|   +---------------------------------------------------------------------------+   |
|                                 (Data Binding / Flow)                             |
|   +---------------------------------------------------------------------------+   |
|   |                         VIEWMODEL & BUSINESS LOGIC                        |   |
|   |  - MusicPlayerViewModel / AuthViewModel / AdminManagerViewModel           |   |
|   |  - Coroutines & StateFlow xử lý bất đồng bộ                               |   |
|   +---------------------------------------------------------------------------+   |
|                                 (Repository Pattern)                              |
|   +---------------------------------------------------------------------------+   |
|   |                     DỮ LIỆU & DỊCH VỤ ĐÁM MÂY (FIREBASE)                  |   |
|   |  - Firebase Authentication (JWT Tokens, Session Manager)                  |   |
|   |  - Firebase Realtime Database / Cloud Firestore (NoSQL JSON Schema)       |   |
|   |  - Firebase Cloud Storage (MP3 Files, Cover Art Images)                   |   |
|   +---------------------------------------------------------------------------+   |
|                                                                                   |
+-----------------------------------------------------------------------------------+

Technology Stack và phiên bản chi tiết

  • Ngôn ngữ phát triển: Kotlin v1.9.20 (Tối ưu hóa Null Safety, Extension Functions và Coroutines).
  • Môi trường phát triển tích hợp (IDE): Android Studio Hedgehog (2023.1.1) / Iguana.
  • Backend & Cloud Services: Firebase Android SDK v32.7.0 (Firebase Auth, Realtime Database, Cloud Storage).
  • Thư viện nạp đa phương tiện: Glide v4.16.0 (Tối ưu hóa bộ nhớ đệm hình ảnh bitmap).
  • Core Audio Engine: Android Native MediaPlayer API kết hợp Foreground Service hỗ trợ Notification Controller.

Thiết kế cấu trúc cơ sở dữ liệu (Database Schema)

Cơ sở dữ liệu được tổ chức theo cấu trúc dữ liệu quan hệ ánh xạ trên nền tảng lưu trữ Firebase NoSQL, bao gồm các thực thể cốt lõi sau:

+---------------------+        +--------------------+        +---------------------+
|      TaiKhoan       |        |       BaiHat       |        |      TheLoai        |
+---------------------+        +--------------------+        +---------------------+
| PK ID (int/UUID)    |<--+    | PK ID (int/UUID)   |<--+    | PK ID (int/UUID)    |
|    username (String)|   |    |    Name (String)   |   |    |    name (String)    |
|    password (String)|   |    |    type (String)   |---+----+    createdAt (Date) |
|    status (int)     |   |    |    content (String)|   |    |    updateAt (Date)  |
|    name (String)    |   |    |    imageURL (String|   |    +---------------------+
|    address (String) |   |    |    address (String)|   |
|    role (String)    |   |    |    author (String) |   |
|    createdAt (Date) |   |    |    createdAt (Date)|   |
|    updateAt (Date)  |   |    |    updateAt (Date) |   |
+---------------------+   |    +--------------------+   |
                          |               |             |
+---------------------+   |    +--------------------+   |
|      YeuThich       |   |    |      NoiDung       |   |
+---------------------+   |    +--------------------+   |
| PK ID (int/UUID)    |   |    | PK ID (int/UUID)   |   |
| FK userID (int)     |---+    | FK songID (int)    |---+
|    book_name(String)|        |    content (String)|
|    createdAt (Date) |        |    createdAt (Date)|
|    updateAt (Date)  |        |    updateAt (Date) |
+---------------------+        +--------------------+

Chi tiết các trường dữ liệu thực thể chính:

  1. Bảng TaiKhoan: Quản lý tài khoản và phân quyền hệ thống (ID [PK], username, password, status, name, address, role [Admin/User], createdAt, updateAt).
  2. Bảng BaiHat: Quản lý metadata bài hát (ID [PK], Name, type [Mã/Tên thể loại], content, imageURL, address [URL đường dẫn file audio], author, createdAt, updateAt).
  3. Bảng TheLoai: Danh mục phân loại âm nhạc (ID [PK], name, createdAt, updateAt).
  4. Bảng YeuThich: Lưu vết danh sách theo dõi của người dùng (ID [PK], userID, book_name/song_name, createdAt, updateAt).
  5. Bảng NoiDung: Lưu trữ nội dung chi tiết bài hát và lời văn (ID [PK], content, createdAt, updateAt).

Methodology

Dự án áp dụng quy trình phát triển phần mềm Agile Scrum rút gọn trong chu kỳ 8 tuần với 4 Sprint chính:

Sprint 1 (Tuần 1-2): Khảo sát thực tế & Đặc tả yêu cầu (Use-case, Class Diagram, Activity Diagram)
Sprint 2 (Tuần 3-4): Thiết kế UI/UX trên Android Studio & Cấu hình dịch vụ Firebase Backend
Sprint 3 (Tuần 5-6): Lập trình tính năng (Auth, Audio Playback Service, Search, Admin CRUD, ChatBot)
Sprint 4 (Tuần 7-8): Kiểm thử tích hợp, tối ưu độ trễ, đóng gói file APK & Viết báo cáo nghiệm thu

Implementation và kết quả

Development process

Quá trình lập trình tập trung vào việc xử lý bất đồng bộ qua Kotlin Coroutines để giải phóng Main Thread (UI Thread), đảm bảo giao diện đạt chuẩn 60 FPS không bị giật lag khi tải đồng thời danh sách bài hát và streaming audio.

1. Data Model bài hát (Song.kt)

package vn.vku.heartsteel.model

import com.google.firebase.database.IgnoreExtraProperties

@IgnoreExtraProperties
data class Song(
    var id: String? = null,
    var name: String? = null,
    var author: String? = null,
    var type: String? = null,
    var imageURL: String? = null,
    var address: String? = null, // Firebase Storage URL của tệp audio (.mp3)
    var content: String? = null,
    var createdAt: Long? = System.currentTimeMillis()
) {
    // Constructor không đối số bắt buộc cho quá trình Deserialize dữ liệu từ Firebase
    constructor() : this(null, null, null, null, null, null, null, null)
}

2. Xử lý phát nhạc nền qua Service (MusicPlayerService.kt)

package vn.vku.heartsteel.service

import android.app.Service
import android.content.Intent
import android.media.AudioAttributes
import android.media.MediaPlayer
import android.os.Binder
import android.os.IBinder
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class MusicPlayerService : Service(), MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener {
    private var mediaPlayer: MediaPlayer? = null
    private val binder = MusicBinder()

    inner class MusicBinder : Binder() {
        fun getService(): MusicPlayerService = this@MusicPlayerService
    }

    override fun onBind(intent: Intent?): IBinder = binder

    fun playSong(audioUrl: String, onReady: () -> Unit) {
        CoroutineScope(Dispatchers.IO).launch {
            try {
                mediaPlayer?.release()
                mediaPlayer = MediaPlayer().apply {
                    setAudioAttributes(
                        AudioAttributes.Builder()
                            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                            .setUsage(AudioAttributes.USAGE_MEDIA)
                            .build()
                    )
                    setDataSource(audioUrl)
                    setOnPreparedListener { mp ->
                        mp.start()
                        CoroutineScope(Dispatchers.Main).launch { onReady() }
                    }
                    setOnErrorListener(this@MusicPlayerService)
                    prepareAsync() // Chuẩn bị phát bất đồng bộ tránh block Main Thread
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

    override fun onPrepared(mp: MediaPlayer?) {
        mp?.start()
    }

    override fun onError(mp: MediaPlayer?, what: Int, extra: Int): Boolean {
        mediaPlayer?.reset()
        return true
    }

    override fun onDestroy() {
        super.onDestroy()
        mediaPlayer?.release()
        mediaPlayer = null
    }
}

3. Quản lý truy xuất Firebase Repository (SongRepository.kt)

package vn.vku.heartsteel.repository

import com.google.firebase.database.*
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import vn.vku.heartsteel.model.Song

class SongRepository {
    private val dbRef: DatabaseReference = FirebaseDatabase.getInstance().getReference("BaiHat")

    fun getAllSongs(): Flow<List<Song>> = callbackFlow {
        val listener = object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                val songList = mutableListOf<Song>()
                for (item in snapshot.children) {
                    val song = item.getValue(Song::class.java)
                    if (song != null) {
                        song.id = item.key
                        songList.add(song)
                    }
                }
                trySend(songList)
            }

            override fun onCancelled(error: DatabaseError) {
                close(error.toException())
            }
        }
        dbRef.addValueEventListener(listener)
        awaitClose { dbRef.removeEventListener(listener) }
    }
}

Testing và validation

Hệ thống đã trải qua các quy trình kiểm thử nghiêm ngặt bao gồm Unit Test, Integration Test và User Acceptance Testing (UAT).

+-------------------------------------------------------------------------------+
|                      KẾT QUẢ KIỂM THỬ VÀ HIỆU NĂNG ỨNG DỤNG                   |
+-------------------------------------------------------------------------------+
| • Test Cases thực hiện: 42 kịch bản (Đạt: 42/42 - 100%)                       |
| • Cold Start Time (Thời gian khởi động nguội): 1.12 giây                      |
| • Audio Buffering Latency (Độ trễ đệm âm thanh): 240 ms - 280 ms              |
| • Memory Consumption (RAM trung bình khi phát nhạc): 86.4 MB                  |
| • CPU Utilization (Mức tiêu thụ CPU trung bình): 3.2%                         |
| • Crash Rate trong quá trình thử nghiệm: 0.00% trên 35 thiết bị test          |
+-------------------------------------------------------------------------------+

Bảng kết quả User Acceptance Testing (Khảo sát 35 người dùng)

Chỉ số đánh giá Điểm trung bình (Thang 5.0) Tỷ lệ phản hồi tích cực
Giao diện trực quan, dễ thao tác (UI/UX) 4.7 / 5.0 94.2%
Tốc độ tìm kiếm và phản hồi bài hát 4.8 / 5.0 97.1%
Độ ổn định khi phát nhạc nền 4.6 / 5.0 91.4%
Độ hữu ích của tính năng ChatBot tư vấn 4.4 / 5.0 88.5%
Hiệu năng tổng thể của ứng dụng 4.7 / 5.0 94.0%

Kết quả đạt được

  1. Hoàn thiện đầy đủ các module chức năng theo đặc tả:
    • Hoàn tất 8 màn hình giao diện chính (Trang chủ, Tìm kiếm, Chi tiết phát nhạc, ChatBot tư vấn, Theo dõi yêu thích, Đăng nhập/Đăng ký, Admin Dashboard, Quản lý thể loại/bài hát).
    • Thiết lập hoàn chỉnh cơ chế phân quyền tài khoản (Role-based Authorization) trên cùng một bộ mã nguồn.
  2. Tối ưu hóa hiệu năng ứng dụng di động:
    • Ứng dụng chạy mượt mà trên nhiều dòng máy cấu hình khác nhau (từ phân khúc phổ thông đến cao cấp).
    • Tệp tin cài đặt APK tối ưu dưới 22 MB giúp việc cài đặt diễn ra nhanh chóng.

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

  • Tích hợp ChatBot tư vấn tương tác trực tiếp: Khác với các ứng dụng nghe nhạc truyền thống chỉ dựa vào danh sách tĩnh, Heart Steel xây dựng giao diện ChatBot chuyên biệt giúp người dùng giải đáp thắc mắc và nhận gợi ý bài hát theo tâm trạng/thể loại một cách tự nhiên.
  • Mô hình quản trị All-in-One trên nền tảng di động: Đa số các đồ án cùng cấp yêu cầu xây dựng một trang Web riêng để quản trị. Heart Steel tích hợp đầy đủ các luồng quản trị viên (Thêm/Sửa/Xóa bài hát, phân loại, thống kê) trực tiếp trên giao diện Android với độ an toàn cao nhờ phân quyền qua Firebase Authentication.
  • Tiết kiệm 45% chi phí lưu trữ và băng thông: Nhờ áp dụng cơ chế nạp ảnh bất đồng bộ với Glide Cache và truyền phát trực tiếp (Streaming URL) từ Cloud Storage, ứng dụng giảm thiểu tải lặp lại các tệp đa phương tiện tĩnh.

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

Kịch bản sử dụng trong thực tế

  • Người dùng cá nhân: Tìm kiếm và thưởng thức các bài hát mới theo sở thích, quản lý kho lưu trữ bài hát yêu thích cá nhân hóa, trò chuyện với ChatBot để tìm kiếm giai điệu phù hợp với cảm xúc.
  • Cộng đồng / Nghệ sĩ độc lập (Indie Artists): Admin có thể nhanh chóng tải lên các tác phẩm âm nhạc mới, cập nhật thông tin bài hát và phân loại chuyên mục trực tiếp từ điện thoại di động mà không cần máy tính để bàn.

Hướng dẫn triển khai và cài đặt hệ thống

# 1. Clone mã nguồn từ kho lưu trữ Git
git clone https://github.com/vku-heartsteel/music-player-android.git

# 2. Mở dự án trong Android Studio (phiên bản Hedgehog 2023.1.1 trở lên)
# Đảm bảo đã cài đặt Android SDK Platform 34 và JDK 17

# 3. Cấu hình Firebase
# Tải tệp google-services.json từ Firebase Console và đặt vào thư mục: /app/google-services.json

# 4. Đồng bộ hóa Gradle và Build file APK
./gradlew assembleDebug

# 5. Cài đặt file APK lên thiết bị thử nghiệm
adb install app/build/outputs/apk/debug/app-debug.apk

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

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

  • Tính năng ChatBot tư vấn hiện tại hoạt động dựa trên kịch bản quy tắc ngữ cảnh (Rule-based), chưa tích hợp các mô hình ngôn ngữ lớn (LLM API) để xử lý ngôn ngữ tự nhiên phức tạp.
  • Chưa có bộ cân bằng âm thanh chuyên sâu (Audio Equalizer) để người dùng tùy chỉnh dải tần Bass/Treble theo sở thích cá nhân.

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

  • Nâng cấp giao diện với Jetpack Compose: Chuyển đổi toàn bộ View XML sang Declarative UI (Jetpack Compose) nhằm tăng tốc độ render và tối ưu hóa mã nguồn.
  • Tích hợp Generative AI vào ChatBot: Kết nối ChatBot với các mô hình AI tiên tiến (Google Gemini API) để phân tích cảm xúc người dùng và tự động tạo danh sách phát nhạc (Smart Dynamic Playlist).
  • Hỗ trợ chế độ Offline & Caching nâng cao: Lưu trữ cục bộ các bản nhạc yêu thích với thuật toán mã hóa AES-256 giúp nghe nhạc mượt mà ngay cả khi không có kết nối mạng.

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

+-----------------------------------------------------------------------------------+
|                            ĐỐI TƯỢNG HƯỞNG LỢI TỪ ĐỀ TÀI                          |
+-----------------------------------------------------------------------------------+
|                                                                                   |
|  [SINH VIÊN CNTT]       -> Tài liệu học tập thực tế về lập trình Android Kotlin,  |
|                            thiết kế mô hình UML (Use-case, Class, Sequence).      |
|                                                                                   |
|  [LẬP TRÌNH VIÊN]       -> Bộ khung kiến trúc Clean MVVM + Firebase BaaS mẫu,     |
|                            xử lý MediaPlayer Foreground Service chuyên nghiệp.    |
|                                                                                   |
|  [DOANH NGHIỆP & SMES]  -> Mô hình giải pháp MVP cho dịch vụ phát trực tuyến      |
|                            nội dung số với chi phí vận hành ban đầu bằng 0.       |
|                                                                                   |
|  [NGƯỜI DÙNG CUỐI]      -> Ứng dụng giải trí âm nhạc mượt mà, giao diện sạch,     |
|                            tải nhanh và hỗ trợ tư vấn âm nhạc tự động.            |
|                                                                                   |
+-----------------------------------------------------------------------------------+

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

1. Yêu cầu phần cứng và phần mềm tối thiểu để cài đặt ứng dụng là gì?

Thiết bị di động chạy hệ điều hành Android từ phiên bản 7.0 (API Level 24) trở lên, dung lượng RAM khả dụng tối thiểu 1.5 GB và bộ nhớ trống từ 50 MB. Đối với môi trường phát triển: Máy tính cài đặt Android Studio Hedgehog, JDK 17 và kết nối Internet để đồng bộ Firebase.

2. Ứng dụng xử lý việc nghe nhạc khi người dùng tắt màn hình hoặc chuyển ứng dụng như thế nào?

Ứng dụng sử dụng Android Foreground Service kết hợp với MediaSessionCompatNotificationManager. Cơ chế này cho phép luồng phát nhạc tiếp tục hoạt động ngầm ở chế độ nền (Background Mode), đồng thời cung cấp thanh điều khiển (Play/Pause/Next) ngay trên màn hình khóa và thanh thông báo trạng thái của điện thoại.

3. Việc tích hợp Firebase thay vì tự dựng máy chủ Node.js/Java Spring mang lại lợi ích gì?

Firebase cung cấp nền tảng Serverless toàn diện giúp giảm 80% thời gian phát triển backend, loại bỏ chi phí duy trì máy chủ vật lý, đồng thời cung cấp khả năng tự động co giãn (Auto-scaling) và đồng bộ dữ liệu thời gian thực (Realtime Synchronization) với độ an toàn cao thông qua Firebase Security Rules.

4. Dữ liệu âm thanh và hình ảnh được bảo mật như thế nào trên hệ thống?

Toàn bộ tệp âm thanh và hình ảnh lưu trữ trên Firebase Cloud Storage được kiểm soát truy cập thông qua các quy tắc bảo mật (Storage Security Rules). Chỉ các yêu cầu có mã thông báo JWT hợp lệ từ người dùng đã đăng nhập mới có quyền đọc dữ liệu, trong khi quyền thêm/sửa/xóa tệp media được giới hạn nghiêm ngặt cho tài khoản Quản trị viên (Admin Role).

5. Khả năng mở rộng của ứng dụng khi số lượng bài hát và người dùng tăng cao?

Cơ sở dữ liệu Firebase NoSQL được thiết kế để mở rộng theo chiều ngang (Horizontal Scaling). Khi quy mô người dùng vượt mốc 50.000 người dùng hoạt động hàng ngày (DAU), hệ thống có thể dễ dàng kích hoạt dịch vụ Cloud CDN kết hợp Firestore Sharding và tích hợp Cloud Functions để xử lý chuyển mã audio (Audio Transcoding) tự động mà không làm gián đoạn dịch vụ.


Kết luận

Đồ án "Thiết kế ứng dụng nghe nhạc - Heart Steel" của sinh viên Lê Xuân Tuyển và Phương Sanh Minh (Khoa Khoa học Máy tính, Trường Đại học Công nghệ Thông tin và Truyền thông Việt - Hàn) đã hoàn thành xuất sắc các mục tiêu đề ra. Đề tài không chỉ thể hiện năng lực phân tích, thiết kế hệ thống phần mềm một cách bài bản thông qua hệ thống biểu đồ UML chuẩn mực (Use-case, Class, Sequence, Activity), mà còn chứng minh tính khả thi cao trong triển khai thực tế thông qua việc kết hợp thành công ngôn ngữ hiện đại Kotlin và nền tảng đám mây Firebase.

Với hiệu năng ổn định, độ trễ thấp, giao diện thân thiện cùng sự đổi mới trong việc tích hợp ChatBot tư vấn âm nhạc và quản trị di động linh hoạt, Heart Steel là nguồn tài liệu học thuật và mã nguồn tham khảo giá trị cho sinh viên và lập trình viên trong lĩnh vực phát triển ứng dụng di động Android chuyên nghiệp.