Trong giai đoạn hiện tại, ứng dụng được chia thành 3 module nhỏ: - _ Quản lý người dùng: Module này có chức năng liên kết dịch vụ chứng thực với cơ sở dữ liệu.. Module đảm bảo việc đồng
Trang 1QUAN LY NHAN VIEN
Nhóm : Ol
Hồ Chí Minh - 01/2023
Trang 2
I Gioi thiéu 6
ma" ẽ 6 Ba , 6
4.1 _ Phân cấp quyên cho từng đối tượng người dùng - 5c sec 8
42, Thidt ké database ccccccccccccscsssesseessessessssssseeseetesessessrerseessessitssesseessserseteven 10
43 Đông bộ các tiến trình trên ứng dụng . 25s SE tre tre 13
4.4 Đông bộ cơ sở đữ liệu với Chat ó5 T2 2E 221222 2112121 errre 16
4.5 _ Xác nhận cho nhân viên vào công fy cL cc vn HH tre, 20
IV Mộtsố hình ảnh của ứng dụng 25
3 Khi đăng nhập bằng Employee Acount 31
F Những việc cần làm tiếp theo 32
VI Hướng phát triển 33
1 Cuối cùng, tính năng chấm công, ta có ý tưởng như sau . -ss- 33
1.1 Thực hiện: Q QGQ TS TT TH ng ng ng kg kg 33
Trang 3Hinh anh
Hình II-1 Lộ trình thire hién o.oo cccesccccenccccescccesseccessevcvsseccesescetsecevtaseeeeaseereaserses 7
Hình II-2 Cau trúc database 5 221 2122112112212 1 1121212212 ưyg 13
Hình II-3 Các luồng của Android s s- ccccề 1221122122 21 21x 21 1n ra 14
Hình II-4 Các phương thức của Async TasK cá tk St 2211 1121111211 HH HH He, 16 Hình II-5 Quy trinh han tin occ ccccccccccccsscessesssessecssessvecseesssessesseetsessvecsietssesseetsvetseeteeee 17
Hình II-6 Bố cục giao diện Chat L2 LH vn 9101101111 011111 11111 01 8110111 1 HH ri 18
Hình III-1 Sơ đồ tương tác giữa client và $eTVCT - 56 2 222 211212222221 ra 21 Hình III-2 Sơ đồ giao tiếp giữa các actiVity các nh HH HH nen ra 21 Hình III-3 Quả trình đăng nhập - 2 202211211011 112111101111 101 1011111011111 011811011 k hy 2 Hình III-4 Quá trình tạo tài khoản - L1 2v 111112121111111211121211111111111111111101111 re 22
Hình III-5 Quá trình lấy 'Task 52 1 91 E2 1 2121121121121 1021211 nen 23
Hình III-6.Quá trình tạo TasK - 5 c nckS 1111211111118 HH HT HH HH nh 23
Hình III-7 Quá trình hiện thị Employee - - 5s c2 1 E121 11211 EEEerree 24
Hình III-§ Quá trình hiện thị Profile 5s: s2 2 2212211211211 121 1kg 24
Hình IV-I Màn hình Login - 1 10121201 12111312111 1111011111111 111101111 011811111011 11 1x xe 25
Hình TV-2 Màn hình tạo tài khoản n TS SH ng ng KT ng kg 25
Hình IV-3 Màn hình Dashboard 2.2111 111111211111101112112111211211111111 111 1kg 26 0E C Lối 0 27 Hình IV-5 Mản hình xem chỉ tiết Task - 5 5 2212 1 21.22112122 2g 27
Hình IV-6 Màn hình cập nhật 'TasK 0 2 111211 112111112111 1012181111 1011512181111 0 tre, 28
Hình IV-7 Màn hình them Task c2 2 2n 1 n1 111 21211211111111111111121111 101 HH, 28 Hình IV-8 Màn hình Employee óc tt 21 vn n1 1211101111111 011111 H1 Hy 29 Hình IV-9 Màn hình Profile đã Join công fy c1 LH vn HH 1H H12 re 30 Hình IV-I0 Màn hình profile chưa Join công ty L2 vn 111101111 x re 30 Hinh IV-11 Man hinh dashboard (Employee level) - v2 112112101211 key 31 Hình IV-I2 Màn hình Task (Employee level) cv 2192 H10 H11 te, 31
Hình IV-13 Màn hình chỉ tiết Task(Employee) - s5 5s SE 22 ren 32
Hình VI-1 Database dự kiến khi xây dựng tính năng chấm công -s-cs sec: 34
Trang 4Thành viên
Họ và Tên Mã số sinh viên Chức vụ
Hồ Văn sư 19200025 Thành viên Nguyễn Tấn Thành 19200028 Thư ký
Nguyễn Đức Huy 19200099 Thành viên
Trần Quốc Huy 19200102 Thành viên
Duong Hoang Tién 19200194 Trưởng nhóm
Phạm Thị Minh Thư 19200510 Thành viên
Trang 5Ban phan cong
Hoan thanh Hoan thanh 50% Chưa hoàn thành
Tên Ngày giao Deadline Nội Dung
19200510 | 27/09/2022 | 30/09/2022 Các dự án tương tự trên thị trường ¬
19200025 | 27/09/2022 | 30/09/2022 Nhu câu thị trường <
19200099 | 27/09/2022 | 30/09/2022 Nhu câu thị trường bị
19200194 | 04/10/2022 | 07/10/2022 Xây dựng tông quát hệ thống é
19200028 | 04/10/2022 | 07/10/2022 Xây dựng tông quát hệ thông Ẹ
19200102 | 04/10/2022 | 07/10/2022 Xây dựng tông quát hệ thống
19200028 | 23/12/2022 | 02/01/2023 Thực hiện thêm và truy vấn task
19200099 | 23/12/2022 | 02/01/2023 Thực hiện thêm và truy vấn task
19200102 | 23/12/2022 | 03/01/2023 Thực hiện truy vấn thông tin người
dùng và thêm người dùng vào công ty
19200510 | 23/12/2022 | 03/01/2023 Thực hiện truy vấn thông tin người
dùng và thêm người dùng vào công ty
19200025 | 23/12/2022 | 03/01/2022 Thực hiện đồng bộ các tiến trình
Trang 6
I Giới thiệu
Hiện nay, quản lý công việc và nhân viên đang là vấn đề nhức nhói đối với các doanh nghiệp Theo thống kê từ Base Workplus, 52% doanh nghiệp Việt Nam làm việc không có quy trình, 85% doanh nghiệp có những quyết định sai lầm do không đủ cơ sở dữ liệu, báo cáo và 90%
các CEO lạm dụng Excel, Email, Zalo nhằm quản ly công việc, dự án Những điều trên dẫn đến hệ lụy các doanh nghiệp gánh chịu như không kiểm soát được tiễn độ công việc, cộng tác,
phối hợp giữa các bộ phận phòng ban rời rạc, không hiệu quả Ứng dụng giúp quản lý nhân viên và công việc được phát triển là điều cần thiết Ứng dụng có các tác vụ cơ bản thêm, sửa, xóa những công việc và tăng cường sự tương tác giữa nhân viên và quản lý nhằm giúp việc
quản lý trở nên thuận tiện và hiệu quả Ứng dụng sử dung Platfrom Firebase để tạo cơ sở dữ liệu, chứng thực người dung
1 Firebase la gi?
Eirebase là một nền tảng ứng dụng di động và web với các công cụ và hạ tầng được thiết kế
đề giúp các lập trình viên xây dựng các ứng dụng chất lượng cao Nói ngắn gọn, thay vì trực tiếp cung cấp các ứng dụng, họ cung cấp các dịch vụ nên tảng cho các lập trình viên, chính là
các bạn, sử dụng dé xây dựng ứng dụng cũng như hỗ trợ các bạn tối ưu hóa, tối đa hóa ứng dụng của mình Với nhiều dịch vụ chất lượng cao đi kèm mức giá phai chang, Firebase đã và
đang, không chỉ là sự lựa chọn hàng đầu cho các lập trình viên đơn thân (single dev) hay các công ty khởi nghiệp (start ups), mà các công ty, tô chức lớn có tên tuôi cũng sử dụng “Firebase”
đề xây dựng các tính năng, các chương trình mới, cũng như chuyên đôi các dịch vụ trước đây sang hệ thống của Firebase Chẳng hạn như Shazam, Fabulous và cả chính Google nữa, khi nên tảng nhắn tin Allo được xây dung trén nén tang Firebase Realtime Database.Firebase, theo
hướng đi của Google, chính thức hỗ trợ Android, IOS, Web
II Uudiém
Như bạn có thê thấy, Firebase cung cấp rất nhiều dịch vụ hỗ trợ giúp các lập trình viên xây dựng ứng dụng của mình Việc tích hợp Firebase vào ứng dụng có thê giảm bớt công việc của
các lập trình viên, đặc biệt là cho các lập trình viên viết các ứng dụng có liên quan tới web
Hơn thế nữa, voi Test Lab, Crash Reporting, App Indexing thi Firebase sẽ báo cáo cho bạn các vấn đề có thê xảy ra khi ứng dụng của bạn chạy nhiều trên máy thật Cũng như Remote Config giúp bạn thay đôi các thiết lập trên ứng dụng của người dùng mà không cần thiết phải publish
1 phiên bản mới
1.2, Nhược điểm
Không có gì là hoàn hảo, và Firebase cũng không là ngoại lệ Điểm yếu duy nhất của Firebase chính là phần Realtime Database, mà đúng hơn chỉ là phần Database Cơ sở dữ liệu
Trang 7của họ được tổ chức theo kiểu trees, parent-children, không phải là kiểu Table nên những ai
đang quen với SQL có thê sẽ gặp khó khăn từ mức đôi chút tới khá nhiều
Trong giai đoạn hiện tại, ứng dụng được chia thành 3 module nhỏ:
- _ Quản lý người dùng: Module này có chức năng liên kết dịch vụ chứng thực với cơ
sở dữ liệu Module đảm bảo việc đồng bộ giữa dịch vụ chứng thực và cơ sở đữ liệu
người dung khi chỉnh sửa một trong hai và phân cấp quyền truy cập cho các người dùng
- Quan ly task: Module dam bao viéc két hợp ba cơ sở dữ liệu task, người dùng, công
ty nhanh chóng và chính xác Module có chức năng là phân loại các task trên cơ sở
dữ liệu theo công ty, them task đúng công ty người dung
- Quan lý việc gia nhập công ty: Module có chức năng là tạo một xác nhận từ chủ
quản công đề một người dung khi mới tạo tài khoản có đề gia nhập công ty
2 Kết quả mong muốn
Ứng dụng có thê quản lý được công việc và năng suất của nhân viên theo từng dự án đề từ
đó đưa ra đánh giá về từng cá nhân Đồng thời tạo môi trường cho các nhân viên có thê trao
đồi
Với từng chức năng ta có kết quả mong muốn:
- Chat: Người dung có thể trò chuyện, chia sẻ file với nhau
Trang 8- Chia nhiém vu: Nhan viên theo dõi được nhiệm vụ của mình được giao Quản lý có thể thêm, chỉnh sửa nhiệm vụ và giao cho nhân viên
- Chấm công: công ty được lịch làm việc của nhân viên Nhân viên có thể xin nghỉ
phép thông qua ứng dụng
3 Kết quả đạt được
Hiện tại, ứng dụng đã thực hiện được việc chứng thực và phân cấp quyền người dùng dựa vào dịch vụ Firebase Authentication Ứng dụng có cơ sở đữ liệu để quan lý các công ty, người dùng và các task
Hệ điều hành Android sử dụng nhân Linux đã được sửa đổi hỗ trợ Giao tiếp Inter-Process
(IPC) hiéu qua, được gọi la Binder Binder 1a kênh chính để giao tiếp giữa các ứng dụng và nói chuyện với các dịch vụ (hệ thống) (xem Phân IV dé thảo luận chuyên sâu về khuôn khô Binder) Trên cùng của hạt nhân tồn tai Android’s application framework, quản lý một loạt các dịch vụ
hệ thống và tạo điều kiện chia sẻ đữ liệu giữa các ứng dụng Các dịch vụ hệ thống làm phong phú thêm các ứng dụng với nhiều tính năng khác nhau, chang han như truy xuất vị trí GPS và chụp ảnh Các ứng dụng hệ thống được cài đặt sẵn mở rộng các tính năng đó bằng các API, ví
dụ: thực hiện cuộc gọi điện thoại và quản lý Danh bạ
Người dùng có thê mở rộng hơn nữa chức năng của thiết bị của họ với các ứng dụng của
bên thứ ba Đối với công việc này, các dịch vụ hệ thống liên quan nhất là:
ActivityManagerService (AMS), kiểm soát vòng đời của ứng dụng: PackageManagerService (PMS), duy trì siêu đữ liệu của ứng dụng bao gồm các đặc quyền; LocationManagerService (LMS), cung cấp quyên truy cập vào thong tin GPS cua thiết bị
Trang 9Tất cả các ứng dụng, bao gồm cả các ứng dụng hệ thống, bao gồm bốn thành phân cơ bản: 1) Hoạt động là giao diện quản lý tương tác của người dùng: 2) Các dịch vụ thực hiện các hoạt động chạy lâu dài và có thê bị ràng buộc và gọi bởi các ứng dụng khác; 3) Nhà cung cấp nội dung quản lý quyền truy cập vào kho dữ liệu được lưu trữ trong ứng dụng: và 4) Máy thu phát sóng nhận và xử lý tin nhắn quảng bá từ hệ thống và các ứng dụng khác
Đề thực hiện được việc phân cấp quyên người dùng đồ án sử dụng giải pháp dựa trên cấp bậc quản lí trong công ty mà giao diện ứng dụng sẽ tương ứng cấp bậc quản lí của người dùng trong công ty Dựa trên dịch vụ Active Directory của Microsoft, mỗi công ty sẽ sẽ làm một domain, người dùng cần phải gia nhập vào domain đề có thê truy cập cơ sở đữ liệu của công
ty Trong công ty sẽ có ba cấp độ quyên là Root-Manager, Manager, Employee
Trong ba cấp độ quyền thì Root-Manager là những người dùng có quyền cao nhất Những người dùng này có thê chính là chủ của một doanh nghiệp, một công ty hoặc đơn giản chỉ làm trưởng nhóm của một dự án, họ có đầy đủ các quyền của các nhóm còn lại nhưng khác biệt lớn nhất là Root-Manager họ có thê cấp một xác nhận cho người dùng tham gia vào công ty (domain) và đồng thời cũng có thể xóa một người dùng bất kỳ ra khỏi công ty(domain)
Đảng II-1 Quyên truy cập của người dùng ở các Activity theo các cấp độ
Ở Hình I thì độ ưu tiên của ba quyền truy cập lần lượt 1a 1) Full, 2)Modify, 3) Read Người dùng với quyền Full sẽ sử dụng được hết các chức năng của Activity tương ứng trong bảng Những người dùng có Modify sẽ độ ưu tiên thấp hơn Full, người dùng với quyền truy cập nay không thể tác động đến các dữ liệu do Root-Manager tạo ra Người dùng chỉ có quyền Read thì chỉ có thể xem nội dung hiên thị trên Activity đang sử dụng mà không thê chỉnh sửa
b Chứng thực
Đề thực hiện được việc cấp quyền truy cập thì cần dùng đến một dịch vụ chứng thực người dùng đáng tin cậy Đồ án có sử dụng đến Platform back-end là Firebase của Google nên ta cũng
sẽ sử dụng đến dịch vụ chứng thực của FireBase là Firebase Authentication
Firebase Authentication cung cap cac dich vu backend, SDK dé str dung va thu vién giao diện người dùng được tạo săn đề xác thực người dùng với ứng dụng của bạn Nó hỗ trợ xác
Trang 10thực bằng mật khâu, số điện thoại, nhà cung cấp danh tính liên kết phô biến như Google, Facebook và Twitter, v.v Firebase Authentication tích hợp chặt chẽ với các dịch vu Firebase
khác và nó tận dụng các tiêu chuân công nghiệp như OAuth 2.0 va OpenID Connect, vì vậy nó c6 thé dé dàng tích hợp với backend của bạn
Cách đề đăng nhập một người dùng vào ứng dụng, trước tiên Firebase Authentication nhận được thông tin xác thực từ người dùng Các thông tin đăng nhập này có thê là địa chỉ email và mật khâu của người dùng hoặc mã thông báo OAuth từ nhà cung cấp danh tính được liên kết Sau đó, Firebase Authentication chuyên các thông tin đăng nhập này cho SDK Xác thực ETirebase Các dịch vụ phụ trợ của Google sau đó sẽ xác mình các thông tin đăng nhập đó và trả lại phản hồi cho người dùng Sau khi đăng nhập thành công, ứng dụng có thê truy cập thông tin hồ sơ cơ bản của người dùng và ứng dụng có thê kiểm soát quyên truy cập của người dùng vào đữ liệu được lưu trữ trong các sản phâm Firebase khác Ứng dụng cũng có thé str dung ma thông báo xác thực được cung cấp đề xác minh danh tính của người dùng trong các dịch vụ phụ trợ của riêng ứng dụng
Firebase Authentication cung cap cho mỗi người dùng duy nhất một UID (User`s ID) tạo ngẫu nhiên không trùng nhau Dựa vào UID nảy ta có thê thiết một Database NoSQL có các collection liên kết nhau bằng UID
4.2, Thiết kế database
a Một số định nghĩa
SQL (viét tắt của Structured Query Language) là ngôn ngữ truy vấn cấu trúc Nó được
dùng để xử ly cơ sở dữ liệu quan hệ SQL được chia thành các mệnh đề, biểu thức, toán tử,
truy vấn và truy vấn con
Lập trình SQL có thể được sử dụng hiệu quả để chèn, tìm kiếm, xóa bản ghi, cap nhật cơ sở
dữ liệu SQL có thê làm được rất nhiều thứ, không giới hạn các việc như tối ưu hóa và duy trì
cơ sở dữ liệu Các cơ sở đữ liệu quan hệ như cơ sở dữ tệu MysSQL, Oracle, MS SQL, Sybase,
NoSQL (viết tắt của Non-Relationla SQL) được sử dụng với mục đích gần giống với SQL
Nhưng nó là đối với cơ sở dữ liệu không quan hệ, không yêu cầu một lược đồ cố định và dễ dàng mở rộng Cơ sở dữ liệu NoSQL được sử dụng cho các kho đữ liệu phân tán với nhụ cầu
lưu trữ dữ liệu không lồ NoSQL được sử dụng cho Big Data và các ứng dụng web thời gian
thực
Một hệ thống cơ sở dữ liệu NoSQL bao gồm một loạt các công nghệ cơ sở dữ liệu có thé
lưu trữ đữ liệu có cầu trúc, bản câu trúc, không có cầu trúc và đa hình
10
Trang 11b So sanh vé loai hinh
SQL databases la co so dit liéu dựa trên bảng và các bảng này có quan hệ với nhau Chẳng
hạn thông tin books trong bảng được đặt tên books Mỗi một row ứng với một record, mỗi
column ứng với mỗi field dữ liệu
NoSQL databases có thê dựa trên cặp tài liệu, cặp khóa giá trị từng cặp một, cơ sở dữ liệu
biểu đồ
c Kho khan
Có thê nói, trong đồ án quản lý nhân viên, các thông tin, các dữ liệu đều dùng chung một cầu trúc Nên Database phù hợp với dé an 1a dang SQL Nhung thật không may về mặt chỉ phi, nhóm chúng em chưa tìm được mét Database dang SQL mién phi (Chi ding duge 6 local) Vì
vậy không thé tiếp tục theo dự kiến ban đầu
Xuất phát từ khó khăn đó, Chúng em đã có giải pháp thay thế đó là chuyên sang sử dụng NoSQL Database (cụ thê là Cloud FireStore của Google) Google đã cung cấp một NoSQL Database miễn phí
d Déi nét vé Cloud FireStore
Cloud Eirestore là một cơ sở dữ liệu linh hoạt, có thể mở rộng dé phat trién thiét bi di dong,
web và máy chủ từ Firebase và Google Cloud Giéng như Cơ sở đữ liệu thời gian thực của Firebase, nó giữ cho dữ liệu của bạn được đồng bộ hóa giữa các ứng dụng khách thông qua trình xử lý thời gian thực và cung cấp hỗ trợ ngoại tuyến cho thiết bị di động và web để bạn có
thể tạo các ứng dụng đáp ứng hoạt động bất kể độ trễ mạng hoặc kết nối Internet Cloud
Firestore cũng cung cấp khả năng tích hợp liền mạch với các sản phẩm Firebase và Google Cloud khác, bao gồm cả Chức năng dam mây
e Lợi ích khi dùng NoSQL
Tuy phải chuyên từ SQL sang NoSQL Database về mặt kinh tế nhưng không thê phủ nhận tầm quan trọng cũng như những lợi ích của NoSQL trong thời đại công nghệ hiện nay Như ta
có thê thấy, Google, Facebook, Amazon, v.v., phải xử lý khối lượng dữ liệu cực lớn Thời gian
phản hồi của hệ thống trở nên chậm khi sử dụng RDBMS cho khối lượng lớn đữ liệu Đề giải
quyết vấn đề này có thê dùng giải pháp '““mở rộng quy mô” hệ thống của mình bằng cách nâng cấp phân cứng hiện có Tuy vậy, quá trình này là rat tốn kém Giải pháp thay thé cho van dé này là phân phối tải cơ sở dữ liệu trên nhiều máy chủ bất cứ khi nào tải tăng lên Phương pháp nay dugc goi la “scaling out” va NoSQL đáp ứng được nhu cầu này
Ngoài ra, NoSQL có những lợi ích khác so với SQL:
- Tốc độ phát triển với cơ sở dữ liệu NoSQL có thể nhanh hơn nhiều so với cơ sở dữ liệu SQL: Cơ sở dữ liệu NoSQL cho phép các đeveloper kiêm soát cầu trúc của đữ liệu nên rất
11
Trang 12phủ hợp với các phương pháp phát triển Agile hiện đại dựa trên việc phat trién nhanh, lặp lại nhanh và cập nhật code thường xuyên Đối với CSDL quan hệ SQL, khi developer yêu cầu
người quản trị cơ sở đữ liệu SQL thay đôi cầu trúc của cơ sở đữ liệu thì tải lại dữ liệu, chỉnh
sửa code có thê làm chậm quả trình phát triển,
- Cấu trúc của nhiều dạng dữ liệu khác nhau được xử lý và phát triển đễ dàng hơn với
cơ sở dữ liệu SQL: Cơ sở dữ liệu NoSQL phù hợp đề lưu trữ và mô hình hóa dữ liệu có cầu
trúc, bán cầu trúc và phi cầu trúc trong một cơ sở đữ liệu Cơ sở dữ liệu NoSQL lưu trữ dữ liệu
ở dạng tương tự như các đối tượng được sử dụng trong các ứng dụng, giảm nhu cầu dịch từ
dạng dữ liệu được lưu trữ sang dạng dữ liệu lấy trong code
- Khi cơ sở dữ liệu SQL không đáp ứng được nhu cầu lưu trữ dữ liệu lớn: Cơ sở dữ liệu NoSQL được tạo ra dé xử lý đữ liệu lớn như một phân của kiến trúc cơ bản của chúng Cơ sở
dữ liệu NoSQL thường dựa trên chiến lược mở rộng quy mô (scale-out strategy), giúp cho việc
mở rộng quy mô đến khối lượng dữ liệu lớn rẻ hơn nhiều so với khi sử dụng phương pháp mở
rộng quy mô mà cơ sở dữ liệu SQL thực hiện
- Khi hệ thống có lượng truy cập cao và không cho phép downtime: Chiến lược mở rộng quy mô (scale-out) được sử dụng bởi hầu hết các cơ sở dữ liệu NoSQL cho phép chúng ta hoạch định được kế hoạch rõ ràng về việc mở rộng lưu lượng truy cập Các kiến trúc mở rộng quy mô cũng mang các lợi ích như có thê nâng cấp cơ sở dữ liệu hoặc thay đôi cầu trúc của nó
mà không cần thời gian downtime
- Các mô hình ứng dụng mới có thể được hỗ trợ dễ dàng hơn: Khả năng mở rộng của cơ
sở dữ liệu NoSQL cho phép một cơ sở dữ liệu phục vụ cả tác vụ nghiệp vụ (transactional) và
phân tích từ cùng một cơ sở dữ liệu Trong cơ sở dữ liệu SQL, thông thường, một data
warehouse riêng biệt được sử dung đề hỗ trợ phân tích
Tuy những lợi ích nảy chưa thê ứng dụng vào đồ án hiện tại nhưng ta có thê tin rằng kiến thức đó sẽ rất hữu ích trong doanh nghiệp, một tập đoàn công nghệ lớn, hay chỉ một công ty quản lí nhỏ vì thời đại đã chuyên dần đến lưu trữ đám mây
12
Trang 13f Thiết kế NoSQL Database:
Cloud Firestore
Companys Collections
Hình I-2 Cầu trúc database
Tận dụng những tiện ích từ Firestore, ta thiết kế một NoSQL Database thay thé cho SQL
Database Tao 3 collections nhu Companys, Tasks va Users
+ Companys: Ta sé cho mot auto ID cho document chia field tén cua cong ty
+ Tasks: Tir ID da tao 6 Companys Collection, ta chu dong dat cho Tasks Collection vi ta
sé quan ly task tương ứng với từng công ty Trong document sẽ có tiếp l collections tên là AlITask Trong AlITask sẽ chứa danh sách tất cả cdc task (document) cha công ty với những
ID ngẫu nhiên Trong từng task sẽ có chung cấu trúc các field bên trong như: Tilte, Content,
Description, Deadline, Status, Host, va 1 collection members chira danh sach thành viên tham
gia
+ Users: Trong Users collection, cac ID sé duge dat theo UID khi tạo tài khoản đăng nhập
& Authentication ( nơi xác thực tài khoản mật khâu) Trong document chứa các field có cầu tric giéng nhau nhuw: company, email, firstname, lastname, level
Việc sử dụng lại các ID đề thuận tiện truy vấn dữ liệu đồng thời dễ dàng quản lí các thông tin như sử dụng dạng bảng khi dùng SQL Thay thế các cột thông tin ở dạng bảng (SQL) thành
các fñeld dữ liệu (NoSQL)
Hiện tại, tuy đã khắc phục được vấn đề không sử dụng được SQL Database nhưng việc sử dụng NoSQL để lại một số vấn đề như: Code truy vấn ,cập nhật va set dữ liệu tương đối dài (đặc biệt khi kết hợp nhiều subcollection), kiêm tra dữ liệu khó khăn
4.3 Đồng bộ các tiến trình trên ứng dụng -
a Taisao sw dung Main Thread va Worker Thread trong do án này?
Android là hệ điều hành đa tiến trình, da luồng Các ứng đụng Android cũng có thê sử dụng được nhiều thread (luồng) tài nguyên hệ thống
13
Trang 14Tuy nhién cac thanh phan lién quan dén giao dién nguwoi ding déu duoc nhét chung vao mét thread chinh, goi la UI Thread (hay Main Thread)
Cac thao tac xu ly nang hau hết đều bị cắm thực thi trên Main Thread do sẽ gây ra trải
nghiệm xấu cho người dùng (bấm nút không lên, treo máy) Do đó chúng em đưa các tác vụ
này vào một Thread khác, gọi là Worker Thread
Khi một ứng dụng Android được khởi chạy, thì hệ thống Android sẽ start một New Linux
Process cho ứng dụng đó cùng với một Thread duy nhất đề thực thi Vậy là có cả Process và
Thread đều được sinh ra
Mỗi Process cung cap tài nguyên cần thiết để thực thi chương trình Mỗi Process có một
không gian địa chỉ ảo, có các mã thực thị, có các lệnh xử lý các đối tượng hệ thống, một ngữ cảnh bảo mật, kích thước làm việc tối thiểu và tối da, va phải có ít nhất một Thread thực thi Một Thread là một thực thê trong mét Process, la đối tượng được lên kế hoạch để thực thi
Trong Process thường sẽ có nhiều Thread và tất cả các Thread này sẽ chia sẻ không gian địa chỉ ảo và tài nguyên hệ thống trong Process Ngoài ra mỗi Thread lại có công việc riêng của
nó đó là: duy trỉ xử lý ngoại lệ, ưu tiên lập lịch trình, lưu dữ cục bộ luồng Môi trường Thread
có thê bao gồm: phân đăng kí Thread với máy chủ, nhân stack, quan trọng là có một môi trường (Thread cũng có ngữ cảnh riêng của nó)
14
Trang 15ec Main Thread va UI Thread, Worker Thread
Trong Android, khi chương trình được khởi chạy, hệ thống sẽ start một Thread ban đầu cùng
với một Process Thì Thread đó chính là Main Thread Vì thế Main Thread lại thường được gọi
là UI Thread thì có 2 lý do chính dang sau đây:
Thread này có nhiệm vụ gửi các sự kiện đến widget, tức là đến các view ở giao diện điện
thoại, thậm chí cả các sự kiện vẽ Ngoài ra Thread này cũng phải tương tác với bộ công cụ Android UI (Android UI toolkit) gồm hai gói thư viện là android.widget và android.view
Còn một trường hợp nữa là Worker Thread, chính là Thread mà bạn tạo thêm cho chương
trình đề nó thực thi một công việc nào đó không liên quan đến giao diện, Thread này cũng được goi la Background Thread
d Hién twgng ANR trong Android
Khi có nhiều thứ thực thi trên UI Thread, và có một công việc gì đó cần phải thực hiện lâu
như kết nối mạng hay truy vấn cơ sở đữ liệu, khi đó UI sẽ bị block Người dùng cảm thấy như
ứng dụng đang bị treo, nhưng thực ra nó đang thực thị công việc của minh trén UI Thread Nếu
UI bj block hơn vải giây (trung bình là 5 giây) thì hệ thống Android sẽ xuất hiện hộp thoại như trên, cho phép người dùng có thê đóng chương trình hoặc chờ đợi Nếu như ứng dụng thường xuyên có những hiện tượng như vậy thì sẽ bất tiện cho người dùng Chính vì vậy, đề không xảy
ra hiện tượng trên thì Android là đề ra 2 rules sau đây yêu cầu lập trình viên phải tuân theo:
e Không được block UI Thread
e Không được kết nối tới bộ công cụ Android UI (Android UI toolkit) tir mét Thread
khong phai la UI Thread
e Handler
La một đối Android cung cấp dùng đê liên kết, trao đổi giữa các Thread với nhau, là trao đổi giữa Thread sinh ra Handler và các Thread khac Thuong 14 Main Thread (UI Thread) với cac Worker Thread (Background Thread) Handler có nhiệm vụ gửi và thực thi cac Message hoặc Runnable tới Message Queue cua Thread sinh ra nó (Handler) Handler luôn được gắn kết với một Thread (Thread sinh ra nó) cũng với Message Queue (của Thread đó) Các Message
và Runnable sẽ được thực thị khi đi ra khỏi Message Queue Có 2 nhiệm vụ mà Handler thường
làm đó là:
e Lên lịch thực thi các Message và Runnable ở các thời điểm trong tương lai
° Sắp xếp một hành động được thực hiện trong một Thread khác
15
Trang 16f AsyncTask
AsyncTask là một đối tượng thích hợp dùng để giao tiếp giữa một Thread với UI Thread,
nó rất dễ dùng Nó cho phép thực hiện công việc ở background và sau đó cập nhật giao điện ở
UI Thread AsyncTask chính là sự tổ hợp của một Thread và một Handler
AsyncTask là một đối tượng có 3 tham s6 Generic Type truyền vao
la Params, Progress, Resultva 4 phương thức onPreExecute(), dolnBackgroundQ, onProgressUpdate(), onPostExecute()
Background thread Main/UI thread
Hinh I-4 Cac phương thức của AsyncTask
Ba tham số đều phải la kiéu Object, néu khong co thi dé la Void Trên hình vẽ có thê thấy chi co doInBackground() chạy ở background, còn 3 phương thức còn lại chạy trên UI Thread Khi cho một lớp kế thừa từ AsyncTask bắt buộc phải override phương thức doInBackground()
Params là tham số có thể được nhận từ execute(), co thể là một mảng các tham số con và
Params sé 1a input cua doInBackground(), Process la input của onProgressUpdate(), đầu ra nay nhận từ doInBackground() thông qua phương thitc publishProgress() onProgressUpdate() co thê cập nhật giao diện lúc runtime Result la dau ra cua doInBackground() va chinh là kết quả trả về ở onPostExecute() AsyncTask chạy trên Worker Thread còn Handler chạy trên Main Thread (hay Thread sinh ra nó)
4.4 Đồng bộ cơ sở dữ liệu với Chat
a Mục tiêu của dịch vụ Chat
Trong môi trường làm việc, sẽ có những trường hợp cân sự trao đôi giữa nhân viên với
nhân viên, quản ly với nhân viên Dịch vụ Chat thực hiện được các tác vụ tạo hội thoại trao đôi
giữa các đối tượng trong cùng một công ty, xử lý thao tác đánh dấu và đã xem, thông báo tin nhắn mới, gửi/tải các file phương tiện, thực hiện cuộc gọi giữa các thành viên trong công ty
16
Trang 17
b Quy trình nhắn tin
-_ Đăng nhập tài khoản người dùng Firebase
- Ung dung của bạn nhận được một tin nhắn
-_ Mở đoạn hội thoại, tin nhắn vừa nhận xuất hiện trên khung chat Sau đó ứng dụng sẽ đánh dấu là đã đọc
- Nhập văn bản, nhân gửi, văn bản vừa nhập hiển thị trên khung chat Tin nhắn lưu trữ vào
cơ sở dữ liệu theo thời gian thực Firebase
-_ Khi nhấn gửi, ứng dụng của đối phương sẽ nhận được thông báo và quy trình quay lại
bước một
Gui tin nhan
c
User1 nhận thông báo Tầnh 11-5 Quy trình nhắn tin
Định nghĩa bố cục
- _ Tập tin Activity_Chat.xml với thành phân gốc là RelativeLayout sẽ được ràng buộc với Activity_Chatjava để xác định nội dung của màn hình chính của dịch vụ Bố cục gốm:
o_ Một danh sách hiển thi tất cả các tin nhắn chat trong cùng một công ty theo thứ
tự thời gian o_ Một trừng input nơi người dùng có thê nhập tin nhắn mới o_ Một nút mà người dùng có thê nhắn vào đề gửi tin nhắn
- _ Tập tin message.xmI sẽ đóng vai trò chuyề đến phân tạo bố cục cho các tin nhắn chat với thành phần gốc là RelativeLayout
17