Tải bản đầy đủ (.doc) (86 trang)

Đồ án nghiên cứu phát triển ứng dụng chat cho hệ thống thông tin di động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.09 MB, 86 trang )

Mai Tuấn Việt

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
KHOA ĐIỆN - ĐIỆN TỬ
BỘ MÔN KỸ THUẬT VIỄN THÔNG
-----------  -----------

NGHIÊN CỨU PHÁT TRIỂN ỨNG DỤNG CHAT CHO HỆ THỐNG THÔNG TIN DI ĐỘNG

ĐỒ ÁN TỐT NGHIỆP
NGHIÊN CỨU PHÁT TRIỂN ỨNG DỤNG CHAT
CHO HỆ THỐNG THÔNG TIN DI ĐỘNG
Sinh viên thực hiện:

Mai Tuấn ViệtLớp:

Khóa:Kỹ thuật viễn thông
56Giáo viên hướng dẫn: TS. Trần Hoài Trung

HÀ NỘI - 2019
Năm 2020
s


TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
KHOA ĐIỆN - ĐIỆN TỬ
BỘ MÔN KỸ THUẬT VIỄN THÔNG
-----------  -----------

ĐỒ ÁN TỐT NGHIỆP
NGHIÊN CỨU PHÁT TRIỂN ỨNG DỤNG CHAT


CHO HỆ THỐNG THÔNG TIN DI ĐỘNG

Sinh viên thực hiện:
Lớp:

Mai Tuấn Việt
Kỹ thuật viễn thông

Khóa:
Giáo viên hướng dẫn:

56
TS. Trần Hoài Trung

HÀ NỘI - 2019


BỘ GIÁO DỤC VÀ ĐÀO TẠO

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

TRƯỜNG ĐẠI HỌC GTVT

Độc lập - Tự do - Hạnh phúc

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
BỘ MÔN KỸ THUẬT VIỄN THÔNG
KHOA ĐIỆN - ĐIỆN TỬ

2



LỜI CAM ĐOAN
Cam đoan không sao chép từ các đồ án, luận văn khác. Các nội dung, dữ
liệu tham khảo đều đã được trích dẫn đầy đủ …

Người cam đoan

Mai Tuấn Việt

3


LỜI NÓI ĐẦU

4


I.

Tính cấp thiết của đề tài:
Ngày nay, ứng dụng công nghệ và việc tin học hóa được xem là một trong
những yếu tố mang tính quyết định trong hoạt động của các chính phủ, tổ chức,
cũng như của các công ty, nó đóng vai trò hết sức quan trọng, có thể tạo ra
những bước đột phá mạnh mẽ. Với sự phát triển ngày càng nhanh chóng này
của xã hội thì việc phát triển hệ thống mạng lưới thông tin là một điều kiện tiên
quyết.Và khi hệ thống mạng lưới thông tin được phủ sóng rộng rãi, chúng ta
chắc chắn sẽ thực hiện được nhiều công việc, truyền thông tin, dữ liệu với tốc
độ nhanh hơn và chi phí thấp hơn nhiều so với cách thức truyền thống. Chính
điều này, đã thúc đẩy sự khai sinh và phát triển của ứng dụng Chat - ứng dụng

truyền thông giúp cho việc truyền thông tin nay trở nên dễ dàng hơn và tiết kiệm
hơn, nhanh chóng hơn, làm biến đổi đáng kể bộ mặt văn hóa, nâng cao chất
lượng cuộc sống con người.
II. Đối tượng và phạm vi nghiên cứu:
Nghiên cứu phát triển ứng dụng chat trên 2 nền tảng phổ biến nhất hiện
nay là android và ios.
III. Phương pháp nghiên cứu:
- Sử dụng kiến thức đã học và các tài liệu có liên quan trong và ngoài
nước liên quan đến đề tài nghiên cứu đặc biệt là các tài liệu về phát triển ứng
dụng , thiết kế hệ thống trong hệ thống thông tin di động.
- Nghiên cứu và tìm hiểu tập trung bám sát đề cương dưới sự hướng
dẫn của Thầy giáo.
IV. Mục tiêu nghiên cứu của đề tài:
Nghiên cứu và phát triển thành công để ứng dụng có thể truyền thông tin
trực tiếp theo thời gian thực và chạy ổn định trên cả 2 nền tảng là android và
ios.
V. Kết cấu của đề tài:
Chương 1. Giới thiệu về hệ thống chat và các công nghệ phục vụ cho việc
lập trình hệ thống.
Chương 2. Phân tích các giao thức truyền dẫn thông tin trong hệ thống
thông tin di động
Chương 3. Phân tích chi tiết và thiết kế hệ thống
Hà Nội, ngày … tháng … năm 2019
Sinh viên thực hiện
Mai Tuấn Việt

MỤC LỤC

5



TỜ GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
LỜI CAM ĐOAN........................................................................................................3
LỜI CAM ĐOAN........................................................................................................3
LỜI NÓI ĐẦU.............................................................................................................4
LỜI NÓI ĐẦU.............................................................................................................4
DANH MỤC HÌNH VẼ..............................................................................................8
DANH MỤC HÌNH VẼ..............................................................................................8
DANH MỤC KÝ HIỆU, THUẬT NGỮ VIẾT TẮT...............................................10
DANH MỤC KÝ HIỆU, THUẬT NGỮ VIẾT TẮT...............................................10
CHƯƠNG 1. GIỚI THIỆU VỀ HỆ THỐNG CHAT VÀ CÁC CÔNG NGHỆ
PHỤC VỤ CHO VIỆC LẬP TRÌNH HỆ THỐNG..................................................11
CHƯƠNG 1. GIỚI THIỆU VỀ HỆ THỐNG CHAT VÀ CÁC CÔNG NGHỆ
PHỤC VỤ CHO VIỆC LẬP TRÌNH HỆ THỐNG..................................................11
1.1. Giới thiệu chung về hệ thống chat.......................................................................12
1.1. Giới thiệu chung về hệ thống chat.......................................................................12
1.2. Giới thiệu các công nghệ sử dụng cho hệ thống chat...........................................13
1.2. Giới thiệu các công nghệ sử dụng cho hệ thống chat...........................................13
1.2.1 Ngôn ngữ javascript........................................................................................13
1.2.2 Công nghệ React Native..................................................................................15
1.2.3 FireBase........................................................................................................... 16
1.3 Kết luận chương....................................................................................................24
1.3 Kết luận chương....................................................................................................24
CHƯƠNG 2. PHÂN TÍCH CÁC GIAO THỨC TRUYỀN DẪN THÔNG TIN
TRONG HỆ THỐNG THÔNG TIN DI ĐỘNG.......................................................25
CHƯƠNG 2. PHÂN TÍCH CÁC GIAO THỨC TRUYỀN DẪN THÔNG TIN
TRONG HỆ THỐNG THÔNG TIN DI ĐỘNG.......................................................25
2.1. Các giao thức truyền dẫn thông tin trong hệ thống thông tin di động..................26
2.1. Các giao thức truyền dẫn thông tin trong hệ thống thông tin di động..................26
2.2. Sơ đồ, giao thức kết nối được sử dụng trong hệ thống Chat................................35

2.2. Sơ đồ, giao thức kết nối được sử dụng trong hệ thống Chat................................35
2.3. Kết luận chương...................................................................................................44

6


2.3. Kết luận chương...................................................................................................44
CHƯƠNG 3: PHÂN TÍCH DỮ LIỆU VÀ THIẾT KẾ HỆ THỐNG....................45
CHƯƠNG 3: PHÂN TÍCH DỮ LIỆU VÀ THIẾT KẾ HỆ THỐNG....................45
3.1. Cài đặt và thiết kế cơ sở dữ liệu...........................................................................46
3.1. Cài đặt và thiết kế cơ sở dữ liệu...........................................................................46
3.1.1 Cài đặt và thiết kế cơ sở dữ liệu cho chức năng đăng ký và đăng nhập...........46
3.1.2 Cài đặt và thiết kế cơ sở dữ liệu cho chức năng gửi và nhận tin nhắn.............52
3.1.3 Sơ đồ quản trị..................................................................................................53
3.2. Kiến trúc quản lý dữ liệu......................................................................................54
3.2. Kiến trúc quản lý dữ liệu......................................................................................54
3.3. Thiết kế giao diện người dùng.............................................................................56
3.3. Thiết kế giao diện người dùng.............................................................................56
3.3.1. Xây dựng màn hình đăng nhập.......................................................................56
3.3.2 Xây dựng màn hình đăng ký :..........................................................................57
3.3.3 Xây dựng màn hình chính:..............................................................................58
3.3.4 Màn hình danh bạ :..........................................................................................59
3.3.5 Xây dựng phòng chat :....................................................................................60
3.4 Kết luận Chương...................................................................................................60
3.4 Kết luận Chương...................................................................................................60
KẾT LUẬN VÀ KIẾN NGHỊ..................................................................................62
KẾT LUẬN VÀ KIẾN NGHỊ..................................................................................62
TÀI LIỆU THAM KHẢO........................................................................................63
TÀI LIỆU THAM KHẢO........................................................................................63
PHỤ LỤC..................................................................................................................64

PHỤ LỤC..................................................................................................................64

7


DANH MỤC HÌNH VẼ

HÌNH 1.1 XU HƯỚNG SỬ DỤNG FIREBASE......................................................17
HÌNH 1.2 CÁC DỊCH VỤ CỦA FIREBASE...........................................................18
HÌNH 1.3 MÔ PHỎNG DỮ LIỆU CỦA CƠ SỞ DỮ LIỆU TRÊN FIREBASE...19
HÌNH 1.4 FIREBASE VÀ CÁC THIẾT BỊ HỖ TRỢ.............................................19
HÌNH 1.5 CÁC HÌNH THỨC HỖ TRỢ XÁC THỰC CỦA NGƯỜI DÙNG........20
HÌNH 1.6 MÔ PHỎNG DỮ LIỆU TỪ FIREBASE TỚI CÁC THIẾT BỊ............21
HÌNH 1.7 CHỨC NĂNG ĐỒNG BỘ CẤU HÌNH TRONG FIREBASE...............23
HÌNH 2.1 CÁC GIAO THỨC TRUYỀN DẪN THÔNG TIN................................26
HÌNH 2.2 MÔ PHỎNG HOẠT ĐỘNG TRUYỀN DẪN THÔNG TIN.................27
HÌNH 2.3 GIAO THỨC TCP....................................................................................29
HÌNH 2.4 SƠ ĐỒ HOẠT ĐỘNG CỦA HTTP.........................................................30
HÌNH 2.5 GIAO THỨC SSH....................................................................................31
HÌNH 2.6 GIAO THỨC SMTP.................................................................................32
HÌNH 2.7 GIAO THỨC TCP/IP...............................................................................33
HÌNH 2.8 GIAO THỨC BẮT TAY CỦA WEBSOCKET.......................................37
HÌNH 2.8 SƠ ĐỒ DỮ LIỆU CỦA WEBSOCKET..................................................39
HÌNH 2.9 MÔ HÌNH DỮ LIỆU TRONG FIRESTORE.........................................41
HÌNH 2.10 SƠ ĐỒ CẤU TRÚC ỨNG DỤNG CHAT.............................................42
HÌNH 2.11 SƠ ĐỒ HOẠT ĐỘNG GIỮA PHÍA MÁY KHÁCH VÀ MÁY CHỦ..43
HÌNH 3.1 SƠ ĐỒ LUỒNG DỮ LIỆU XÁC THỰC TRONG FIREBASE............47

8



HÌNH 3.2 GIAO DIỆN HƯỚNG DẪN KẾT NỐI ỨNG DỤNG VỚI FIREBASE
..................................................................................................................................... 48
HÌNH 3.3 GIAO DIỆN TẠO CƠ SỞ DỮ LIỆU......................................................49
HÌNH 3.4 BẢNG LỰA CHỌN KIỂU XÁC THỰC TRONG FIREBASE.............49
HÌNH 3.5 MÀN HÌNH CẤU HÌNH FIREBASE CHO ỨNG DỤNG....................50
HÌNH 3.6 BẢNG LƯU TRỮ THÔNG TIN ĐĂNG NHẬP CỦA NGƯỜI DÙNG.51
HÌNH 3.7 BẢNG LƯU TRỮ TIN NHẮN CỦA NGƯỜI DÙNG............................53
HÌNH 3.8 SƠ ĐỒ VAI TRÒ CỦA QUẢN TRỊ VIÊN VÀ NGƯỜI DÙNG............53
HÌNH 3.9 SƠ ĐỒ KIẾN TRÚC DỮ LIỆU REDUX................................................54
HÌNH 3.10 SƠ ĐỒ DỮ LIỆU CỦA STORE TRONG REDUX..............................56
HÌNH 3.11 MÀN HÌNH ĐĂNG NHẬP....................................................................56
HÌNH 3.12 MÀN HÌNH ĐĂNG KÝ.........................................................................57
HÌNH 3.13 MÀN HÌNH CHÍNH..............................................................................58
HÌNH 3.14 MÀN HÌNH DANH BẠ..........................................................................59
HÌNH 3.15 MÀN HÌNH PHÒNG CHAT.................................................................60

9


DANH MỤC KÝ HIỆU, THUẬT NGỮ VIẾT TẮT
Từ viết
tắt
Api
Params
AI
AICH
A-P
AS
BER

BCH

Từ đầy đủ
Application programming
interface
Parameters
Acquistion Indicator
Acquistion Indication
Channel
Access Preamble
Access Slot
Bit Error Rate
Broadcast Channel

Tiếng Việt
Giao diện lập trình ứng dụng
Tham số
Chỉ thị bắt
Kênh chỉ thị bắt
Tiền tố
Khe truy nhập
Tỷ số bit lỗi
Kênh quảng bá

10


CHƯƠNG 1. GIỚI THIỆU VỀ HỆ THỐNG CHAT VÀ
CÁC CÔNG NGHỆ PHỤC VỤ CHO VIỆC LẬP TRÌNH HỆ
THỐNG


Giới Thiệu Chương
Trước hết, với sự phát triển ngày càng nhanh của xã hội thì kéo theo đó là
sự lớn mạnh một cách nhanh chóng của công nghệ thông tin. Vì lẽ đó nên chúng
ta ngày càng được chứng kiến nhiều sự xuất hiện của rất nhiều công nghệ mới,
nền tảng phát triển mới như hiện nay. Vậy thì, việc lựa chọn ngôn ngữ, lựa chọn
nền tảng để bắt đầu một dự án là một việc hết sức phức tạp và phụ thuộc vào rất
nhiều yếu tố cũng như mục đích phát triển của dự án. Và ở chương 1 chúng ta sẽ
nói về lý do để lựa chọn và đặc điểm của các công nghệ được sử dụng cho việc
phát triển hệ thống chat.

11


1.1. Giới thiệu chung về hệ thống chat
Trước hết, Để xây dựng một hệ thống Chat lấy dữ liệu thời gian thực thì
ứng dụng phải gồm 2 phần chính là phần giao diện người dùng và phần máy chủ
để xử lý và lưu trữ dữ liệu.
Trước tiên là phần giao diện người dùng, Ở đây mục tiêu của chúng ta là
xây dựng và phát triển ứng dụng chat trên cả hai nền tảng phổ biến nhất hiện nay
là android và ios, vậy thì thông thường chúng ta sẽ cần viết riêng ứng dụng bằng
ngôn ngữ java để có chạy trên nền tảng android và swift hoặc objective-C để có
thể vận hành trên các thiết bị sở hữu nền tảng ios.
Và những ngôn ngữ này được gọi là ngôn ngữ native, và có một sự thật là
ngôn ngữ native thì đêm lại cho chúng ta rất nhiều ưu điểm như là :
Về mặt hiệu năng thì khi sử dụng ngôn ngữ để lập trình thì ứng dụng sẽ
chắc chắn chạy nhanh hơn trong hầu hết trường hợp. Tuy nhiên sự chênh lệch ở
các ứng dụng có thể là nhỏ, chấp nhận được và khó nhận biết bởi người dùng.
Và có một sự thật là chỉ ngôn ngữ native mới có khả năng truy cập các phần
cứng (như camera, GPS, thiết bị thu âm… ) và có thể truy cập đến các quyền

như : sao chép, tạo, ghi, đọc tập tin (trên bộ nhớ của điện thoại), các thông tin
danh bạ, thông tin cá nhân, thực hiện cuộc gọi, nhắn tin… Nói cách khác, khi sử
dụng ngôn ngữ native thì ứng dụng có thể khai thác được sức mạnh phần cứng
nhiều nhất của nền tảng.
Tuy nhiên thì với những dự án vừa và nhỏ thì công cuộc xây dựng ứng
dụng kiểu này sẽ thực sự tốn kém chi phí và thời gian cũng như công sức phát
triển và bảo trì ứng dụng. Và với một dự án nhỏ về hệ thống chat như thế này,
thì ngôn ngữ native chắc chắn không phải là ngôn ngữ tối ưu nhất để phát triển
ứng dụng. Và sự lựa chọn của tôi trong dự án này chắc chắn phải là một nền
tảng giúp tôi chỉ việc code một lần để sở hữu ứng dụng có thể vận hành trên cả
hai nền tảng.
Sự thật là hiện nay có một vài framework khá tốt như react native, flux
…. Và lựa chọn của tôi trong ứng dụng này sẽ là React native,Chúng ta sẽ bàn
về lý do chúng ta sử dụng react native ở chương 2. React native thì được viết
trên ngôn ngữ javascript và đấy cũng chính là điểm mạnh của framework này.
Vậy thì với react native và javascript chúng ta có thể dễ dàng xây dựng
giao diện người dùng.

12


Còn lại bên phía máy chủ, có hai phần chính để xây dựng một hệ thống
máy chủ hoàn chỉnh đó chính là api và cơ sở dữ liệu, và cũng tồn tại khá nhiều
loại api như là graphql server , hay restful api , rest api …. Và để mỗi loại api thì
có các ngôn ngữ, cách thực lập trình khác nhau. Và chọn loại api nào sẽ tuỳ
thuộc vào mục đích sử dụng của chúng ta. Api sẽ có nhiệm vụ kết nối giữa phía
người dùng và hệ thống cơ sở dữ liệu. Và có một vài cơ sở dữ liệu có thể kể đến
như là hệ thống cơ sở quản lý dữ liệu quan hệ (Oracle, M, MS server,
PostgreSQL) , hệ cơ sở dữ liệu hướng tài liệu (MongoDB), Cơ sở dữ liệu dạng
khoá …

Ngoài ra thì chúng ta cũng cần phải có thư viện cung cấp các phương thức
để phía người dùng có thể giao tiếp với api để lấy dữ liệu từ cơ sở dữ liệu. Cũng
phải nói rằng mỗi loại api khác nhau thì có các cách để gửi http request khác
nhau và các thư viện cung cấp các phương thức gửi http request khác nhau như
là axios, apollo client ….
Tuy nhiên thì ở đây, Để tạo ra một ứng dụng chat có sử dụng dữ liệu thời
gian thực, thì đòi hỏi phía máy chủ và phía máy khách phải liên tục gửi dữ liệu
sang cho nhau với độ trễ thấp nhất có thể ( ms ). Vì vậy nên sự lựa chọn của tôi
trong dự án này là cơ sở dữ liệu phi quan hệ ( NoSQL ) Cùng với đó tôi sẽ sử
dụng các phương thức mà FireBase cung cấp để phía máy khách có thể truy cập
vào và lấy dữ liệu trực tiếp từ hệ thống cơ sở dữ liệu.
1.2. Giới thiệu các công nghệ sử dụng cho hệ thống chat
Trước tiên là về phía giao diện người dùng, Tôi sẽ phân tích sâu hơn về
framework react native, lý do sử dụng nó và ngôn ngữ được sử dụng đó chính là
Javascript.
1.2.1 Ngôn ngữ javascript
Ngôn ngữ lập trình Javascript được giới thiệu đầu tiên vào năm
1995. Mục đích là để đưa những chương trình vào trang web ở trình duyệt
Netscape Navigator - một trình duyệt web phổ biến những năm 1990.
JavaScript được phát triển bởi Brendan Eich tại Hãng truyền thông
Netscape với cái tên đầu tiên là Mocha, rồi sau đó đổi tên thành LiveScript, và
cuối cùng thành JavaScript. Có lẽ việc đổi tên như vậy là để giúp JavaScript
được chú ý nhiều hơn. Bởi tại thời điểm này, Java đang được coi là một hiện
tượng và trở nên phổ biến.

13


Trên thực tế, JavaScript không được phát triển dựa trên Java. Và chúng là
hai ngôn ngữ hoàn toàn khác biệt. Các ta sẽ thấy rõ hơn điều này ở phần sau của

bài viết.
Đặc điểm chung của javascript


Là ngôn ngữ lập trình bậc cao (high-level) giống như: C/C++, Java,
Python, Ruby,... Nó rất gần với ngôn ngữ tự nhiên của con người. Trong
khi ngôn ngữ lập trình bậc thấp (low-level) như: Assembly... sẽ gần với
máy tính hơn.



Là ngôn ngữ lập trình động (dynamic programming language): như
Python, Ruby, Perl,... Chúng được tối ưu hoá nhằm nâng cao hiệu suất
cho lập trình viên. Trong khi ngôn ngữ lập trình tĩnh (static programming
language): như C/C++,... lại được tối ưu hoá để nâng cao hiệu suất cho
phần cứng máy tính.



Là ngôn ngữ lập trình kịch bản (scripting language): nghĩa là không cần
biên dịch (compile) hay liên kết (linked) giống như ngôn ngữ lập trình
biên dịch (C/C++, Java,...) mà nó sẽ được dịch tại thời điểm chạy.



Là ngôn ngữ dựa trên đối tượng (object-based): tức nó gần giống như
ngôn ngữ lập trình hướng đối tượng, ngoại trừ JavaScript không hỗ trợ
tính kế thừa và đa hình.




Là ngôn ngữ dựa trên nguyên mẫu (prototype-based): là một kiểu của lập
trình hướng đối tượng, trong đó các hành vi của đối tượng được sử dụng
lại.

JavaScript có rất nhiều ứng dụng trên nhiều môi trường và nền tảng khác khau:


JavaScript cùng với HTML, CSS trở thành ngôn ngữ không thể thiếu đối
với website



Ngoài ra, có rất nhiều framework javascript khác nhau phía front-end:
Angular.js, Angular2, ReactJS, Vue.js, Ember.js, Meteor.js, backbone...



JavaScript có thể sử dụng phía server với framework : Node.js



Một số database sử dụng JavaScript như là kịch bản và là ngôn ngữ query:
MongoDB, CouchDB



JavaScript có thể dùng để xây dựng ứng dụng Desktop với framework:
Electron. Những ứng dụng nổi tiếng có thể kể đến là: Atom, Visual Studio
Code, GitKraken, Wordpress.com,...


14




Để xây dựng ứng dụng điện thoại đa nền tảng (Android, IOS) có thể
dùng: React-native

1.2.2 Công nghệ React Native
React Native là công nghệ được tạo bởi Facebook, cho phép các lập trình
viên sử dụng JavaScript để làm mobile apps trên cả Android và iOS với cảm
nhận và giao diện native. Một ví dụ để làm rõ cách vận hành của React Native là
các code bọc ngoài của code native. Có rất nhiều thành tố được tạo nên khi đang
“bọc” chức năng native của iOS hoặc Android.
Một lý do lập trình mobile app rất khó và tốn thời gian là vì thực tế ta cần
tìm hiểu 2 hệ sinh thái hoàn toàn khác biệt. Nếu muốn lập trình app iOS, chúng
ta cần phải học Swift hoặc Objective-C và Cocoa Pods. Nếu muốn lập trình app
Android, Ta cần học Java và Android SDK.
Tuy nhiên, điều tôi có thể nói là chúng khác nhau và việc học từng ngôn
ngữ đó sẽ tốn khá nhiều thời gian. Điều tương tự cũng xảy ra với các
frameworks: Cocoa Touch và Android SDK.
Tất nhiên, mỗi frameworks luôn có 1 gói các công cụ như công cụ testing,
các libs, packages… và việc các dev phải cập nhật các tính năng mới nhất của
mỗi hệ sinh thái là điều không thể bàn cãi.
Mặc khác, nếu chúng ta chọn lập trình trên React Native, phần lớn thời
gian chúng ta sẽ chỉ cần học 1 bộ công cụ. Có rất nhiều thứ để làm quen như:
JavaScript, Node, React Native… nhưng chỉ có 1 công cụ duy nhất để học.
Chúng ta sẽ build được ứng dụng Native, và chúng ta cũng có thể build
ứng dụng đó một cách đa nền tảng (multi-platform) chứ không phải là một

“mobile web app”, không phải là “HTML5 app”, và cũng không phải là một
“hybrid app” hay cũng không chỉ build trên iOS hay Android mà chúng ta build
và chạy được cả hai hệ sinh thái .
Một điểm hay ho nữa mà tôi có đề cập là giảm chi phí tái biên dịch của
Native bằng cách sử dụng Hot-Loading tức là ta không cần phải build lại ứng
dụng từ đầu nên việc chỉnh sửa diễn ra rất nhanh chóng. Giúp cho lập trình viên
có thể thấy được những chỉnh sửa của họ một cách nhanh chóng trực quan,
không còn phải bỏ quá nhiều thời gian trong việc build và chạy ứng dụng nữa.
Khả năng sử dụng lại đóng vai trò quan trọng trong lập trình phần mềm,
nên mỗi khi ta có thể sử dụng lại code thì React Native là công cụ tốt.

15


React Native không phải chỉ viết 1 lần mà nó chạy platform ở mọi nơi.
Bất cứ khi nào ta lập trình 1 app, ta cần phải xây dựng UI trông native. Vì lý do
này, 1 số UI code cần được viết theo đúng các chỉ dẫn và chuẩn mực tốt nhất của
platform đó.
Tuy nhiên, sẽ luôn có vài UI code thông dụng có thể được chia sẻ chung
với nhau cùng tất cả logic. Tính năng “có thể chia sẻ code” có rất nhiều lợi điểm
như: tận dụng nguồn nhân lực tốt hơn, duy trì ít code hơn, ít bugs hơn, các tính
năng trong cả 2 platforms cũng tương tự nhau…
Và điểm lợi hại kế tiếp của React Native đó chính là chúng ta chỉ cần sử
dụng JS để phát triển được một ứng dụng di động hoàn chỉnh, đồng thời giải
quyết được các vấn đề mà Native App gặp phải mà tôi đã nêu ở trên. Và rồi còn
cả kết hợp với code native như Swift, Java, v.v…
Khi tạo ứng dụng sử dụng React Native, việc dự đoán và hiểu UI của
chúng ta cũng dễ dàng hơn vì nó có 1 API đã được khai báo. Sự khác biệt giữa
các cách tiếp cận này là khi ta có 1 ứng dụng với nhiều trạng thái khác nhau, và
ta cần phải theo dõi các thay đổi trong UI và chỉnh sửa chúng.

Điều này có thể là 1 nhiệm vụ phức tạp và không thể dự đoán được khi
app của ta phát triển. Đây được gọi là Imperative Programming. Nếu ta dùng
React Native vốn đã có APIs đã được khai báo, ta sẽ chỉ cần quan tâm đến tình
trạng UI hiện tại trông như thế này, mà không cần theo dõi những UI cũ.
Và đó chính là những ưu điểm để chúng ta sử dụng react native cùng
typescript để phát triển giao diện người dùng.
Đến phần xây dựng máy chủ thì chúng ta sẽ tiếp cận với một số công
nghệ như node js , mongoDB và mongoose
1.2.3 FireBase
FireBase là một nền tảng phát triển ứng dụng di động và web. Họ cung
cấp rất nhiều công cụ và dịch vụ để phát triển ứng dụng chất lượng, rút ngắn
thời gian phát triển và phát triển cơ sở người dùng mà không cần quan tâm đến
hạ tầng phần cứng.
Firebase là sự kết hợp giữa nền tảng cloud với hệ thống máy chủ cực kì
mạnh mẽ của Google. Firebase cung cấp cho chúng ta những API đơn giản,
mạnh mẽ và đa nền tảng trong việc quản lý, sử dụng database.
Ví dụ: Với Firebase, chúng ta có thể tự xây dựng một ứng chat thời gian
thực như Facebook mesage, Zalo… trong vài ngày, thậm chí vài giờ.

16


Đơn giản vì giờ chúng ta chỉ cần phải lo phát triển phía Client( Ứng dụng
mobile), còn phần backend(server) đã có Firebase lo, chúng ta chỉ cần gọi API là
đủ.
Trên thế giới thì xu hướng sử dụng Firebase rất lớn. Như trên ảnh dưới.

Hình 1.1 Xu hướng sử dụng FireBase
Firebase luôn có xu hướng tìm kiếm cao và ổn định
Lịch sử phát triển Firebase


Firebase có tiền thân là Envolve. Đây là dịch vụ cung cấp những API để
dễ dàng tích hợp tính năng chat vào trang web.
Điều thú vị là người dùng Envolve sử dụng dịch vụ để truyền dữ liệu chứ
không đơn thuần cho ứng dụng chat. Họ sử dụng Envolve để đồng bộ dữ liệu
của những ứng dụng như game online, danh bạ, lịch…
Nhận biết được điều này, CEO của Envolve đã tách biệt hệ thống chat và
đồng bộ dữ liệu thời gian thực thành 2 mảng riêng biệt.
Hiện nay, danh mục dịch vụ của Firebase rất nhiều. Từ hệ thống chat thời
gian thực, đến A/B testing… và cả ML KIT( Bộ công cụ phát triển Machine
learning).

17


Hình 1.2 Các dịch vụ của FireBase
Các dịch vụ của Firebase:
1. Realtime Database
Firebase Realtime Database là kiểu dữ liệu NoSQL được lưu trữ trên
cloud, cho phép lưu trữ và đồng bộ dữ liệu người dùng theo thời gian thực.
Thực chất, dữ liệu của ta được lưu dưới dạng JSON object, và developer
có thể quản lý theo thời gian thực.

18


Hình 1.3 Mô phỏng dữ liệu của cơ sở dữ liệu trên fireBase
Như hình minh họa trên, chỉ với một API duy nhất, ta sẽ có được cả dữ
liệu mới nhất và cả những bản update của nó.


Hình 1.4 FireBase và các thiết bị hỗ trợ
Realtime syncing( đồng bộ theo thời gian thực) giúp người dùng truy cập
vào dữ liệu của họ ở bất kỳ thiết bị nào.
Có một ưu điểm của Realtime Database là Firebase sẽ cung cấp một bộ
SDK để dễ dàng xây dựng ứng dụng mobile, web mà không cần một server.
Khi thiết bị ngoại tuyến(offline), Realtime Database SDK sẽ sử dụng bộ
nhớ của thiết bị. Ứng dụng vẫn tương tác với người dùng như bình thường. Đến
khi thiết bị online trở lại, nó tự động đồng bộ lên server.

19


Ở đây có khái niệm mới là NoSQL. Đây là một khái niệm về database
kiểu mới, khác với kiểu truyền thống là SQL.
2. Authentication

Hình 1.5 Các hình thức hỗ trợ xác thực của người dùng
Với tính năng này của Firebase, chúng ta sẽ dễ dàng xây dựng tính năng
đăng nhập mà không cần phải sử dụng dữ liệu đăng ký riêng.
Firebase cung cấp một số phương pháp xác thực cho ứng dụng như:







Email & Password
Phone numbers
Google

Facebook
Twitter
Và còn nhiều hơn nữa!

Có một số ứng dụng nổi tiếng sử dụng tính năng này của Firebase như:
Google Sign-in, Smart Lock.

20


3. Firebase Cloud Messaging (FCM)

Hình 1.6 Mô phỏng dữ liệu từ Firebase tới các thiết bị
Đây chính là tính năng khởi thủy của Firebase, giúp chúng ta xây dựng
ứng dụng chat -trò chuyện. Giờ đây, nó còn cho phép ta đẩy thông báo( push
notification) tới nhiều thiết bị Android, IOS hay Web.
Ta sẽ có thể gửi thông báo(tối đa 2KB) hay tin nhắn( giới hạn 4KB) với
độ tin cậy cao và được tối ưu cho Battery.
Với FCM, chúng ta có thể tích hợp với Firebase Analytics để có thể dễ dàng
phân tích người dùng, từ đó đưa ra chiến lược marketing hợp lý.
4. Firebase Database Query
Bình thường, khi các ta làm việc với database như MySQL, SQL Server…
khi muốn lấy dữ liệu ra thì sẽ cần phải query vào database với câu lệnh SQL rất
phực tạp. Fireabase database query giúp đơn giản hóa quá trình này.
Firebase có 4 kiểu sắp xếp:






orderByKey()
orderByChild(‘child’)
orderByValue()
orderByPriority()

Hay như một số câu lệnh query lấy dữ liệu có giới hạn như:

21








startAt(‘value’)
endAt(‘value’)
equalTo(‘child_key’)
limitToFirst(10)
limitToLast(10)

So sánh với SQL truyền thống :
Với SQL, để thực hiện một câu lệnh query: ta sẽ cần chọn column từ một
table nào đó. Ví dụ: tôi chọn cột Users.
Sau đó ta thực hiện truy vấn với những điều kiện mong muốn qua câu lệnh
WHERE. Như ví dụ, muốn lấy tất cả Users có tên là “Anh Son”.


SELECT * FROM Users WHERE name === "Anh Son";


Nếu muốn giới hạn số lượng Users được lấy ra thì thêm câu lệnh LIMIT.


SELECT * FROM Users WHERE name === "GeekyAnts" LIMIT 10;

Trong Firebase, việc query cũng hoàn toàn tương tự:
const db = firebase.database();

const firebaseRef = db.child('child');

firebaseRef.orderByChild("users").equalTo("GeekyAnts
.on("child_added",

function(snapshot){

console.log(snapshot.key)

});


")

22


5. Remote Config

Hình 1.7 Chức năng đồng bộ cấu hình trong FireBase
Thông thường, các ứng dụng sẽ có mục Setting được lưu trữ ở từng thiết

bị. Nếu người dùng mà gỡ ứng dụng thì lần sau cài đặt lại, ứng dụng sẽ mất các
thiết lập trước đó.
Hoặc trường hợp khác, nếu người dùng cài đặt ứng dụng trên nhiều thiết
bị khác nhau. Họ sẽ phải tự cấu hình thiết lập bằng tay trên từng thiết bị sao cho
giống nhau.
Về phía nhà phát hành, nếu muốn cập nhập thiết lập ứng dụng từ xa như:
đến một ngày nào đặc biệt nào đó( Nghỉ lễ tết, ngày quốc tế phụ nữ…), ta muốn
đổi màu ứng dụng, muốn hiển thị danh mục nào đó để quảng cáo thì Remote
Config là giải pháp giúp ta thực hiện điều đó. Và chúng ta sẽ chỉ phải cập nhật
trên Fireabase mà ứng dụng phía người dùng sẽ tự đổi theo.
Khi đã có đầy đủ các phần liên quan đến thiết kế người dùng và máy chủ
thì chúng ta cũng cần sử dụng thư viện để cung cấp các HTTP Request để phía
người dùng có thể giao tiếp được với server để gửi và nhận dữ liệu.

23


1.3 Kết luận chương.
Thực tế, để xây dựng một ứng dụng di động truyền thông tin thời gian
thực có rất nhiều cách, và chúng ta hoàn toàn có thể xây dựng bằng rất nhiều các
ngôn ngữ, công nghệ và kiến trúc khác nhau tuỳ theo mục đích sử dụng và mục
tiêu nhắm đến. Như là khi phát triển một ứng dụng vừa và nhỏ thì việc tối ưu
hoá tốc độ cũng như là lưu lượng xử lý là không thực sự cần thiết, các kiến trúc
quản lý dữ liệu cũng không nhất thiết phải được sử dụng trong khi đó thì để phát
triển và làm việc với các ứng dụng lớn, đòi hỏi tốc độ nhanh và khả năng xử lý
thông tin nhiều thì việc tối ưu hoá nó là điều bắt buộc. Ở đây, trong ứng dụng
này thì chúng ta sẽ chỉ lựa chọn những công nghệ đơn giản, khả năng tuỳ chỉnh
cao và hỗ trợ cho chúng ta hoàn thành được dự án một cách nhanh nhất. vì vậy
nên những công nghệ dùng để tối ưu ứng dụng như immutable js, react hooks,
hay là các mô đun native code sẽ không được sử dụng. Và thay vào đó là sử

dụng javascript thuần và gói lại trong một file bundle rồi gọi thẳng vào native
code của hai nền tảng như ios và android để đem lại tốc độ xây dựng ứng dụng
một cách nhanh chóng và hiệu quả nhất.

24


×