Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số, sự bùng nổ của các nền tảng mạng xã hội diện rộng (Public Social Networks) như Facebook, Instagram hay TikTok đã tái định hình phương thức giao tiếp toàn cầu. Tuy nhiên, theo các nghiên cứu về xã hội học truyền thông, việc tiếp nhận luồng dữ liệu khổng lồ với mức độ nhiễu thông tin (information noise) cao đang gây ra hiệu ứng "xa cách số" (digital alienation) ngay trong chính tế bào gia đình. Người dùng có xu hướng kết nối với hàng nghìn liên hệ bên ngoài nhưng lại thiếu đi một không gian số riêng tư, ấm cúng và chuyên biệt để sẻ chia với những người thân thiết nhất.

Vấn đề thực tiễn và bài toán đặt ra

Các ứng dụng nhắn tin đại trà hiện nay bộc lộ nhiều điểm nghẽn (pain points) khi áp dụng vào quy mô gia đình hoặc các cặp đôi:

  • Nhiễu loạn thông tin: Tin nhắn gia đình bị trôi lẫn giữa hàng trăm thông báo từ công việc, nhóm cộng đồng và quảng cáo.
  • Thiếu cơ chế biểu đạt trạng thái cảm xúc trực quan: Người dùng khó nắm bắt nhanh tâm trạng (mood/feeling) của người thân trong ngày nếu không chủ động nhắn tin hỏi thăm.
  • Lưu trữ kỷ niệm rời rạc: Hình ảnh, video và các dấu mốc thời gian (milestones) không được cấu trúc hóa theo dạng nhật ký gia đình (Family Diary), dẫn đến việc thất lạc dữ liệu quý giá theo thời gian.
  • Khoảng cách thế hệ trong trải nghiệm người dùng (UX): Giao diện của các mạng xã hội phổ biến quá phức tạp đối với người lớn tuổi trong gia đình.

Mục tiêu của đề tài

Khóa luận tốt nghiệp "Xây dựng ứng dụng kết nối và chia sẻ giữa các thành viên trong gia đình" do sinh viên Hồ Nguyên Bảo thực hiện dưới sự hướng dẫn của ThS. Lê Thanh Trọng tại Trường Đại học Công nghệ Thông tin – ĐHQG-HCM (2021) tập trung giải quyết triệt để các hạn chế trên với 5 mục tiêu trọng tâm:

  1. Thiết kế không gian mạng xã hội thu nhỏ (Micro-social Network): Đảm bảo tính bảo mật và biệt lập tuyệt đối cho các thành viên trong gia đình hoặc cặp đôi.
  2. Module Chia sẻ cảm nghĩ thời gian thực (Real-time Feeling Sharing): Cập nhật trạng thái tâm trạng tức thì kèm biểu tượng cảm xúc (Emoticons) và đồng bộ đa thiết bị.
  3. Module Phòng chat gia đình (Group Chat Room): Hỗ trợ truyền tải tin nhắn văn bản, hình ảnh, video và đính kèm ngữ cảnh cảm nghĩ.
  4. Module Nhật ký chung (Shared Family Diary): Lưu trữ và hiển thị dòng hồi ức theo trình tự thời gian hoặc chế độ hồi tưởng ngẫu nhiên.
  5. Module Đếm ngày bên nhau (Days Counter): Tự động tính toán số ngày gắn kết của gia đình hoặc cặp đôi.

Phương pháp tiếp cận và kết quả kỳ vọng

Giải pháp áp dụng kiến trúc Client-Server hiện đại, khai thác sức mạnh của React Native trên nền tảng di động Android và GraphQL API Gateway kết hợp Node.js/Express ở tầng máy chủ. Việc thay thế chuẩn REST truyền thống bằng GraphQL kết hợp giao thức WebSocket (GraphQL Subscriptions) giúp tối ưu hóa băng thông truyền tải mạng di động, loại bỏ hoàn toàn hiện tượng thừa/thiếu dữ liệu (Over-fetching / Under-fetching), đồng thời đảm bảo độ trễ cập nhật trạng thái dưới 100ms.

+-------------------------------------------------------------------------+
|                          PHẠM VI ĐỀ TÀI (SCOPE)                         |
+------------------------------------+------------------------------------+
| Bao gồm (In-Scope)                 | Giới hạn (Limitations)             |
+------------------------------------+------------------------------------+
| - Hệ điều hành Android             | - Chưa phát hành bản build iOS     |
| - Kết nối Internet thời gian thực  | - Yêu cầu thiết bị có Internet     |
| - Đối tượng: Gia đình, Cặp đôi     | - Chưa tích hợp Voice/Video call   |
| - Xác thực JWT & Mã hóa BCrypt     | - Chưa tích hợp E2EE mã hóa đầu cuối|
+------------------------------------+------------------------------------+

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ị trường cho thấy sự phân hóa rõ rệt giữa các ứng dụng nhắn tin đại trà và ứng dụng chuyên biệt cho gia đình/cặp đôi:

Tiêu chí phân tích Ứng dụng nhắn tin đại trà (Zalo, Messenger) Ứng dụng cặp đôi (Between, The Couple) Ứng dụng Kết nối Gia đình (Đề tài)
Không gian riêng tư Thấp (Dễ bị phân tâm bởi công việc/bạn bè) Cao (Chỉ dành riêng cho 2 người) Tuyệt đối (Tối ưu cho nhóm 2-10 thành viên)
Theo dõi cảm nghĩ (Moods) Không có hoặc chỉ là trạng thái tĩnh 24h Có biểu tượng cơ bản Trực quan hóa tức thì + Đồng bộ thời gian thực
Nhật ký gia đình (Diary) Lưu trữ dạng album ảnh lộn xộn Dạng dòng thời gian cá nhân Cấu trúc hóa theo ngày kỷ niệm + Xem ngẫu nhiên
Cơ chế đếm ngày Không hỗ trợ Có hỗ trợ Hỗ trợ cho cặp đôi và ngày lập gia đình
Công nghệ giao tiếp API REST API / Proprietary TCP REST API / HTTP Polling GraphQL Query/Mutation + WebSocket Subscriptions

Mô hình phân loại yêu cầu MoSCoW

  • Must-have (Bắt buộc): Đăng ký/đăng nhập xác thực qua JSON Web Token (JWT); Tạo và tham gia nhóm bằng mã mời (Invite Code); Cập nhật trạng thái cảm xúc (Emoticon/Text); Nhắn tin văn bản/hình ảnh/video thời gian thực; Đăng tải và hiển thị nhật ký gia đình.
  • Should-have (Nên có): Khôi phục mật khẩu qua Email (SMTP/Token); Đếm số ngày bên nhau; Xem nhật ký ngẫu nhiên (Flashback memories); Thông báo đẩy qua Firebase Cloud Messaging (FCM).
  • Could-have (Có thể có): Chỉnh sửa/xóa kỷ niệm nhật ký; Tải hình ảnh kỷ niệm về bộ nhớ cục bộ thiết bị.
  • Won't-have (Chưa thực hiện): Cuộc gọi thoại/video trực tiếp; Tích hợp ví điện tử chi tiêu chung gia đình.

Thiết kế hệ thống

Kiến trúc toàn hệ thống được xây dựng theo mô hình 3 tầng (3-Tier Architecture) phân tách rành mạch giữa giao diện người dùng, lớp xử lý logic trung gian và cơ sở dữ liệu quan hệ:

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

  • Mobile Client: React Native (v0.64+), Apollo Client (v3.3+), React Navigation (v5.x), NativeBase UI.
  • Backend Runtime & Framework: Node.js (v14.x LTS), Express.js (v4.17+), Apollo Server Express (v2.25+).
  • Real-time Engine: GraphQL Subscriptions, subscriptions-transport-ws, Socket.IO (v4.0+).
  • Database & ORM: Relational Database (MySQL 8.0 / PostgreSQL), Sequelize ORM.
  • Security & Utilities: bcryptjs (v2.4.3), jsonwebtoken (v8.5.1), nodemailer (v6.6.x), Firebase Admin SDK (v9.8.0).

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

Hệ thống quản lý dữ liệu thông qua 9 bảng chuẩn hóa với các mối quan hệ khóa ngoại (Foreign Keys) chặt chẽ:

+---------------+       +------------------+       +---------------+
|     Users     |1     *|   GroupDetails   |*     1|    Groups     |
|---------------|-------|------------------|-------|---------------|
| id (PK)       |       | id (PK)          |       | id (PK)       |
| Username      |       | groupId (FK)     |       | ownerId (FK)  |
| Password      |       | userId (FK)      |       | createdAt     |
| Email, Phone  |       | active (Boolean) |       | updatedAt     |
| avatar (FK)   |       | createdAt        |       +---------------+
+---------------+       +------------------+               |1
        |1                       |1                        |
        |                        |                         |*
        |*                       |*                +---------------+
+---------------+       +------------------+       |     Chats     |
|   Feelings    |       |      Diary       |       |---------------|
|---------------|       |------------------|       | id (PK)       |
| id (PK)       |       | id (PK)          |       | groupId (FK)  |
| userId (FK)   |       | groupId (FK)     |       | senderId (FK) |
| groupId (FK)  |       | userId (FK)      |       | text, image   |
| emoticonId(FK)|       | description      |       | video (FK)    |
| content, date |       | createdAt        |       | createdAt     |
+---------------+       +------------------+       +---------------+
  • Users: Lưu trữ danh tính người dùng (id, Username, Password mã hóa BCrypt, Name, Email, Phone, Birthday, avatar tham chiếu Medias.id).
  • Groups & GroupDetails: Quản lý không gian gia đình (ownerId, mã tham gia code, trạng thái active kiểm soát việc thành viên tham gia hoặc rời nhóm).
  • Feelings & Emoticons: Lưu trữ cảm nghĩ (userId, groupId, emoticonId, Content, createdAt). Bảng Emoticons quản lý tài nguyên ảnh tĩnh (imagePng) và ảnh động (imageGif).
  • Chats & Medias: Lưu tin nhắn đa phương tiện (text, image, video) giữa các thành viên.
  • Diary: Lưu bài viết nhật ký kỷ niệm gia đình kèm mô tả và mốc thời gian.
  • ResetTokens: Quản lý chuỗi mã xác thực khôi phục mật khẩu tạm thời kèm thời hạn hiệu lực (Exp).

Thiết kế giao diện lập trình ứng dụng (GraphQL Schema Definition)

Thay vì xây dựng hàng chục REST endpoints, hệ thống định nghĩa một GraphQL Schema duy nhất:

type User {
  id: ID!
  username: String!
  name: String!
  email: String!
  avatar: String
}

type Feeling {
  id: ID!
  user: User!
  emoticon: Emoticon!
  content: String
  createdAt: String!
}

type ChatMessage {
  id: ID!
  sender: User!
  groupId: ID!
  text: String
  mediaUrl: String
  createdAt: String!
}

type Query {
  getGroupFeelings(groupId: ID!): [Feeling!]!
  getChatHistory(groupId: ID!, limit: Int!, offset: Int!): [ChatMessage!]!
  getFamilyDiary(groupId: ID!, random: Boolean): [DiaryEntry!]!
}

type Mutation {
  sendFeeling(groupId: ID!, emoticonId: ID!, content: String): Feeling!
  sendChatMessage(groupId: ID!, text: String, mediaId: ID): ChatMessage!
  joinGroup(inviteCode: String!): Group!
}

type Subscription {
  feelingUpdated(groupId: ID!): Feeling!
  messageSent(groupId: ID!): ChatMessage!
}

Methodology và kế hoạch triển khai

Dự án áp dụng phương pháp luận phát triển phần mềm linh hoạt Agile/Scrum, phân bổ trong 8 giai đoạn Sprint (mỗi Sprint kéo dài 2 tuần) từ ngày 01/03/2021 đến 20/06/2021:

[Sprint 0: Nghiên cứu & Chọn đề tài] ---> [Sprint 1: Khảo sát & Product Backlog]
                                                       |
[Sprint 3: Module Nhóm & Cảm nghĩ]   <--- [Sprint 2: Thiết kế DB & Auth]
        |
        v
[Sprint 4: Chat Real-time & WebSocket] ---> [Sprint 5: Module Nhật ký & Kỷ niệm]
                                                       |
[Sprint 7: UAT, Hoàn thiện Báo cáo]   <--- [Sprint 6: Kiểm thử & Tối ưu hóa UI]

+------------------------------------------------------------------------------------+
|                         MA TRẬN ĐÁNH GIÁ VÀ GIẢM THIỂU RỦI RO                      |
+----------------------+-----------+-------------------------------------------------+
| Rủi ro kỹ thuật      | Mức độ    | Chiến lược giảm thiểu (Mitigation Strategy)     |
+----------------------+-----------+-------------------------------------------------+
| Mất kết nối WebSocket| Cao       | Tự động reconnect với Exponential Backoff; fallback|
| khi mạng di động yếu |           | cơ chế HTTP Polling khi WebSocket thất bại.     |
+----------------------+-----------+-------------------------------------------------+
| Tràn bộ nhớ trên máy | Trung bình| Áp dụng FlatList tối ưu hóa VirtualizedList, lazy|
| Android cấu hình yếu |           | loading hình ảnh và cache qua FastImage.        |
+----------------------+-----------+-------------------------------------------------+
| Lộ lọt dữ liệu nhóm  | Rất cao   | Middleware kiểm tra quyền sở hữu Token và đối   |
| gia đình riêng tư    |           | chiếu GroupID chặt chẽ ở tầng GraphQL Resolver.  |
+----------------------+-----------+-------------------------------------------------+

Implementation và kết quả

Development Process và hiện thực thuật toán

1. Thuật toán xác thực và bảo mật người dùng (BCrypt & JWT Authentication)

Mật khẩu người dùng được băm (hash) bằng giải thuật BCrypt với hệ số Salt Rounds = 10 trước khi ghi vào cơ sở dữ liệu. Khi đăng nhập thành công, máy chủ phát hành một JSON Web Token (JWT) có thời hạn (TTL) để máy khách gửi kèm trong Header Authorization: Bearer <token> ở mọi truy vấn GraphQL.

2. Xử lý sự kiện thời gian thực bằng GraphQL Subscription & PubSub Engine

Để giải quyết bài toán đồng bộ cảm xúc và tin nhắn tức thời giữa các thành viên, tầng điều khiển máy chủ sử dụng cơ chế xuất bản/đăng ký sự kiện (Publish/Subscribe pattern):

// Server-side: GraphQL Resolver cho tính năng chia sẻ cảm nghĩ
const { PubSub } = require('graphql-subscriptions');
const pubsub = new PubSub();
const FEELING_UPDATED = 'FEELING_UPDATED';

const resolvers = {
  Mutation: {
    sendFeeling: async (_, { groupId, emoticonId, content }, { currentUser, db }) => {
      if (!currentUser) throw new Error('Unauthenticated');
      
      // Kiểm tra user có thuộc group hay không
      const membership = await db.GroupDetails.findOne({
        where: { groupId, userId: currentUser.id, active: true }
      });
      if (!membership) throw new Error('Forbidden: Not a group member');

      // Ghi nhận cảm nghĩ vào Database
      const newFeeling = await db.Feelings.create({
        groupId,
        userId: currentUser.id,
        emoticonId,
        content,
        createdAt: new Date()
      });

      const feelingPayload = await db.Feelings.findByPk(newFeeling.id, {
        include: ['User', 'Emoticon']
      });

      // Phát tán dữ liệu real-time tới tất cả thành viên trong nhóm
      pubsub.publish(`${FEELING_UPDATED}_${groupId}`, { feelingUpdated: feelingPayload });
      
      return feelingPayload;
    }
  },
  Subscription: {
    feelingUpdated: {
      subscribe: (_, { groupId }) => pubsub.asyncIterator(`${FEELING_UPDATED}_${groupId}`)
    }
  }
};

3. Client-side Real-time Hook trên React Native

Ở tầng máy khách, ứng dụng đăng ký lắng nghe sự kiện từ máy chủ thông qua Apollo Client WebSocket Link:

// Client-side: React Native Component lắng nghe thay đổi cảm xúc
import React, { useEffect } from 'react';
import { View, Text, FlatList, StyleSheet } from 'react-native';
import { useSubscription, gql } from '@apollo/client';

const SUBSCRIBE_FEELINGS = gql`
  subscription OnFeelingUpdated($groupId: ID!) {
    feelingUpdated(groupId: $groupId) {
      id
      content
      user { name avatar }
      emoticon { imagePng }
    }
  }
`;

export const FamilyMoodScreen = ({ groupId }) => {
  const { data, loading } = useSubscription(SUBSCRIBE_FEELINGS, {
    variables: { groupId }
  });

  useEffect(() => {
    if (data?.feelingUpdated) {
      // Trigger UI animation và thông báo tức thì khi có thành viên đổi mood
      console.log('Member mood changed:', data.feelingUpdated.user.name);
    }
  }, [data]);

  return (
    <View style={styles.container}>
      <Text style={styles.headerTitle}>Tâm Trạng Gia Đình Hôm Nay</Text>
      {/* Render danh sách trạng thái các thành viên */}
    </View>
  );
};

const styles = StyleSheet.create({
  container: { flex: 1, backgroundColor: '#FAFAFA', padding: 16 },
  headerTitle: { fontSize: 18, fontWeight: 'bold', color: '#2C3E50' }
});

Testing và validation

Kiểm thử chức năng và độ bao phủ (Test Coverage)

Hệ thống trải qua 3 cấp độ kiểm thử: Unit Testing (Jest cho các hàm xử lý mã hóa, token, utility), Integration Testing (Supertest cho GraphQL Query/Mutation endpoints), và User Acceptance Testing (UAT).

+------------------------------------------------------------------------------------+
|                       KẾT QUẢ KIỂM THỬ TỔNG HỢP (TEST MATRIX)                      |
+--------------------------+------------+------------+---------------+---------------+
| Module kiểm thử          | Tổng số TC | Đạt (Pass) | Lỗi (Failed)  | Tỷ lệ thành công|
+--------------------------+------------+------------+---------------+---------------+
| Quản lý tài khoản & Auth | 16         | 16         | 0             | 100%          |
| Quản lý nhóm (Join/Leave)| 12         | 12         | 0             | 100%          |
| Cảm nghĩ (Feelings/Emoji)| 14         | 14         | 0             | 100%          |
| Tin nhắn Chat & Media    | 22         | 21         | 1 (Edge-case) | 95.4%         |
| Nhật ký & Đếm ngày       | 18         | 18         | 0             | 100%          |
| Tổng cộng                | 82         | 81         | 1             | 98.7%         |
+--------------------------+------------+------------+---------------+---------------+

Đánh giá hiệu năng thực nghiệm (Performance Benchmarks)

  • Thời gian phản hồi GraphQL Query trung bình: 42ms (mạng Wi-Fi nội bộ) và 118ms (mạng 4G LTE).
  • Độ trễ truyền tải tin nhắn WebSocket: 65ms từ khi ấn nút Gửi đến khi thiết bị khác nhận được event.
  • Thời gian nạp ảnh đại diện/nhật ký (Media loading): Giảm từ 1.8s xuống còn 320ms nhờ cơ chế nén ảnh trước khi tải lên và caching đa tầng.
  • Mức độ tiêu hao pin (Battery drain): Dưới 3.5% khi hoạt động liên tục trong 1 giờ (do tối ưu ngắt kết nối WebSocket khi ứng dụng chuyển sang Background và chuyển quyền thông báo sang Firebase Cloud Messaging).

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

  1. Mô hình kết nối chuyên biệt cho vi cộng đồng (Micro-community Focus): Thay vì mở rộng kết bạn không giới hạn, ứng dụng cô lập hoàn toàn luồng tương tác trong phạm vi gia đình hoặc cặp đôi, triệt tiêu 100% tình trạng spam quảng cáo và ô nhiễm thông tin.
  2. Cơ chế biểu đạt trạng thái cảm xúc theo ngữ cảnh (Contextual Mood Sharing): Cho phép người dùng thể hiện cảm nghĩ kèm Emoticon chỉ với 2 lần chạm, đồng thời có thể trích dẫn trực tiếp trạng thái cảm xúc đó vào phòng chat nhóm để bắt đầu cuộc hội thoại quan tâm.
  3. Cải tiến hiệu suất truyền tải với GraphQL Subscriptions: Tiết kiệm 35% dung lượng dữ liệu truyền tải so với việc gọi các REST API truyền thống nhờ loại bỏ hoàn toàn các trường dữ liệu dư thừa.
  4. Kiến trúc thông báo đẩy hỗn hợp (Hybrid Real-time Architecture): Sử dụng kết nối WebSocket song công (Full-duplex) khi ứng dụng ở Foreground để đạt tốc độ tức thời và chuyển sang Firebase Cloud Messaging (FCM) khi ở Background để tiết kiệm tối đa tài nguyên phần cứng thiết bị.
+------------------------------------------------------------------------------------+
|                 SO SÁNH ĐẶC TÍNH KỸ THUẬT VỚI CÁC GIẢI PHÁP TRƯỚC ĐÂY              |
+----------------------------+-----------------------+-------------------------------+
| Đặc tính                   | Kiến trúc REST cổ điển| Kiến trúc Đề tài (GraphQL+WS) |
+----------------------------+-----------------------+-------------------------------+
| Overhead Header mỗi gói tin| Cao (HTTP Headers lặp)| Rất thấp (Frame WebSocket tối |
|                            | lại liên tục)         | giản sau handshake)           |
+----------------------------+-----------------------+-------------------------------+
| Độ trễ nhận tin nhắn       | 1000ms - 3000ms       | < 80ms                        |
|                            | (HTTP Polling)        | (Event-driven PubSub)         |
+----------------------------+-----------------------+-------------------------------+
| Băng thông tiêu thụ trên 4G| 100% (Baseline)       | Giảm 35% - 42%                |
+----------------------------+-----------------------+-------------------------------+

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

Kịch bản ứng dụng thực tế

  • Gia đình nhiều thế hệ: Con cái đi học/đi làm xa dễ dàng cập nhật cảm nghĩ hàng ngày cho cha mẹ lớn tuổi theo dõi một cách trực quan thông qua các icon cảm xúc sinh động mà không cần gõ văn bản phức tạp.
  • Lưu giữ biên niên sử gia đình: Các bức ảnh kỷ niệm ngày sinh nhật, chuyến du lịch, ngày giỗ chạp được ghi chú và gom tụ vào một kho lưu trữ duy nhất, hỗ trợ chế độ xem ngẫu nhiên để gợi nhớ kỷ niệm đẹp.
  • Các cặp đôi yêu nhau: Theo dõi chính xác từng ngày gắn kết bên nhau (Day Counter) và chia sẻ không gian tâm sự ngọt ngào, tách biệt với các mối quan hệ xã giao bên ngoài.

Hướng dẫn triển khai và yêu cầu hệ thống

+------------------------------------------------------------------------------------+
|                         YÊU CẦU PHẦN CỨNG VÀ MÔI TRƯỜNG DEPLOY                     |
+------------------------+-----------------------------------------------------------+
| Server Deployment      | - Ubuntu 20.04 LTS, 2 vCPU, 4GB RAM, 40GB SSD             |
|                        | - Node.js v14+, Docker & Docker-Compose, Nginx Reverse    |
|                        |   Proxy (SSL/TLS Let's Encrypt), MySQL 8.0                |
+------------------------+-----------------------------------------------------------+
| Client App (Android)   | - Android 6.0 (Marshmallow - API Level 23) trở lên        |
|                        | - Dung lượng RAM tối thiểu: 2GB; Bộ nhớ trống: 100MB      |
+------------------------+-----------------------------------------------------------+

Quy trình cài đặt máy chủ (Production Setup)

# 1. Clone source code và cài đặt dependencies
git clone https://github.com/ho-nguyen-bao/family-connect-server.git
cd family-connect-server
npm install --production

# 2. Cấu hình biến môi trường (.env)
cat <<EOF > .env
PORT=4000
DATABASE_URL=mysql://dbuser:strongpassword@localhost:3306/family_db
JWT_SECRET=super_secret_jwt_key_2021
SMTP_HOST=smtp.gmail.com
SMTP_USER=notification.familyapp@gmail.com
SMTP_PASS=app_specific_password
FCM_SERVER_KEY=AAAA...your_fcm_key...
EOF

# 3. Chạy Migration Database và khởi chạy Service với PM2
npx sequelize-cli db:migrate
pm2 start src/index.js --name "family-api-gateway" -i max

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

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

  • Ràng buộc nền tảng: Ứng dụng mới chỉ đóng gói và kiểm thử chuyên sâu trên hệ điều hành Android; dù sử dụng React Native nhưng chưa xây dựng cấu hình build và publish trên iOS App Store.
  • Xử lý đa phương tiện cục bộ: Quá trình upload video dung lượng lớn còn phụ thuộc nhiều vào chất lượng đường truyền mạng di động, chưa có cơ chế chia nhỏ file (Chunk upload) và nén video tự động tại máy khách.
  • Mã hóa dữ liệu: Tin nhắn và hình ảnh được mã hóa trên đường truyền (HTTPS/WSS) và bảo vệ trong DB, nhưng chưa tích hợp cơ chế mã hóa đầu cuối (End-to-End Encryption - E2EE) bằng giao thức Signal.

Hướng nâng cấp trong tương lai

  1. Phát hành đa nền tảng: Hoàn thiện bản build cho iOS và phiên bản Web Desktop qua React Native for Web.
  2. Tích hợp tính năng gọi thoại/video P2P: Nhúng giao thức WebRTC để cung cấp tính năng gọi video chất lượng cao cho các cuộc họp gia đình trực tuyến.
  3. Ứng dụng AI phân tích cảm xúc & Tự động tạo Album: Tích hợp các mô hình học máy (Machine Learning) để nhận diện khuôn mặt thành viên, tự động gắn thẻ (tagging) và tạo video kỷ niệm gia đình hàng năm (Year in Review).

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

+------------------------------------------------------------------------------------+
|                         BẢNG ĐỐI TƯỢNG HƯỞNG LỢI VÀ GIÁ TRỊ NHẬN ĐƯỢC              |
+---------------------------+--------------------------------------------------------+
| Nhóm đối tượng            | Giá trị thực tiễn và định lượng                        |
+---------------------------+--------------------------------------------------------+
| **Sinh viên & Học viên**  | Nguồn tài liệu tham khảo mẫu mực về cấu trúc đồ án tốt |
|                           | nghiệp Kỹ thuật Phần mềm chuẩn mực; phương pháp luận   |
|                           | Agile/Scrum bài bản và cách thiết kế DB quan hệ.       |
+---------------------------+--------------------------------------------------------+
| **Lập trình viên (Devs)** | Kiến trúc tích hợp hoàn chỉnh giữa React Native và     |
|                           | GraphQL Subscription / WebSockets; kỹ thuật xác thực   |
|                           | JWT và xử lý đa phương tiện.                           |
+---------------------------+--------------------------------------------------------+
| **Các hộ gia đình**       | Một công cụ số an toàn, lành mạnh, không quảng cáo,    |
|                           | giúp gắn kết tình cảm và thắt chặt mối quan hệ.        |
+---------------------------+--------------------------------------------------------+
| **Nhà nghiên cứu (R&D)**  | Dữ liệu thực nghiệm về mô hình mạng xã hội thu nhỏ     |
|                           | (Micro-SNS) và hành vi tương tác trong gia đình.       |
+---------------------------+--------------------------------------------------------+

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai (deploy) hệ thống là gì?

Máy chủ backend yêu cầu hệ điều hành Linux (khuyến nghị Ubuntu 20.04 LTS), Node.js v14+, tối thiểu 2GB RAM và cơ sở dữ liệu MySQL 8.0. Về phía client, ứng dụng Android tương thích tốt từ phiên bản Android 6.0 trở lên, yêu cầu thiết bị có kết nối mạng Internet (Wi-Fi hoặc 3G/4G/5G).

2. Hệ thống có khả năng mở rộng (Scalability) như thế nào khi số lượng gia đình tăng cao?

Hệ thống được thiết kế theo kiến trúc Stateless Backend ở tầng API Gateway. Khi lượng người dùng tăng đột biến, ta có thể nhân bản các node Node.js chạy phía sau Nginx Load Balancer. Đối với cơ chế thời gian thực (GraphQL Subscription), hệ thống có thể chuyển đổi từ In-Memory PubSub sang Redis PubSub để đồng bộ sự kiện giữa nhiều máy chủ khác nhau một cách dễ dàng.

3. Làm thế nào để tích hợp ứng dụng với các hệ thống sẵn có (như Google Photos hoặc Calendar)?

Nhờ cấu trúc module hóa và sử dụng GraphQL, việc tích hợp vô cùng thuận tiện. Có thể bổ sung các GraphQL Resolvers mới kết nối trực tiếp đến REST API của Google Photos SDK để đồng bộ ảnh kỷ niệm hoặc Google Calendar API để nhắc nhở ngày sinh nhật, ngày kỷ niệm gia đình.

4. Chi phí vận hành và bảo trì ước tính hàng tháng là bao nhiêu?

Nhờ sử dụng 100% nền tảng mã nguồn mở (Node.js, GraphQL, MySQL, React Native) cùng các gói miễn phí từ Firebase Cloud Messaging (FCM), chi phí vận hành cho quy mô dưới 10.000 người dùng hoạt động hàng tháng (MAU) chỉ rơi vào khoảng $10 - $20 USD/tháng cho một máy chủ ảo Cloud VPS (DigitalOcean, AWS Lightsail hoặc Linode).

5. Dữ liệu hình ảnh và tin nhắn riêng tư của gia đình được bảo vệ như thế nào?

Toàn bộ dữ liệu truyền tải giữa thiết bị di động và máy chủ đều được mã hóa bằng giao thức SSL/TLS (HTTPS và WSS). Mật khẩu được băm một chiều với giải thuật BCrypt. Mọi truy vấn đọc/ghi dữ liệu đều bắt buộc phải đi qua middleware xác thực JWT và kiểm tra quyền sở hữu nhóm (Group Membership Authorization), ngăn chặn tuyệt đối tình trạng rò rỉ dữ liệu chéo giữa các gia đình.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng kết nối và chia sẻ giữa các thành viên trong gia đình" của tác giả Hồ Nguyên Bảo đã hoàn thành xuất sắc các mục tiêu đặt ra:

  • Đưa ra giải pháp công nghệ toàn diện giải quyết bài toán xã hội cấp thiết: gia tăng sự gắn kết, thấu hiểu giữa các thế hệ trong gia đình thông qua không gian số riêng tư.
  • Làm chủ và ứng dụng thành công chuỗi công nghệ hiện đại bao gồm React Native, GraphQL API, Apollo Client, WebSocket Subscriptions, Firebase Cloud Messaging và Node.js/Express.
  • Xây dựng thành công sản phẩm ứng dụng di động hoàn chỉnh trên nền tảng Android với 4 trụ cột tính năng: Chia sẻ cảm nghĩ tức thời, Phòng chat nhóm, Nhật ký kỷ niệm chung và Bộ đếm ngày gắn kết.

Sản phẩm không chỉ khẳng định năng lực phân tích, thiết kế và hiện thực hóa hệ thống phần mềm của một kỹ sư Kỹ thuật Phần mềm mà còn mở ra tiềm năng thương mại hóa và ứng dụng rộng rãi trong đời sống xã hội. Các nhà phát triển và sinh viên có thể tham khảo toàn bộ tài liệu kiến trúc và giải pháp công nghệ này làm nền tảng phát triển các sản phẩm mạng xã hội chuyên biệt trong tương lai.