1. Trang chủ
  2. » Giáo Dục - Đào Tạo

phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native

95 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phát triển mạng xã hội từ thiện đa nền tảng dựa trên React Native
Tác giả Nguyễn Đăng Thắng, Ngô Đồng Thiện
Người hướng dẫn ThS. Dương Hữu Thành
Trường học Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2022
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 95
Dung lượng 8,55 MB

Cấu trúc

  • Chương 1: GIỚI THIỆU ĐỀ TÀI (14)
    • 1.1. Tổng quan đề tài (14)
    • 1.2. Lý do chọn đề tài (14)
    • 1.3. Mục đích đề tài (15)
    • 1.4. Đối tượng và phạm vi đề tài (15)
  • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT (16)
  • CHƯƠNG 1 (0)
  • CHƯƠNG 2 (0)
    • 2.1. React Native (16)
      • 2.1.1. Giới thiệu React Native (16)
      • 2.1.2. Kiến trúc React Native (16)
      • 2.1.3. Javascripts (18)
      • 2.1.4. Hook (19)
      • 2.1.5. Navigation (21)
      • 2.1.6. Components (21)
      • 2.1.7. Props (22)
      • 2.1.8. Chương trình “Hello World” đơn giản (22)
    • 2.2. NET Core (25)
      • 2.2.1. Giới thiệu .NET Core (25)
      • 2.2.3. Entity Framework (27)
      • 2.2.4. REST APIs (27)
      • 2.2.5. HTTP request (28)
      • 2.2.6. HTTP status code (28)
    • 2.3. Firebase (29)
    • 2.4. Python Flask (30)
  • CHƯƠNG 3: MẠNG XÃ HỘI TỪ THIỆN (32)
  • CHƯƠNG 3 (0)
    • 3.1. Giới thiệu hệ thống (32)
    • 3.2. Phân tích hệ thống (32)
      • 3.2.1. Tác nhân (32)
      • 3.2.2. Biểu đồ Use Case của hệ thống (32)
      • 3.2.3. Đặc tả use case (33)
      • 3.2.4. Activity Diagram (37)
      • 3.2.5. Lược đồ cơ sở dữ liệu (39)
      • 3.2.6. Danh sách api mạng xã hội từ thiện (44)
    • 3.3. Các tính năng đã phát triển (45)
      • 3.3.1. Login với google và user (45)
      • 3.3.2. Trích dẫn tin tức từ nhiều nguồn (48)
      • 3.3.3. Chi tiết từng bài viết (49)
      • 3.3.4. Đăng bài (50)
      • 3.3.5. Danh sách bài đăng (51)
      • 3.3.6. Comment bài viết (52)
      • 3.3.7. Danh mục đấu giá bài đăng (55)
      • 3.3.8. Màn hình thông báo center (82)
      • 3.3.9. Màn hình thông tin Account, User (83)
      • 3.3.10. Quyên góp (84)
  • CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (92)
  • CHƯƠNG 4 (0)
    • 4.1. Kết luận (92)
    • 4.2. Hướng phát triển (92)
  • TÀI LIỆU THAM KHẢO (93)
  • PHỤ LỤC (94)

Nội dung

Để đạt được những kết quả như vậy, chúng em xin chân thành cảm ơn khoa Công nghệ thông tin trường Đại học Sư phạm Kỹ thuật TP.HCM đã tạo điều kiện cho chúng em được học tập và nghiên cứu

GIỚI THIỆU ĐỀ TÀI

Tổng quan đề tài

Trong cuộc sống của chúng ta có rất nhiều hoàn cảnh khó khăn, những mảnh đời cần được giúp đỡ Ngày nay có các nhà hảo tâm mang tấm lòng yêu thương giúp đỡ những người có hoàn cảnh đó Hoạt động từ thiện ngày nay một trong những hành động tích cực và yêu thương người đang được lan rộng Cùng với quá trình toàn cầu hóa và sự phát triển của công nghệ thông tin, mạng internet trên thế giới và Việt Nam ngày càng phát triển mạnh mẽ Sự tham gia của các cá nhân trên mạng ngày càng tích cực; và nhu cầu chia sẻ thông tin, kết nối bạn bè là nhu cầu thiết yếu thúc đẩy sự ra đời và phát triển của các mạng xã hội Từ những yếu tố trên, nhu cầu nắm bắt những thông tin từ thiện mới nhất, chia sẻ sự yêu thương của các nhà hảo tâm ngày càng to lớn, hàng loạt những website, ứng dụng trực tuyến liên quan tới từ thiện được tạo ra.

Lý do chọn đề tài

Vừa qua, vào thời điểm dịch bệnh xảy ra lên đến đỉnh điểm, thời gian giãn cách xã hội kéo dài ở các thành phố lớn làm cho các cá nhân, tổ chức muốn đứng ra kêu gọi và triển khai từ thiện cũng trở nên khó khăn do những quy định gắt gao của Chỉ thị 16 Đứng trước những khó khăn trên, nhiều ứng dụng thiện nguyện ra đời nhằm giúp các cá nhân, tổ chức có thể làm từ thiện tại nhà Không chỉ mang đến cơ hội quyên góp tiền, các ứng dụng này đã phát triển với nhiều tính năng cùng các hình thức khác nhau để giúp đỡ những gia đình khó khăn, đồng hành cùng họ tìm thấy được những lạc quan và niềm tin để vững tâm vượt qua đại dịch

Không dừng lại ở đó, những phát triển công nghệ cũng đã được vận dụng trong nhiều ứng dụng thiện nguyện mang tính lâu dài, xây dựng nên nền tảng giúp truyền thống tương thân tương ái của dân tộc Việt Nam Trong tương lai, đây sẽ là tiền đề sẽ góp phần giữ gìn được vẻ đẹp vốn có của hoạt động từ thiện, đồng thời xóa bỏ mọi rào cản về địa lý hay cả những mặc cảm về tài chính mang lại cơ hội giúp đời, giúp người cho bất kỳ ai có lòng tốt

Tuy nhiên, dù đã có một số ứng dụng thiện nguyện, nhưng nhu cầu của các nhà hảo tâm vẫn rất cao và tính phân loại càng cần thiết Ứng dụng phải được xem như cầu nối giữa các nhà hảo tâm và người kêu gọi từ thiện, các nhà hảo tâm có thể dễ dàng gửi

11 những lời động viên cũng như theo dõi được diễn biến của các hoàn cảnh sau khi được giúp đỡ

Chính vì những lý do trên, chúng em quyết định chọn đề tài “Phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native” để thực hiện.

Mục đích đề tài

Chúng em chọn đề tài này, với mục đích xây dựng một ứng dụng mạng xã hội từ thiện chia sẻ thông tin những hoàn cảnh khó khăn cần được giúp đỡ, cũng như tạo điều kiện để các nhà hảo tâm có thể làm từ thiện một cách dễ dàng, thoải mái nhất Ở đây, mọi người có thể trao đổi, bàn bạc với nhau để đi tới những quyết định thiện nguyện thống nhất Hơn nữa, với tính năng chia sẻ những hoàn cảnh khó khăn từ ứng dụng đến các nền tảng xã hội sẽ càng giúp lan tỏa và kết nối những tấm lòng hảo tâm một cách mạnh mẽ Đây cũng là một hành động thiết thực, một nghĩa cử cao đẹp mà cá nhân đều có thể làm trong thời từ thiện 4.0 ngày nay.

Đối tượng và phạm vi đề tài

Phạm vi nghiên cứu: các nền tảng mạng xã hội ở Việt Nam Đối tượng nghiên cứu: mạng xã hội từ thiện và tình hình phát triển mạng xã hội từ thiện tại Việt Nam Khách thể nghiên cứu là người dùng trên các nền tảng mạng xã hội ở Việt Nam

CƠ SỞ LÝ THUYẾT

React native là một công cụ giúp chúng ta xây dựng các ứng dụng trên môi trường native với lập trình đa nền tảng Nó là một framework mã nguồn mở do Facebook phát triển, cho phép bạn phát triển phần mềm trên điện thoại di động Android và IOS bằng Javascript React native tương tự như React, vì vậy chúng sử dụng các native components thay vì các web components Do đó, để hiểu rõ về cấu trúc của React native, chúng ta cần phải có các kiến thức cơ bản về các khái niệm cơ bản của React như là JSX, components, props hay là state

React Native được Facebook phát hành lần đầu tiên dưới dạng một dự án mã nguồn mở vào năm 2015

Chỉ trong vài năm, nó đã trở thành một trong những giải pháp hàng đầu được sử dụng cho mobile development Việc phát triển React Native được sử dụng để cung cấp năng lượng cho một số ứng dụng di động hàng đầu thế giới, bao gồm Instagram, Facebook và Skype

Khi khởi chạy một React Native app, phần code JS sẽ được package (được gọi là

JS Bundle) và được tách riêng ra với phần Native Code (Android/IOS)

Lúc này, app sẽ được thực thi bởi 3 threads sau:

1 JS thread (Javascript thread/ Main thread): Được sử dụng bởi JS Engine, dùng để chạy JS bundle

2 Native/UI thread: Được sử dụng để khởi chạy các native module, các tiến trình render UI, animations, gesture handle,

3 Shadow thread: Được sử dụng để tính toán Layout của element trước khi render ra màn hình

Hình 2.1: Kiến trúc cũ React Native (nguồn: https://viblo.asia/p/mot-chut-ve-kien- truc-moi-cua-react-native-Az45bRXO5xY) Đối với kiến trúc cũ, ngay cả đối với một tương tác bất kì lớn nhỏ nào, nó sẽ phải đi qua tất cả các luồng trên, thực tế thì điều này không quá tệ nhưng performance hoặc đặc biệt là một vài frames sẽ bị drop vì responses không được đồng bộ với main thread trừ khi đây là những thao tác thực sự được đồng bộ hóa Vì thế, một kiến trúc React Native mới đã được đề ra

Bốn thành phần chính của kiến trúc mới:

- JSI: ở kiến trúc hiện tại, JS Thread giao tiếp với Native/UI Thread qua một thứ gọi là Bridge, dữ liệu được gửi từ thread này qua bridge sẽ được seralized thành JSON và được decode ở thread bên kia Có thể hiểu là JS thread không biết Native thread đang làm gì và ngược lại, tất cả đều phải đợi data từ Bridge trả về

- Fabric: là một rendering system, thứ sẽ thay thế cho UI manager hiện tại Nhờ JSI loại bỏ Bridge, nên các hành vi người dùng như cuộn, kéo thả, sẽ được Fabric ưu tiên thực hiện sync (Đồng bộ) trên JS thread hoặc Native thread, trong khi những tasks khác như gọi API sẽ được thực thi async (bất đồng bộ)

- Turbo Modules: Ở kiến trúc hiện tại, tất cả Native Modules được sử dụng bởi JavaScript (Bluetooth, Camera, Location, ) phải được khởi tạo trước khi app khởi động xong Có nghĩa là kể cả khi người dùng không có nhu cầu sử dụng những module này thì nó vẫn được khởi tạo lúc app khởi động Với Turbo

14 Modules, giờ đây các Native Modules được lazy-loaded (nghĩa là khi nào cần mới dùng tới) thay vì load tất cả trong khi khởi động

- CodeGen: JavaScript là một ngôn ngữ kiểu động (Dynamically typed language), còn JSI thì lại được viết bằng C++, một ngôn ngữ kiểu tĩnh (Statically Typed Language) Vấn đề giờ là cần phải đảm bảo giao tiếp thông suốt giữa cả hai Đó là lí do kiến trúc mới cũng bao gồm luôn một static type checker gọi là CodeGen CodeGen sẽ sử dụng TypeScript/Flow để generate nhiều native code ở build time hơn thay vì ở run time Tóm lại thì Codegen giúp: code size nhỏ hơn, thực thi nhanh hơn, ít lỗi hơn

JavaScript là ngôn ngữ lập trình phổ biến nhất trên thế giới trong suốt 20 năm qua Nó cũng là một trong số 3 ngôn ngữ chính của lập trình web:

1 HTML: Giúp bạn thêm nội dung cho trang web

2 CSS: Định dạng thiết kế, bố cục, phong cách, canh lề của trang web

3 JavaScript: Cải thiện cách hoạt động của trang web

JavaScript có thể học nhanh và dễ dàng áp dụng cho nhiều mục đích khác nhau, từ việc cải thiện tính năng của website đến việc chạy game và tạo phần mềm nền web Hơn nữa, có hàng ngàn mẫu template JavaScript và ứng dụng ngoài kia, nhờ vào sự cống hiến của cộng đồng, đặc biệt là Github

15 JavaScript có rất nhiều ưu điểm khiến nó vượt trội hơn so với các đối thủ, đặc biệt trong các trường hợp thực tế Sau đây chỉ là một số lợi ích của JavaScript:

1 Bạn không cần một compiler vì web browser có thể biên dịch nó bằng HTML;

2 Nó dễ học hơn các ngôn ngữ lập trình khác;

3 Lỗi dễ phát hiện hơn và vì vậy dễ sửa hơn;

4 Nó có thể được gắn trên một số element của trang web hoặc event của trang web như là thông qua click chuột hoặc di chuột tới;

5 JS hoạt động trên nhiều trình duyệt, nền tảng, vâng vâng;

6 Bạn có thể sử dụng JavaScript để kiểm tra input và giảm thiểu việc kiểm tra thủ công khi truy xuất qua database;

7 Nó giúp website tương tác tốt hơn với khách truy cập;

8 Nó nhanh hơn và nhẹ hơn các ngôn ngữ lập trình khác

Hình 2.2: JavaScript (nguồn: https://mona.media/thiet-ke-website-bang-ngon-ngu- javascript/)

Từ phiên bản 16.8 trở đi, chúng ta đã có thể sử dụng state trong stateless (functional) component, việc mà từ trước tới nay ta bắt buộc phải khai báo Class Cộng với việc không sử dụng Class kế thừa từ React Component nữa nên giờ đây kích thước bundle sẽ được giảm đáng kể bởi code sử dụng Hooks

16 Để có thể thay thế được Class thì React Hooks cung cấp cho chúng ta một bộ các built-in Hooks, giúp chúng ta sử dụng được các thành phần tạo nên React, có 2 loại built-in đó là: Basic Hooks và Additional Hooks

2.1.4.1 useState và useEffect useState nhận đầu vào là giá trị khởi tạo của 1 state và trả ra 1 mảng gồm có 2 phần tử, phần tử đầu tiên là state hiện tại, phần tử thứ 2 là 1 function dùng để update state Ví dụ:

Hình 2.3: Ví dụ useState useEffect cho phép ta có thể thực hiện công việc call API Để tránh việc hàm useEffect luôn chạy vào mỗi khi có thay đổi State thì ta có thể truyền vào tham số thứ 2 trong useEffect đó là 1 array, trong array này ta có thể truyền vào đó những giá trị mà useEffect sẽ subcribe nó, tức là chỉ khi nào những giá trị đó thay đổi thì hàm useEffect mới được thực thi Hoặc bạn cũng có thể truyền vào 1 array rỗng thì khi đó nó sẽ chỉ chạy 1 lần đầu tiên sau khi render

Thực tế khi sử dụng useState thì nó sẽ trả về 1 phiên bản đơn giản của useReducer, vậy nên chúng ta có thể coi useReducer như một phiên bản nâng cao hơn

17 dùng để thay thế cho việc sử dụng useState Nếu đã làm việc với React-Redux thì chắc hẳn bạn sẽ dễ dàng nhận ra flow quen thuộc này phải không nào Giống như reducer trong Redux thì useReducer cũng nhận vào một reducer dạng (state, action) và trả ra một newState Khi sử dụng chúng ta sẽ nhận được một cặp bao gồm current state và dispatch function

React Native

React native là một công cụ giúp chúng ta xây dựng các ứng dụng trên môi trường native với lập trình đa nền tảng Nó là một framework mã nguồn mở do Facebook phát triển, cho phép bạn phát triển phần mềm trên điện thoại di động Android và IOS bằng Javascript React native tương tự như React, vì vậy chúng sử dụng các native components thay vì các web components Do đó, để hiểu rõ về cấu trúc của React native, chúng ta cần phải có các kiến thức cơ bản về các khái niệm cơ bản của React như là JSX, components, props hay là state

React Native được Facebook phát hành lần đầu tiên dưới dạng một dự án mã nguồn mở vào năm 2015

Chỉ trong vài năm, nó đã trở thành một trong những giải pháp hàng đầu được sử dụng cho mobile development Việc phát triển React Native được sử dụng để cung cấp năng lượng cho một số ứng dụng di động hàng đầu thế giới, bao gồm Instagram, Facebook và Skype

Khi khởi chạy một React Native app, phần code JS sẽ được package (được gọi là

JS Bundle) và được tách riêng ra với phần Native Code (Android/IOS)

Lúc này, app sẽ được thực thi bởi 3 threads sau:

1 JS thread (Javascript thread/ Main thread): Được sử dụng bởi JS Engine, dùng để chạy JS bundle

2 Native/UI thread: Được sử dụng để khởi chạy các native module, các tiến trình render UI, animations, gesture handle,

3 Shadow thread: Được sử dụng để tính toán Layout của element trước khi render ra màn hình

Hình 2.1: Kiến trúc cũ React Native (nguồn: https://viblo.asia/p/mot-chut-ve-kien- truc-moi-cua-react-native-Az45bRXO5xY) Đối với kiến trúc cũ, ngay cả đối với một tương tác bất kì lớn nhỏ nào, nó sẽ phải đi qua tất cả các luồng trên, thực tế thì điều này không quá tệ nhưng performance hoặc đặc biệt là một vài frames sẽ bị drop vì responses không được đồng bộ với main thread trừ khi đây là những thao tác thực sự được đồng bộ hóa Vì thế, một kiến trúc React Native mới đã được đề ra

Bốn thành phần chính của kiến trúc mới:

- JSI: ở kiến trúc hiện tại, JS Thread giao tiếp với Native/UI Thread qua một thứ gọi là Bridge, dữ liệu được gửi từ thread này qua bridge sẽ được seralized thành JSON và được decode ở thread bên kia Có thể hiểu là JS thread không biết Native thread đang làm gì và ngược lại, tất cả đều phải đợi data từ Bridge trả về

- Fabric: là một rendering system, thứ sẽ thay thế cho UI manager hiện tại Nhờ JSI loại bỏ Bridge, nên các hành vi người dùng như cuộn, kéo thả, sẽ được Fabric ưu tiên thực hiện sync (Đồng bộ) trên JS thread hoặc Native thread, trong khi những tasks khác như gọi API sẽ được thực thi async (bất đồng bộ)

- Turbo Modules: Ở kiến trúc hiện tại, tất cả Native Modules được sử dụng bởi JavaScript (Bluetooth, Camera, Location, ) phải được khởi tạo trước khi app khởi động xong Có nghĩa là kể cả khi người dùng không có nhu cầu sử dụng những module này thì nó vẫn được khởi tạo lúc app khởi động Với Turbo

14 Modules, giờ đây các Native Modules được lazy-loaded (nghĩa là khi nào cần mới dùng tới) thay vì load tất cả trong khi khởi động

- CodeGen: JavaScript là một ngôn ngữ kiểu động (Dynamically typed language), còn JSI thì lại được viết bằng C++, một ngôn ngữ kiểu tĩnh (Statically Typed Language) Vấn đề giờ là cần phải đảm bảo giao tiếp thông suốt giữa cả hai Đó là lí do kiến trúc mới cũng bao gồm luôn một static type checker gọi là CodeGen CodeGen sẽ sử dụng TypeScript/Flow để generate nhiều native code ở build time hơn thay vì ở run time Tóm lại thì Codegen giúp: code size nhỏ hơn, thực thi nhanh hơn, ít lỗi hơn

JavaScript là ngôn ngữ lập trình phổ biến nhất trên thế giới trong suốt 20 năm qua Nó cũng là một trong số 3 ngôn ngữ chính của lập trình web:

1 HTML: Giúp bạn thêm nội dung cho trang web

2 CSS: Định dạng thiết kế, bố cục, phong cách, canh lề của trang web

3 JavaScript: Cải thiện cách hoạt động của trang web

JavaScript có thể học nhanh và dễ dàng áp dụng cho nhiều mục đích khác nhau, từ việc cải thiện tính năng của website đến việc chạy game và tạo phần mềm nền web Hơn nữa, có hàng ngàn mẫu template JavaScript và ứng dụng ngoài kia, nhờ vào sự cống hiến của cộng đồng, đặc biệt là Github

15 JavaScript có rất nhiều ưu điểm khiến nó vượt trội hơn so với các đối thủ, đặc biệt trong các trường hợp thực tế Sau đây chỉ là một số lợi ích của JavaScript:

1 Bạn không cần một compiler vì web browser có thể biên dịch nó bằng HTML;

2 Nó dễ học hơn các ngôn ngữ lập trình khác;

3 Lỗi dễ phát hiện hơn và vì vậy dễ sửa hơn;

4 Nó có thể được gắn trên một số element của trang web hoặc event của trang web như là thông qua click chuột hoặc di chuột tới;

5 JS hoạt động trên nhiều trình duyệt, nền tảng, vâng vâng;

6 Bạn có thể sử dụng JavaScript để kiểm tra input và giảm thiểu việc kiểm tra thủ công khi truy xuất qua database;

7 Nó giúp website tương tác tốt hơn với khách truy cập;

8 Nó nhanh hơn và nhẹ hơn các ngôn ngữ lập trình khác

Hình 2.2: JavaScript (nguồn: https://mona.media/thiet-ke-website-bang-ngon-ngu- javascript/)

Từ phiên bản 16.8 trở đi, chúng ta đã có thể sử dụng state trong stateless (functional) component, việc mà từ trước tới nay ta bắt buộc phải khai báo Class Cộng với việc không sử dụng Class kế thừa từ React Component nữa nên giờ đây kích thước bundle sẽ được giảm đáng kể bởi code sử dụng Hooks

16 Để có thể thay thế được Class thì React Hooks cung cấp cho chúng ta một bộ các built-in Hooks, giúp chúng ta sử dụng được các thành phần tạo nên React, có 2 loại built-in đó là: Basic Hooks và Additional Hooks

2.1.4.1 useState và useEffect useState nhận đầu vào là giá trị khởi tạo của 1 state và trả ra 1 mảng gồm có 2 phần tử, phần tử đầu tiên là state hiện tại, phần tử thứ 2 là 1 function dùng để update state Ví dụ:

Hình 2.3: Ví dụ useState useEffect cho phép ta có thể thực hiện công việc call API Để tránh việc hàm useEffect luôn chạy vào mỗi khi có thay đổi State thì ta có thể truyền vào tham số thứ 2 trong useEffect đó là 1 array, trong array này ta có thể truyền vào đó những giá trị mà useEffect sẽ subcribe nó, tức là chỉ khi nào những giá trị đó thay đổi thì hàm useEffect mới được thực thi Hoặc bạn cũng có thể truyền vào 1 array rỗng thì khi đó nó sẽ chỉ chạy 1 lần đầu tiên sau khi render

Thực tế khi sử dụng useState thì nó sẽ trả về 1 phiên bản đơn giản của useReducer, vậy nên chúng ta có thể coi useReducer như một phiên bản nâng cao hơn

17 dùng để thay thế cho việc sử dụng useState Nếu đã làm việc với React-Redux thì chắc hẳn bạn sẽ dễ dàng nhận ra flow quen thuộc này phải không nào Giống như reducer trong Redux thì useReducer cũng nhận vào một reducer dạng (state, action) và trả ra một newState Khi sử dụng chúng ta sẽ nhận được một cặp bao gồm current state và dispatch function

NET Core

ASP.NET Core là một web framework mã nguồn và được tối ưu hóa cho cloud để phát triển các ứng dụng web chạy trên nhiều nền tảng như Windows, Linux và Mac Hiện tại, nó bao gồm MVC framework được kết hợp các tính năng của MVC và Web API thành một web framework duy nhất

 Các ứng dụng ASP.NET Core có thể chạy trên NET Core hoặc trên NET Framework hoàn chỉnh

 Nó đã được thiết kế để cung cấp một framework tối ưu cho các ứng dụng để triển khai tới cloud hoặc chạy on-premises

 Nó bao gồm những modular với các thành phần tối thiểu, do đó bạn giữ được tính linh hoạt trong quá trình xây dựng các giải pháp của mình

 Có thể phát triển và chạy các ứng dụng đa nền tảng từ ASP.NET Core trên Windows, Mac và Linux Nó cũng triển khai đặc điểm của NET Standard Ưu điểm NET core

 ASP.NET Core có một số thay đổi kiến trúc dẫn đến modular framework nhỏ hơn

 ASP.NET Core không còn dựa trên System.Web.dll Nó dựa trên một tập hợp nhiều yếu tố của Nuget packages

 Điều này cho phép bạn tối ưu ứng dụng của mình chỉ cần những NuGet packages cần thiết

 Lợi ích của diện tích bề mặt ứng dụng nhỏ hơn thì bảo mật chặt chẽ hơn, giảm dịch vụ, cải thiện hiệu suất và giảm chi phí

Với ASP.NET Core, bạn có thể nhận được các cải tiến sau:

 Xây dựng và chạy các ứng dụng ASP.NET Core đa nền tảng trên Windows, Mac và Linux

 Được xây dựng trên NET Core, hỗ trợ side-by-side app versioning

 Công cụ mới giúp đơn giản hóa việc phát triển web hiện đại

 Liên kết đơn các web stack như Web UI và API Web

 Cấu hình dựa trên môi trường đám mây sẵn có

 Được xây dựng dựa trên cho DI (Dependency Injection)

 Tag Helpers làm cho các Razor markup trở nên tự nhiên hơn với HTML

 Có khả năng host trên IIS hoặc self-host

Khi xây dựng Web API trong Asp.net Core, về cơ bản tiếp tục sử dụng MVC framework với một số thay đổi về kỹ thuật Điều này có nghĩa là khi xây dựng Web API, xây dựng hoặc sử dụng các thành phần Model như trong ứng dụng MVC Controller trong Web API chính là Controller của MVC

Do vậy tiếp tục làm việc với những khái niệm quen thuộc từ MVC như action, routing, model binding, model validation, view model

Có thể hình dung rằng thành phần View của MVC trong Web API giờ không còn dành cho người dùng (user-friendly) nữa mà là dành cho chương trình khác sử dụng (machine-friendly)

Như vậy, Web API trong Asp.net Core không phải là một framework riêng rẽ Ứng dụng Web API có thể triển khai song song bên cạnh ứng dụng MVC hoặc có thể xây dựng hoàn toàn độc lập

Tuy nhiên cần lưu ý, mỗi loại client có cách khác nhau để sử dụng dịch vụ do Web API cung cấp

Entity Framework ra đời nhằm hỗ trợ sự tương tác giữa các ứng dụng trên nền tảng NET với các cơ sở dữ liệu quan hệ Hay, Entity Framework chính là công cụ giúp ánh xạ giữa các đối tượng trong ứng dụng, phần mềm với các bảng của một cơ sở dữ liệu quan hệ

Hình 2.12: Entity Framework (nguồn: https://chiasekinang.com/entity-framework-la- gi/)

RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource Nó chú trọng vào tài nguyên hệ thống (tệp văn bản, ảnh, âm thanh, video, hoặc dữ liệu động…), bao gồm các trạng thái tài nguyên được định dạng và được truyền tải qua HTTP Ở đây ta sử dụng .NET để tạo rest API

Hình 2.13: REST APIs (nguồn: https://topdev.vn/blog/restful-api-la-gi/)

REST hoạt động chủ yếu dựa vào giao thức HTTP Các hoạt động cơ bản nêu trên sẽ sử dụng những phương thức HTTP riêng

GET (SELECT): Trả về một Resource hoặc một danh sách Resource

POST (CREATE): Tạo mới một Resource

PUT (UPDATE): Cập nhật thông tin cho Resource

DELETE (DELETE): Xoá một Resource

Những phương thức hay hoạt động này thường được gọi là CRUD tương ứng với Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa

Khi chúng ta request một API nào đó thường thì sẽ có vài status code để nhận biết sau:

200 OK – Trả về thành công cho những phương thức GET, PUT, PATCH hoặc DELETE

201 Created – Trả về khi một Resource vừa được tạo thành công

204 No Content – Trả về khi Resource xoá thành công

304 Not Modified – Client có thể sử dụng dữ liệu cache

400 Bad Request – Request không hợp lệ

401 Unauthorized – Request cần có auth

403 Forbidden – bị từ chối không cho phép

404 Not Found – Không tìm thấy resource từ URI

405 Method Not Allowed – Phương thức không cho phép với user hiện tại

410 Gone – Resource không còn tồn tại, Version cũ đã không còn hỗ trợ

415 Unsupported Media Type – Không hỗ trợ kiểu Resource này

422 Unprocessable Entity – Dữ liệu không được xác thực

429 Too Many Requests – Request bị từ chối do bị giới hạn.

Firebase

Firebase là dịch vụ cơ sở dữ liệu hoạt động trên nền tảng đám mây – cloud Kèm theo đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google Chức năng chính là giúp người dùng lập trình ứng dụng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu

Cụ thể là những giao diện lập trình ứng dụng API đơn giản Mục đích nhằm tăng số lượng người dùng và thu lại nhiều lợi nhuận hơn Đặc biệt, còn là dịch vụ đa năng và bảo mật cực tốt

Có các loại: Realtime, Authen, Storage

Sau quá trình sử dụng, cùng với những đánh giá của người dùng khác, tôi đã tổng hợp 10 ưu điểm nổi bật của Firebase:

 Tạo tài khoản và sử dụng dễ dàng

 Tốc độ phát triển nhanh

 Nhiều dịch vụ trong một nền tảng

 Được cung cấp bởi Google

 Tập trung vào phát triển giao diện người dùng

 Firebase không có máy chủ

 Tạo lưu lượng truy cập

Hình 2.14: Firebase (nguồn: https://fptcloud.com/firebase-la-gi/)

Python Flask

Flask là một web framework, nó là một Python module giúp dễ dàng phát triển các ứng dụng web Nó có tính mở rộng và là một microframework không bao gồm ORM (Object Relational Manager) hoặc các tính năng tương tự Nó được phát triển bởi Armin Ronacher, người dẫn đầu một nhóm những người đam mê Python quốc tế có tên là Poocco Flask dựa trên bộ công cụ Werkzeg WSGI và template engine Jinja2

Flask thường được coi là một microframework Nó được thiết kế để giữ cho cốt lõi của ứng dụng đơn giản và có thể mở rộng (scalable) Thay vì sử dụng lớp trừu tượng (abstraction layer) để hỗ trợ cơ sở dữ liệu, Flask hỗ trợ các phần extensions để thêm các khả năng như vậy vào ứng dụng

Hình 2.15: Python Flask (nguồn: https://nq.com.vn/flask-python-la-gi-tinh-nang-co- ban-va-ly-do-vi-sao-nen-su-dung/)

27 Flask là một trong những web framework phổ biến nhất, vì thế nó luôn được cập nhật và hiện đại Chúng ta có thể dễ dàng mở rộng chức năng và mở rộng quy mô cho các ứng dụng phức tạp Ở trong project này, chúng em sử dụng Python Flask để viết các api bài báo cho ứng dụng Cụ thể là thư viện Newspaper3k Thư viện này giúp tải toàn bộ những bài báo có trong một url xuống và sử dụng Ví dụ:

(nguồn:https://newspaper.readthedocs.io/en/latest/)

Giới thiệu hệ thống

Mạng xã hội từ thiện là nơi tổng hợp, cung cấp các thông tin từ thiện từ nhiều nguồn báo khác nhau, mọi người có thể đăng bài, thảo luận nhằm mục đích tạo nên một cộng đồng chung một chí hướng từ thiện, mạng xã hội từ thiện cũng cung cấp cho người dùng đấu giá để kêu gọi quyên góp hay tổ chức từ thiện một cách minh bạch và dễ dàng, app cung cấp thông tin, nơi các mạnh thường quân biết chỗ để cho, các người gặp khó khăn biết chỗ để lấy App nhằm mục đích xây dựng khối cộng đồng từ thiện thể hiện qua các bài đăng có ý nghĩa và giá trị.

Phân tích hệ thống

Hệ thống chỉ có tác nhân người dùng sử dụng

3.2.2 Biểu đồ Use Case của hệ thống Ứng dụng chủ yếu phục vụ cho người dùng nên ở trong hệ thống chỉ có tác nhân người dùng, ở hệ thống người dùng có đầy đủ các chức năng quan trọng để sử dụng ứng dụng một cách thuận tiện nhất

 Mô tả: use case này cho phép người dùng đăng nhập vào ứng dụng

 Tiền điều kiện: không có

 Hậu điều kiện: không có

1 Người dùng nhập email và password vào form Login và click vào nút Login

2 Hệ thống kiểm tra thông tin đăng nhập và thông báo đăng nhập thành công hoặc thất bại

3 Đăng nhập thành công hệ thống sẽ đưa vào màn hình chính

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

3.2.3.2 Use case “Đăng bài viết”

 Mô tả: use case này cho phép người dùng đăng bài viết

 Tiền điều kiện: người dùng đã đăng nhập thành công

 Hậu điều kiện: không có

1 Người dùng click vào đăng bài

2 Hoàn thành nội dung cần đăng

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

3.2.3.3 Use case “Bình luận bài viết”

 Mô tả: use case này cho phép người dùng bình luận một bài viết

 Tiền điều kiện: người dùng đã đăng nhập thành công

 Hậu điều kiện: không có

1 Người dùng click phần bình luận của bài viết

2 Hoàn thành nội dung cần bình luận

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

3.2.3.4 Use case “Thích bài viết”

 Mô tả: use case này cho phép người dùng thích một bài viết

 Tiền điều kiện: người dùng đã đăng nhập thành công

 Hậu điều kiện: không có

1 Người dùng click vào nút like của bài viết

2 Hệ thống cập nhật số lượt thích của bài viết

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

3.2.3.5 Use case “Chỉnh sửa thông tin cá nhân”

 Mô tả: use case này cho phép người dùng chỉnh sửa thông tin cá nhân của mình

 Tiền điều kiện: người dùng đã đăng nhập thành công

 Hậu điều kiện: không có

1 Người dùng click vào tab thông tin cá nhân

2 Click vào nút “Edit” và tiến hành chỉnh sửa thông tin

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

3.2.3.6 Use case “Đọc tin từ thiện”

 Mô tả: use case này cho phép người dùng đọc các tin tức từ thiện mà mình quan tâm

 Tiền điều kiện: người dùng đã đăng nhập thành công

 Hậu điều kiện: không có

1 Người dùng click vào tab trang chủ

2 Click vào nút bài viết từ thiện mình muốn đọc

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

3.2.3.7 Use case “Gắn cờ bài viết”

 Mô tả: use case này cho phép người dùng gắn cờ bài viết khiến mình khó chịu

 Tiền điều kiện: người dùng đã đăng nhập thành công

 Hậu điều kiện: không có

1 Người dùng click vào biểu tượng 3 chấm bên phải bài viết muốn gắn cờ

2 Tiến hành gắn cờ bài viết

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

 Mô tả: use case này cho phép người dùng tiến hành đăng ký tài khoản mới

 Tiền điều kiện: không có

 Hậu điều kiện: không có

1 Người dùng click vào nút “Register”

2 Tiến hành nhập đầy đủ thông tin

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

 Mô tả: use case này cho phép người đăng xuất tài khoản hiện tại của mình

 Tiền điều kiện: người dùng đã đăng nhập

 Hậu điều kiện: không có

1 Người dùng click vào tab thông tin cá nhân

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

3.2.3.10 Use case “Chỉnh sửa bài viết”

 Mô tả: use case này cho phép người dùng chỉnh sửa bài viết của mình

 Tiền điều kiện: người dùng đã đăng nhập thành công

 Hậu điều kiện: không có

1 Người dùng click vào biểu tượng 3 chấm bên phải bài viết muốn gắn cờ

2 Chọn chỉnh sửa bài viết và tiến hành chỉnh sửa

 Luồng thay thế: không có

 Luồng ngoại lệ: không có

Activity Diagram cho chức năng đấu giá từ thiện

Menu danh mục đấu giá:

Hình 3.2: Activity Diagram menu danh mục đấu giá

Chức năng chi tiết đấu giá

Hình 3.3: Activity Diagram chức năng chi tiết đấu giá

3.2.5 Lược đồ cơ sở dữ liệu

3.2.5.1 Ảnh lược đồ cơ sở dữ liệu

Hình 3.4: Lược đồ cơ sở dữ liệu

3.2.5.2 Mô tả lược đồ cơ sở dữ liệu

Cột Kiểu Ràng buộc Mô tả uid varchar(100) Primary key, not null Id của user firstname varchar(50) Tên của user lastname varchar(50) Họ của user mobile varchar(15) Số điện thoại của user email varchar(50) Email của user avatar text Ảnh đại diện của user

Cột Kiểu Ràng buộc Mô tả postid int(11) Primary key, not null Id của bài viết uid varchar(100) Foreign key, not null Id của user postcontent text Nội dung của bài viết picture text Ảnh bài viết likecount bigint(20) Số lượt thích của bài viết createdate timestamp Thời điểm tạo bài viết updatedate timestamp Thời điểm cập nhật bài viết status int(11) Trạng thái bài viết

Cột Kiểu Ràng buộc Mô tả commentid int(11) Primary key, not null

Id của bình luận postid int(11) Foreign key, not null Id của bài viết commentcontent text Nội dung của bình luận createdate timestamp Thời điểm đăng bình luận updatedate timestamp Thời điểm cập nhật bình luận commentpicture varchar(100) Ảnh của bình luận like int(11) Số lượt like uid varchar(100) Id của user

Cột Kiểu Ràng buộc Mô tả uid varchar(100) Not null Id của user postid int(11) Not null Id của bài viết

Cột Kiểu Ràng buộc Mô tả uid varchar(100) Not null Id của user postid int(11) Not null Id của bài viết status int(11) Trạng thái bài đấu giá

Cột Kiểu Ràng buộc Mô tả mcid int(11) Primary Key,

Id của minh chứng postid int(11) Not null Id của bài viết uid varchar(100) Id của user postcontent text Nội dung bài viết picture text Ảnh

Cột Kiểu Ràng buộc Mô tả historyid int(11) Primary Key,

Id của minh chứng userwin varchar(200) Id của user mới userold varchar(200) Id của user cũ topbid float Số tiền đấu giá dateclose timestamp Thời điểm đóng đấu giá postid int(11) Not null Id của bài viết

Cột Kiểu Ràng buộc Mô tả donateid int(11) Primary Key,

Id buổi quyên góp createdate timestamp Not null Thời gian ghi nhận payment float Tổng số tiền quyên góp postid int(11) Id bài viết status int(11) Trạng thái quyên góp topdonate varchar(100) User quyên góp nhiều nhất

Cột Kiểu Ràng buộc Mô tả donatedetailid int(11) Primary Key,

Id chi tiết lượt quyên góp createdate timestamp Not null Thời gian ghi nhận payment float Tổng số tiền đã quyên góp postid int(11) Id bài viết uid varchar(100) User quyên góp

3.2.5.3 Lược đồ cơ sở dữ liệu của api các bài báo Ảnh lược đồ cơ sở dữ liệu:

Hình 3.5: Lược đồ cơ sở dữ liệu api bài báo

Mô tả lược đồ cơ sở dữ liệu:

Cột Kiểu Ràng buộc Mô tả id int(11) Not null Id của user name varchar(50) Not null Id của bài viết url varchar(255) Trạng thái bài đấu giá

3.2.6 Danh sách api mạng xã hội từ thiện

Các tính năng đã phát triển

3.3.1 Login với google và user

Thông qua bảo mật chứng thực firebase, người dùng đăng nhập bằng username hoặc password thiết lập hoặc email cá nhân của mình

Giao diện đăng nhập chính

Hình 3.6: Giao diện đăng nhập chính Đăng ký tài khoản, người dùng nhập thông tin tương ứng để tạo tài khoản đăng nhập

Hình 3.7: Đăng ký tài khoản

3.3.2 Trích dẫn tin tức từ nhiều nguồn

Khi đăng nhập thành công, người dùng sẽ vào giao diện chính, đã có sẵn chức năng lưu thông tin đăng nhập trên thiết bị, người dùng không cần phải đăng nhập mỗi khi vào app Giao diện chính là giao diện tin tức từ thiện, nơi người dùng có thể xem được thông tin được trích dẫn từ nhiều nguồn báo khác nhau

Hình 3.8: Màn hình tin tức từ thiện

3.3.3 Chi tiết từng bài viết

Hình 3.9: Chi tiết bài viết

Người dùng đăng bài viết lên news feed, cộng đồng từ thiện sẽ thấy bài viết

Danh sách bài đăng của mọi user dùng ứng dụng, để đăng, chia sẻ thông tin từ thiện Mọi người có thể, like, comment bài viết

Hình 3.11: Danh sách bài đăng

Người dùng có thế comment bài viết, chỉnh sửa hoặc xóa comment

Chủ bài viết có quyền xóa bài đăng, chỉnh sửa bài đăng cá nhân, và bất chức năng đấu giá

Hình 3.13: Chỉnh sửa, xóa, bật đấu giá

Hình 3.14: Gắn cờ nội dung gây khó chịu

Nếu không phải người đăng bài post, người dùng có quyền gắn cờ các bài viết họ cảm thấy khó chịu, hệ thống sẽ tự động xóa bài post do có quá nhiều người gắn cờ bài viết

3.3.7 Danh mục đấu giá bài đăng

Người dùng muốn yêu cầu đấu giá bài đăng nhấn icon hình “tờ tiền” icon cuối cùng sau like và comment

Hình 3.15: Yêu cầu đấu giá bài đăng

Nếu là chủ sở hữu bài viết bạn không thể tự yêu cầu đấu giá bài đăng

Hình 3.16: Cảnh báo không thể đấu giá

Khi yêu cầu đấu giá 1 bài post, nếu chủ sở hữu bài post chưa bật tính năng đấu giá thì người dùng vào danh mục đấu giá, vào tab yêu cầu để xem danh sách hàng đợi những bài viết mà gửi yêu cầu đấu giá

Hình 3.17: Danh sách hàng đợi những bài viết yêu cầu đánh giá

Nếu là chủ sở hữu bài post, khi thấy có yêu cầu người dùng muốn đấu giá bài viết, có thể bật tính năng đấu giá bài viết

Hình 3.18: Bật đấu giá bài viết

Nếu chưa bật chức năng này, mà có người muốn đấu giá, vào tab được yêu cầu ở danh mục đấu giá để xem bài viết được gửi yêu cầu đấu giá, từ màn hình này có thể bật đấu giá theo mong muốn của các yêu cầu gửi tới

55 Bạn có thể tắt hoặc bật đấu giá bài viết ở tab được yêu cầu

Nếu bài viết được chủ sở hữu bật chức năng đấu giá, sẽ được di chuyển qua hàng đợi ở tab đấu giá ở danh mục đấu giá

Muốn tham gia đấu giá người dùng click vào nút tham gia đấu giá Màn hình đấu giá với thông tin chủ bài viết, mã số bài đầu giá, tổng số tiền đã đấu giá

Hình 3.21: Màn hình đấu giá

Click vào đặt giá, để đặt giá mong muốn

Hình 3.22: Nhập số tiền đặt giá

Số tiền hiện tại đang là 2 vnd, nếu nhập số tiền nhỏ hơn 2 thì không đúng với tiêu chí đấu giá, app sẽ báo lỗi, nếu nhập số tiền lớn hơn số tiền user hiển thị ở top đặt giá, sẽ đặt thành công và đứng đầu top đặt giá Nếu nhập 1 VND:

Hình 3.23: Nhập số tiền đấu giá nhỏ hơn hiện tại

Nếu nhập 3 VND, show thông báo và leo lên dẫn đầu đúng với tiêu chí 1 cuộc đấu giá

Hình 3.24: Nhập số tiền lớn hơn số tiền hiện tại

Chức năng danh sách trong đấu giá hiển thị toàn bộ lịch sử các user đã tham gia cuộc đấu giá Hiển thị số tiền và thời gian thật tương ứng

Hình 3.25: Màn hình thông tin user tham gia đấu giá

Nếu người dùng muốn xem lịch sử của cá nhân đã đặt giá như thế nào Xem ở chức năng lịch sử

Hình 3.26: Lịch sử đấu giá của user

Chức năng tiếp theo là chức năng tự động đấu giá, khi người dùng bật chức năng này, giá sẽ được đặt dựa trên công thức = tiền đã nhập + số tiền cao nhất tới hiện tại

Hình 3.27: Tự động đấu giá

Nhập số tiền tự động thành công, nút tự động sẽ luôn bật, có thể tắt nếu không muốn app tự động đặt nữa

Hình 3.28: Tắt tự động đấu giá

Ví dụ mức giá tự động đặt bạn nhập là 2 vnd, hệ thống sẽ tự nhận diện được số tiền mà user khác đặt giá thành công và cộng thêm số tiền tự động đặt

Hình 3.29: Ví dụ đấu giá tự động

Nếu là chủ bài viết, có thể kết thúc cuộc đấu giá với giá mong muốn

Hình 3.30: Kết thúc đấu giá

Hình 3.31: Thông báo xác nhận kết thúc đấu giá

Nếu không phải chủ bài viết và là người thắng cuộc sẽ thấy được thông tin số điện thoại để liên lạc trao đổi với chủ bài viết

Hình 3.32: Trao đổi, liên lạc với chủ bài viết

Minh chứng có 2 chiều, với phía người thắng cuộc bắt buộc phải gửi minh chứng (ảnh, thông tin, số điện thoại, tài khoản ngân hàng, để nhằm mục đích nâng cao việc từ thiện, hạn chế trục lợi cá nhân) Màn hình gửi minh chứng thành công, có thể chỉnh sửa minh chứng trước khi chủ bài viết chuyển nhượng

Hình 3.33: Màn hình đã gửi minh chứng

Màn hình của chủ post lục này sẽ thấy được thông tin minh chứng

Hình 3.34: Màn hình minh chứng chủ bài viết thấy

Nếu đã có minh chứng từ người thắng cuộc, chủ post có thể chuyển nhượng bài viết

Hình 3.35: Màn hình xác nhận chuyển nhượng bài viết

Chuyển nhượng thành công khi có minh chứng

Hình 3.36: Màn hình chuyển nhượng thành công khi có minh chứng

Chuyển nhượng thất bại khi không có minh chứng

Hình 3.37: Màn hình chuyển nhượng thất bại khi không có minh chứng

Lúc này ở hàng chờ tab thành công bên danh mục đấu giá sẽ hiển thị số tiền đã quyên góp, ghi nhận lịch sử

Hình 3.38: Màn hình những bài viết đấu giá thành công

Thông tin chủ cũ để xem được chủ cũ của bài viết Lúc này sẽ hiển thị toàn bộ thông tin của chủ cũ bài viết, để minh bạch hơn trong từ thiện đấu giá

Hình 3.39: Thông tin chủ cũ bài viết

Lúc này ở newfeed sẽ cập nhật bài viết đã được nhượng qua người thắng cuộc đi kèm minh chứng, nếu như minh chứng không rõ ràng, cộng đồng có thể cùng nhau gắn cờ bài viết để tránh kêu gọi quyên góp để trục lợi cho bản thân

Hình 3.40: Bài viết được cập nhật ở newfeed

3.3.8 Màn hình thông báo center

Gửi notify thiết bị, thông báo thích, đấu giá bài viết của bản thân

Hình 3.41: Màn hình thông báo của user

3.3.9 Màn hình thông tin Account, User Ở đây người dùng có thể chỉnh sửa thông tin cá nhân, danh sách bài đăng cá nhân và đăng xuất khỏi tài khoản

Hình 3.42: Màn hình thông tin account, user

Nhằm mục đích quyên góp tiền từ thiện thêm minh bạch, người dùng có thể bật chức năng quyên góp từ bài viết của họ để kêu gọi từ thiện

Hình 3.43: Màn hình bật quyên góp

81 Sau khi bật chức năng quyên góp, mọi người click vào bài post để xem buổi kêu gọi từ thiện diễn ra thế nào Mỗi lần kêu gọi cung cấp định danh của 1 ví chung không của riêng cá nhân nào, nhằm mục đích minh bạch và tránh trục lợi, ví này sẽ do quản trị viên quản lý khi có giấy phép đủ cơ sở để ủy quyền từ nhà nước hoặc bên thứ 3 có đủ uy tín như công an hoặc các ngân hàng lớn Điều này giúp phần nào giảm thiểu tối đa việc trục lợi của một số tổ chức hay thành phần cá nhân Các thông tin chính như ID bài viết hay còn gọi là ID ví, mỗi bài viết khi bật chức năng quyên góp đều thuộc quản lý 1 ví riêng, tổng số tiền quyên góp và các tính năng như xem lịch sử của cộng đồng, lịch sử cá nhân hay chức năng đặt tiền để quyên góp, ngoài ra chủ sở hữu bài post có toàn quyền kết thúc 1 buổi kêu gọi từ thiện khi cảm thấy số tiền đã đủ lớn

Hình 3.44: Màn hình sau khi bật quyên góp

82 Đầu tiên là chức năng đặt giá tiền quyên góp, ấn vào Đặt giá để tiến hành nhập mốc tiền muốn quyên góp

Hình 3.45: Màn hình đặt mốc tiền quyên góp Ấn đặt tiền để tiến hành đặt tiền, hệ thống sẽ tự động liên kết với paypal (ví điện tử toàn cầu với độ bảo mật và uy tín rất lớn) Số tiền sẽ tương ứng với số tiền người dùng đặt

Hình 3.46: Màn hình thanh toán bằng PayPal Ấn Continue để hệ thống tiếp tục thanh toán

Hình 3.47: Màn hình đang xử lý

Kết luận

Tụi em đã học được các kiến thức tổ chức cấu trúc dữ liệu, bảo mật người dùng, login qua bên thứ 3, thao tác với file và multiple files, cách triển khai backend và frontend, học hỏi được nhiều kiến thức lập trình về React Native và Asp.Net Core, tối ưu tốc độ load dữ liệu, thao tác live data và nhiều thứ khác

Qua đề tài lần này tụi em cũng rút ra được những kinh nghiệm về cách làm việc nhóm cần được tối ưu hơn, hoàn thiện một sản phẩm ở mức độ cao, cách sắp xếp các task đúng thời gian hoàn thành Ưu điểm: cơ bản dễ sử dụng, là nơi cung cấp những thông tin từ thiện từ nhiều nguồn báo ở Việt Nam (báo thanh niên, báo từ thiện, báo công an, …), một mạng xã hội cho phép người dùng chia sẻ thông tin, kêu gọi từ thiện với minh chứng và đấu giá minh bạch, người cho biết chỗ để cho, người cần lấy biết chỗ để lấy Là nơi quyên góp cho mọi người tránh việc trục lợi cá nhân do có một ví đại diện

Nhược điểm: Còn nhiều bước xác thực người dùng thêm để bảo mật và tránh trục lợi từ app hơn Tính năng đấu giá cần phải thao tác nhiều hoặc hiểu một chút về đấu giá để thao tác dễ dàng Giao diện chưa bắt mắt.

Hướng phát triển

Sẽ tăng cường khả năng bảo mật cho app bằng một số bước xác thực người dùng, như chứng minh thư và nhận diện khuôn mặt, một hệ thống bản đồ để mọi người xem được quá trình kêu gọi từ thiện từ lúc quyên góp tới lúc trao tay cho người dân cần hoặc gặp khó khăn, liên kết một số pháp lý liên quan tới sao kê, chứng minh, đảm bảo bảo mật thông tin người dùng, các mạnh thường quân dưới sự cho phép của nhà nước và công an

Ngày đăng: 26/09/2024, 12:53

HÌNH ẢNH LIÊN QUAN

Hình 3.13: Chỉnh sửa, xóa, bật đấu giá - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.13 Chỉnh sửa, xóa, bật đấu giá (Trang 53)
Hình 3.14: Gắn cờ nội dung gây khó chịu - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.14 Gắn cờ nội dung gây khó chịu (Trang 54)
Hình 3.15: Yêu cầu đấu giá bài đăng - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.15 Yêu cầu đấu giá bài đăng (Trang 55)
Hình 3.16: Cảnh báo không thể đấu giá - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.16 Cảnh báo không thể đấu giá (Trang 56)
Hình 3.19: Tắt đấu giá - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.19 Tắt đấu giá (Trang 60)
Hình 3.23: Nhập số tiền đấu giá nhỏ hơn hiện tại - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.23 Nhập số tiền đấu giá nhỏ hơn hiện tại (Trang 64)
Hình 3.30: Kết thúc đấu giá - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.30 Kết thúc đấu giá (Trang 71)
Hình 3.31: Thông báo xác nhận kết thúc đấu giá - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.31 Thông báo xác nhận kết thúc đấu giá (Trang 72)
Hình 3.32: Trao đổi, liên lạc với chủ bài viết - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.32 Trao đổi, liên lạc với chủ bài viết (Trang 73)
Hình 3.34: Màn hình minh chứng chủ bài viết thấy - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.34 Màn hình minh chứng chủ bài viết thấy (Trang 75)
Hình 3.35: Màn hình xác nhận chuyển nhượng bài viết - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.35 Màn hình xác nhận chuyển nhượng bài viết (Trang 76)
Hình 3.36: Màn hình chuyển nhượng thành công khi có minh chứng - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.36 Màn hình chuyển nhượng thành công khi có minh chứng (Trang 77)
Hình 3.37: Màn hình chuyển nhượng thất bại khi không có minh chứng - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.37 Màn hình chuyển nhượng thất bại khi không có minh chứng (Trang 78)
Hình 3.38: Màn hình những bài viết đấu giá thành công - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.38 Màn hình những bài viết đấu giá thành công (Trang 79)
Hình 3.44: Màn hình sau khi bật quyên góp - phát triển mạng xã hội từ thiện đa nền tảng dựa trên react native
Hình 3.44 Màn hình sau khi bật quyên góp (Trang 85)
w