Báo cáo đồ án 1: Xây dựng phần mềm chat (Full) - Sinh viên ĐH CNTT TPHCM

Tham khảo báo cáo đồ án 1 xây dựng phần mềm chat đầy đủ. Sử dụng Flutter và NodeJS, có chức năng chat real-time, video call, quản lý nhóm.

Chuyên ngành

Kỹ thuật phần mềm

Người đăng

Ẩn danh

Thể loại

Báo cáo đồ án

2022

127
0
0

Phí lưu trữ

35 Point

Tóm tắt

I. Giới thiệu về Đồ án Xây dựng App Chat bằng Flutter NodeJS

Đồ án Xây dựng App Chat bằng Flutter & NodeJS là một dự án học thuật tiêu biểu tại Trường Đại học Công nghệ Thông tin, Đại học Quốc gia TP.HCM. Trong bối cảnh Internet trở thành yếu tố không thể thiếu trong cuộc sống hiện đại, nhu cầu trao đổi thông tin qua ứng dụng chat đã tăng đột biến. Đặc biệt, sau đại dịch, phần mềm chat thời gian thực đóng vai trò quan trọng trong giao tiếp công việc và cá nhân. Đồ án này hướng tới xây dựng một ứng dụng chat Android hoàn chỉnh với các tính năng hiện đại, giúp người dùng trao đổi thông tin một cách hiệu quả và an toàn. Các sinh viên thực hiện đã dành 4 tháng (từ tháng 9 đến tháng 12 năm 2022) để nghiên cứu, phát triển và hoàn thiện sản phẩm này dưới sự hướng dẫn của ThS. Trần Thị Hồng Yến.

1.1. Mục tiêu của Đồ án Chat Flutter NodeJS

Mục tiêu chính của đồ án là giúp sinh viên nắm vững công nghệ FlutterNodeJS trong phát triển ứng dụng di động. Nhóm tập trung vào việc hiểu sâu về State Management BloC, kiến trúc ứng dụng hiện đại và các dịch vụ backend thời gian thực. Đồng thời, dự án nhằm xây dựng một phần mềm chat chuyên nghiệp với giao diện thân thiện, tính năng đa dạng và hiệu suất cao. Qua đó, sinh viên có thể ứng dụng những kiến thức này vào các dự án thực tế trong tương lai.

1.2. Nhu cầu và bối cảnh phát triển

Sự bùng nổ của smartphone và nền tảng Android tạo cơ hội phát triển ứng dụng mobile chat đa dạng. Các ứng dụng như Facebook Messenger, Telegram và Zalo đã chứng minh tính khả thi của mô hình này. Đồ án này khảo sát thực trạng các ứng dụng chat trên thị trường để xác định yêu cầu chức năng phù hợp, từ đó phát triển một sản phẩm có tính cạnh tranh cao với tính năng chat thời gian thực và trải nghiệm người dùng tốt.

II. Công nghệ và Stack Kỹ thuật sử dụng

Đồ án Xây dựng App Chat sử dụng một stack công nghệ hiện đại gồm Flutter cho phía mobile client và NodeJS cho backend. Flutter được lựa chọn vì khả năng phát triển ứng dụng đa nền tảng hiệu quả, với giao diện Material Design thẩm mỹ cao. Phía backend, NodeJS cung cấp API RESTful nhanh chóng và có khả năng xử lý kết nối thời gian thực tốt. Để quản lý trạng thái ứng dụng, nhóm áp dụng Pattern BloC giúp code dễ bảo trì và mở rộng. Firebase được tích hợp để xử lý tin nhắn real-time, xác thực người dùnglưu trữ dữ liệu. Bên cạnh đó, MongoDB là cơ sở dữ liệu chính, Swagger được sử dụng cho tài liệu API, và GitHub quản lý source code trong suốt quá trình phát triển.

2.1. Frontend Flutter và Material Design

Flutter là framework cross-platform cho phép phát triển ứng dụng Android từ một codebase duy nhất. Sử dụng Material Design, giao diện ứng dụng chat được tối ưu hóa cho trải nghiệm người dùng tốt nhất. BloC Pattern được áp dụng để quản lý trạng thái ứng dụng một cách hiệu quả, giúp code modular, dễ test và bảo trì. Điều này cho phép nhóm phát triển các tính năng phức tạp như chat thời gian thựcquản lý danh bạ một cách linh hoạt.

2.2. Backend NodeJS Firebase và MongoDB

NodeJS cung cấp runtime JavaScript mạnh mẽ cho phía server, cho phép xây dựng API RESTful hiệu suất cao. Firebase được tích hợp để xử lý gửi tin nhắn thời gian thực, xác thực người dùng an toàn và lưu trữ dữ liệu đám mây. MongoDB đóng vai trò là cơ sở dữ liệu NoSQL linh hoạt, phù hợp với cấu trúc dữ liệu không cố định của ứng dụng chat. Swagger được sử dụng để tài liệu hóa API một cách rõ ràng, giúp dễ dàng bảo trì và mở rộng.

III. Các Tính năng Chính của Ứng dụng Chat

Ứng dụng chat được xây dựng với nhiều tính năng toàn diện để đáp ứng nhu cầu giao tiếp hiện đại. Tính năng xác thực người dùng bao gồm đăng nhập, đăng ký và quên mật khẩu với bảo mật cao. Quản lý hồ sơ người dùng cho phép cập nhật thông tin cá nhân, ảnh đại diện và trạng thái. Tính năng chat thời gian thực là inti của ứng dụng, hỗ trợ gửi tin nhắn tức thời với độ trễ tối thiểu. Quản lý bạn bè cho phép người dùng tìm, thêm và quản lý danh sách liên hệ. Quản lý nhóm chat hỗ trợ tạo và quản lý nhóm trò chuyện đa người. Đặc biệt, tính năng video call cho phép thực hiện cuộc gọi video giữa hai người dùng một cách đơn giản.

3.1. Tính năng Xác thực và Quản lý Tài khoản

Hệ thống xác thực người dùng được xây dựng với bảo mật cao, hỗ trợ đăng nhập bằng tên đăng nhập/email và mật khẩu. Tính năng đăng ký cho phép người dùng mới tạo tài khoản một cách đơn giản. Quên mật khẩu sử dụng email xác minh để đặt lại mật khẩu an toàn. Quản lý hồ sơ cho phép người dùng cập nhật thông tin cá nhân, ảnh đại diện, và trạng thái online. Tất cả dữ liệu được mã hóa trước khi lưu trữ trên MongoDB.

3.2. Chat Thời gian Thực và Quản lý Nhóm

Chat thời gian thực là tính năng cốt lõi, sử dụng WebSocket hoặc Firebase Realtime Database để đồng bộ tin nhắn ngay lập tức. Người dùng có thể gửi tin nhắn text, chia sẻ hình ảnh, và xem trạng thái đã đọc. Quản lý nhóm chat cho phép tạo nhóm, thêm/xóa thành viên, đặt tên nhóm và quản lý quyền hạn. Tính năng video call cho phép thực hiện cuộc gọi video 1-1 với chất lượng tốt, dựa trên WebRTC hoặc dịch vụ của Firebase.

IV. Kết quả Đạt được và Hướng phát triển Tương lai

Sau 4 tháng phát triển, nhóm sinh viên đã thành công hoàn thành đồ án với toàn bộ tính năng chat cơ bảnnâng cao. Ứng dụng Android được xây dựng với giao diện thân thiện, hiệu suất ổn định và trải nghiệm người dùng tốt. Các sinh viên đã nắm vững công nghệ FlutterNodeJS, hiểu rõ về State Management BloCkiến trúc ứng dụng hiện đại. Phần mềm chat đáp ứng đầy đủ các yêu cầu về giao diệnchức năng, sẵn sàng mở rộng và phát triển thêm. Dự án này tạo tiền đề vàng cho đồ án 2, nơi có thể bổ sung các tính năng như tìm kiếm tin nhắn, mã hóa end-to-end, hỗ trợ iOS, hoặc phát triển web client.

4.1. Thành tựu và Kết quả Đạt được

Ứng dụng chat hoàn chỉnh đã được phát triển thành công, hỗ trợ Android với tính năng chat thời gian thực, video call 1-1, quản lý bạn bèquản lý nhóm. Codebase tuân theo best practices với cấu trúc rõ ràng, comment chi tiết, và tài liệu API đầy đủ. Kiểm thử chức năng được thực hiện toàn diện trên các thiết bị Android thực tế. Sinh viên đã nắm vững công nghệ mới, không chỉ về công nghệ Flutter mà còn về quản lý dự án, làm việc nhómgiải quyết vấn đề thực tế.

4.2. Hướng Phát triển và Mở rộng Tương lai

Đồ án 2 có thể mở rộng với tính năng tìm kiếm tin nhắn nâng cao, mã hóa end-to-end bảo vệ quyền riêng tư, và hỗ trợ iOS để phát triển cross-platform hoàn toàn. Có thể phát triển web client sử dụng React hoặc Vue.js cho người dùng web. Bổ sung tính năng chia sẻ tệp, voice message, emoji và sticker, và dark mode. Tối ưu hóa hiệu suất, độ bảo mật và thêm tính năng quản trị viên để quản lý người dùng và nhóm hiệu quả hơn.

28/12/2025

Trích đoạn nội dung tài liệu

CHƯƠNG 1: GIỚI THIỆU CHUNG 1. Lý do chọn đề tài. Hiện nay, Internet đã trở thành một phần không thể thiếu trong cuộc sống của chúng ta. Internet hiện hữu ở mọi mặt trong xã hội, ảnh hưởng hoàn toàn đến cách chúng ta sống, bao gồm việc mua sắm, tìm hiểu thông tin, phương pháp học tập, làm việc,… và đặc biệt là cách chúng ta giao tiếp.

Trước thời kỳ Internet, chúng ta thông thường cần phải gặp trực tiếp, gọi điện thoại hoặc gửi thư để có thể trao đổi thông tin cho nhau. Mỗi cách trong ba cách trên đều có điểm lợi và hại, tỉ như việc gặp trực tiếp cần phải sắp xếp thời gian phù hợp cho cả hai, hay là gửi thư sẽ tốn rất nhiều thời gian,. Sau khi Internet phổ biến, Chat và Video call trở thành phương tiện giao tiếp chính trong cuộc sống của chúng ta, chúng ta có thể Chat mọi lúc và mọi nơi, chỉ cần có một chiếc điện thoại và Internet, chúng ta cũng có thể lưu trữ thông tin bởi vì mọi nội dung Chat của chúng ta sẽ được lưu lại, hơn nữa, chúng ta có thể trao đổi thông tin với nhiều người hơn, thông qua tính năng Group Chat. Khi chúng ta cần trao đổi trực tiếp, chúng ta có thể Video call mà không cần phải sắp xếp thời gian.

Những lý do này là lý do khiến cho việc giao tiếp ngày càng dễ dàng và nhanh chóng hơn. Bên cạnh đó, chúng ta vừa trải qua đại dịch Covid. Trong quá trình chống lại đại dịch, việc phong tỏa, làm việc Online tại nhà đã trở nên phổ biến và thay đổi nhận thức của chúng ta về cách giao tiếp trong công việc và cuộc sống. Nhu cầu trao đổi thông tin qua Internet ngày càng trở nên thiết yếu.

Đó là lý do nhóm quyết định xây dựng một phần mềm Chat nhằm giúp việc trao đổi thông tin qua Chat và Video call trở nên dễ dàng, thuận tiện hơn. Phạm vi nghiên cứu. - Các bài toán về hệ thống thời gian thực, Full-text search và quản lý người dùng. - Phần mềm CS Chat App là phần mềm Chat được dựa trên công nghệ Flutter cho giao diện Mobile và NodeJS, ExpressJS cho phần Backend.

16 - Chức năng Video call được nhóm tự xây dựng hoàn toàn dựa trên công nghệ tự do và mã nguồn mở WebRTC. - Chức năng Realtime Chat được nhóm tự xây dựng hoàn toàn dựa trên thư viện Socket IO. Đối tượng nghiên cứu. Các công nghệ: - Ngôn ngữ lập trình: Dart, TypeScript.

- Framework: Flutter, ExpressJS.IO, Web RTC, Firebase. Đối tượng trong phạm vi đề tài hướng đến: - Người dùng có nhu cầu trao đổi thông tin, thực hiện Video call qua phần mềm. Phương pháp nghiên cứu. - Nghiên cứu từ các ứng dụng hiện có trên thị trường, quan sát và rút ra những ưu, nhược điểm của các ứng dụng đó (Messenger, Zalo, Telegram,…).

- Tìm hiểu các công nghệ liên quan đến Chat, thử nghiệm và chọn ra những công nghệ phù hợp nhất với khả năng của nhóm. - Tham khảo ý kiến của giảng viên hướng dẫn để đạt được kết quả tốt nhất cho đề tài. 17 CHƯƠNG 2: CÔNG NGHỆ SỬ DỤNG 2. Giới thiệu Hình 2.1 Logo flutter Flutter là một UI framework di động mã nguồn mở và hoàn toàn miễn phí do Google phát triển, và được công bố vào năm 2015 nhưng đến tháng 5 năm 2017 mới chính thức phát hành.

Flutter cho phép các nhà phát triển có thể tạo ra các bộ giao diện native chất lượng cao trong thời gian rất ngắn. Ngoài ra, việc sử dụng Flutter cho phép các nhà phát triển với một Codebase có thể phát triển ứng dụng có trải nghiệm tốt trên đa nền tảng bao gồm: Mobile (Android và IOS), Web, Desktop App, Linux,. giúp cho các Team phát triển có thể tiết kiệm nhân lực và chi phí. Flutter có 2 phần quan trọng: + SDK (Software Development Kit): là một bộ tập hợp các công cụ hỗ trợ các nhà phát triển bao gồm công cụ biên dịch Code thành mã máy Native.

18 + Framework: Flutter cung cấp một số lượng lớn các Widget (Button, ListView, Text Input, ScrollBar,.), giúp cho các nhà phát triển có thể xây dựng giao diện nhanh chóng, tiện lợi, đẹp mắt. Ưu điểm: - Phát triển giao diện đẹp, Animation đẹp mắt: Flutter cung cấp số lượng lớn các Widget, phong cách chuẩn Material và Cupertino, cho phép các nhà phát triển có thể tùy biến lại phụ thuộc vào nhu cầu của mình, từ đó giúp các nhà phát triển xây dựng giao diện nhanh chóng, tiện lợi. - Hot reload: Flutter được viết dựa trên ngôn ngữ Dart, một ngôn ngữ lập trình hướng đối tượng có hỗ trợ JIT (Just in time), từ đó cho phép framework này có thể cung cấp cơ chế hot reload. Cơ chế này hoạt động bằng cách đưa những File Source Code đã được cập nhật, chỉnh sửa vào một máy ảo Virtual Machine (VM) của Dart.

Sau khi VM được cập nhật thì Flutter sẽ tự động tái xây dựng các Widget Tree và cho nhà phát triển xem được sự thay đổi trong app sau khi cập nhật Code mới. Với cơ chế này, các nhà phát triển có thể cập nhật ứng dụng nhanh chóng ngay sau khi code xong mà không phải đợi build lại App. - Native Performance: Flutter giao tiếp gần như là trực tiếp với Native mà không phải thông qua một “cái cầu” như đối thủ của nó là React Native, do đó Flutter cung cấp một hiệu năng tiệm cận với các Native app. Sở dĩ có thể làm được như này là do cơ chế AOT (Ahead of Time) giúp cho biên dịch nhanh hơn, chính xác và Native code.

Nhược điểm: - Render UI: Render UI được nhóm phát triển viết lại hoàn toàn mà không liên quan đến UI của Native app điều này tạo ra sự đánh đổi khi đồng nhất được giao diện trên các nền tảng, phiên bản nhưng lại sử dụng Memory lớn. 19 - Phải học ngôn ngữ Dart: Flutter được viết dựa trên ngôn ngữ lập trình hướng đối tượng Dart, vốn là ngôn ngữ rất ít được sử dụng trước thời điểm Flutter ra mắt. Tuy đây không phải một vấn đề quá lớn nhưng cũng là rào cản của Flutter so với React Native vốn được viết dựa trên ngôn ngữ lập trình JavaScript - một ngôn ngữ rất phổ biến ở thời điểm hiện tại. - Flutter chỉ mới được phát hành chính thức gần đây và vẫn còn đang được tiếp tục phát triển do đó vẫn còn một số API vẫn chưa được ổn định và có thay đổi lớn qua các bản cập nhập.

Tuy được giới thiệu có thể phát triển đa nền tảng, nhưng Flutter hiện tại hỗ trợ chưa tốt trong việc phát triển trên nền tảng Web, Linux, Desktop App. Bloc - State Management. Giới thiệu về Bloc Hình 2.2 Logo Bloc Bloc (viết tắt của Business Logic Component) là một thư viện giúp quản lý các State trong các ứng dụng của Flutter. Bloc được xây dựng dựa trên RxDart, với “event” là Input và “state” là Output.

Điểm độc đáo ở State Management này là thường người ta sẽ chia các Bloc thành các Component và mỗi Component chỉ quản lý duy nhất một 20 Business Logic, việc chia như này sẽ tránh ảnh hưởng, chồng chéo đến các Code Logic khác. Cũng giống như MVVM, MVC,. Bloc cũng là một Pattern với mục đích là tách Business Logic ra khỏi tầng UI tránh gộp chung thành một File, để sau này khi có nhu cầu mở rộng hay thay đổi Business Logic thì sẽ dễ dàng thay đổi hơn mà không ảnh hưởng đến tầng UI.3 Ví dụ về mô hình ba lớp của BLoC Trong một app Flutter, ta có thể chia thành 3 lớp như sau: 21 • Feature layer. Data Layer: đây là lớp thấp nhất trong ứng dụng, chịu trách nhiệm truy xuất dữ liệu thô từ các nguồn bên ngoài như API, Database,.

Các Packages ở trong tầng này phải độc lập, không phụ thuộc vào UI (Feature layer). Domain Layer: Tầng này như một cây cầu kết nối giữa 2 tầng là Feature Layer và Data Layer. Ở đây là nơi tổng hợp các data từ tầng Data Layer và tiến hành xử lý Logic để tầng Feature Layer có thể sử dụng được. Các thành phần trong tầng này được gọi là các Repository.

Feature Layer: Đây là tầng sẽ làm việc trực tiếp và thể hiện ra cho người dùng. Tầng này bao gồm các tính năng và các Business Logic của nó. Thường các nhà phát triển sẽ phân chia các chức năng sao cho chúng độc lập với nhau để có thể dễ dàng thêm, xóa, sửa mà không ảnh hưởng đến các tính năng khác trong phần mềm, cách đơn giản để thực hiện việc này là chia theo từng trang. Đối với mỗi tính năng, các State và Business logic sẽ được quản lý bởi Bloc.

Bloc sẽ tương tác với một hoặc nhiều Repository từ tầng Domain layer, đồng thời nó cũng sẽ nhận các Event từ UI và trả về các State để Render lại tầng UI. Giới thiệu Hình 2.4 Logo NodeJS - NodeJS là một môi trường thực thi JavaScript đa nền tảng mã nguồn mở - Node.js ra mắt vào năm 2009, bởi Ryan Dahl - Phần core của Node.js hầu hết được viết bằng C++. Chính vì thế mà tốc độ xử lý và hiệu năng khá cao. - Bên cạnh đó, Node.js còn tạo ra ứng dụng có tốc độ xử lý nhanh với thời gian thực.js cũng được áp dụng để tạo các sản phẩm có lượng truy cập lớn, mở rộng nhanh và đổi mới công nghệ.

hoặc tạo dự án Startup tiết kiệm thời gian nhất. - Những điểm mạnh của NodeJS bao gồm: • Bất đồng bộ và phát sinh sự kiện (Non-blocking and Event Driven): Tất các các APIs của thư viện Node.js đều bất đồng bộ (non- blocking), vì thế không cần đợi một API trả về dữ liệu. Server chuyển sang một API khác sau khi gọi nó và có cơ chế riêng để gửi 23 thông báo và nhận phản hồi về các hoạt động của Node.js và API đã gọi. • Tốc độ nhanh: Phần core phía dưới được viết gần như toàn bộ bằng C++ kết hợp Chrome V8 Engine nên tốc độ xử lý công việc của Node.js cực nhanh, nhưng vẫn đảm bảo được tính chuẩn xác.

• Đơn giản – Hiệu năng cao: Node.js sử dụng một mô hình luồng đơn luồng (single thread) và các sự kiện lặp (event-loop). Cơ chế sự kiện cho phép phía Server trả về phản hồi theo non-blocking, đồng thời tăng hiệu quả sử dụng. Các luồng đơn cung cấp dịch vụ cho nhiều request hơn hẳn Server truyền thống. Lý do sử dụng - Nodejs khá nhẹ nhưng lại hiệu quả nhờ vào cơ chế non-blocking I/O, chạy đa nền tảng trên Server và dùng Event-driven - Có thể phát triển NodeJS trên mọi nền tảng, bao gồm Windows, Linux, MacOS - Cộng đồng lập trình viên sử dụng NodeJs lớn và có nhiều thư viện - NodeJS có tốc độ xử lý nhanh, có thể chịu đựng được lượng lớn người dùng truy cập cùng thời điểm.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ