Advertisement
  1. Code
  2. Android SDK

Ứng dụng Serverless với Cloud Functions của Firebase

by
Read Time:10 minsLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Mục tiêu của Firebase là giúp các nhà phát triển xây dựng các ứng dụng tốt hơn và giúp họ thành công. Bằng cách lưu ý đến back-end hoặc cơ sở hạ tầng của ứng dụng, Firebase cho phép bạn tập trung giải quyết các vấn đề cho người dùng của bạn. Một trong những tính năng thú vị mới được công bố tại Hội nghị Google Cloud Next '17 vào tháng 3 dành cho Firebase đó là Cloud Functions. Trong hướng dẫn này, bạn sẽ tìm hiểu về tính năng mới này bằng cách xây dựng một ứng dụng Android đơn giản bằng nó.

Cloud Functions cho Firebase là gì?

Cloud Functions chạy trong một môi trường Node.js được lưu trữ trên máy chủ riêng và có thể mở rộng, nơi bạn có thể chạy code JavaScript. Bạn chỉ cần tạo các hàm tương tác kích hoạt bất cứ khi nào một sự kiện xảy ra. Cloud Functions sẵn có cho Google Cloud Platform và Firebase (chúng được xây dựng dựa trên Google Cloud Functions).

Hiện tại, Cloud Functions hỗ trợ các kích hoạt sau, bạn có thể lắng nghe và phản hồi chúng:

  • Realtime Database Triggers: kích hoạt một hàm khi một sự kiện ghi xảy ra trên một đường dẫn trong một cơ sở dữ liệu.
  • Authentication Triggers: kích hoạt một hàm khi một người dùng mới được tạo hoặc khi một người dùng bị xóa.
  • Analytics Triggers: kích hoạt một hàm khi một sự kiện chuyển đổi mới được ghi nhật ký (log).
  • Cloud Storage Triggers: một hàm có thể được kích hoạt khi có bất kỳ sự thay đổi nào bên trong một nhóm chẳng hạn như một tập tin hoặc thư mục được tải lên, cập nhật hoặc xóa.
  • Cloud Pub/Sub Triggers: kích hoạt một hàm khi nhận được một tin nhắn mới trong một chủ đề Google Cloud Pub/Sub.
  • HTTPS Triggers: kích hoạt khi một yêu cầu được gới đến một endpoint.

Vậy Tại sao Sử dụng Cloud Functions?

Như vậy giờ đây bạn đã thấy một loạt các khả năng mà Cloud Functions có thể cung cấp. Nhưng tại sao sử dụng chúng?

Chạy và thiết lập một back-end và máy chủ có thể là một công việc thật sự khó khăn—bạn phải xử lý các vấn đề như khả năng mở rộng và viết code bằng các ngôn ngữ bên phía máy chủ—nhưng với Cloud Functions, sự phức tạp này sẽ giảm xuống. Ngoài ra, các tác vụ có tính toán cường độ cao có thể được thực hiện trên đám mây thay vì trên thiết bị của máy khách (chẳng hạn như thay đổi kích thước hình ảnh tải lên hoặc ghi vào nhiều đường dẫn của cơ sở dữ liệu). Code của bạn cũng sẽ an toàn trên đám mây hơn so với trên thiết bị khách, vì vậy bạn có thể lưu trữ một cách an toàn dữ liệu như là các khoá bí mật trên máy chủ của bạn.

Trong hướng dẫn này, bạn sẽ được học cách sử dụng Realtime Database Triggers, cái mà sẽ kích hoạt khi sự kiện ghi cơ sở dữ liệu xảy ra. Sau đó, chúng ta sẽ tìm hiểu cách sử dụng dịch vụ Firebase Cloud Messaging để gửi một thông báo đến các thiết bị đã đăng ký một chủ đề. Chúng ta sẽ tạo ra một ứng dụng đơn giản gọi là Tutsplus Alerts, ứng dụng sẽ gửi thông báo cho người đăng ký chủ đề "android" bất cứ khi nào có bài viết mới.

Các Yêu cầu

Để theo dõi hướng dẫn này, bạn cần rành về:

Và bạn cần cài đặt Node.js trên máy tính của bạn.

Hãy đọc các hướng dẫn sau đây trên Envato Tuts+ nếu bạn cần một số trợ giúp để làm quen với Firebase:

1. Tạo một Cloud Function

Cài đặt Firebase CLI

Bây giờ khi các yêu cầu đã được thiết lập, hãy tải về Cloud Functions.

Để bắt đầu sử dụng Cloud Functions, chúng ta cần có Firebase CLI (giao diện dòng lệnh) được cài đặt từ npm. Nếu bạn đã cài đặt Node trên máy tính của bạn, thì bạn có thể cài đặt Cloud Functions bằng lệnh sau:

Lệnh này sẽ cài đặt Firebase CLI trên toàn cục cùng với bất kỳ phụ thuộc Node.js cần thiết nào.

Khởi tạo Dự án

Để khởi tạo dự án của bạn, bạn cần:

  1. Chạy firebase login để đăng nhập Firebase thông qua trình duyệt và xác thực công cụ CLI.
  2. Tạo một thư mục dự án mới với tên là tutsplus-alerts.
  3. Cuối cùng, chạy firebase init functions từ thư mục mới đó. Công cụ này cung cấp cho bạn một tùy chọn để cài đặt các phụ thuộc bằng NPM. Bạn hoàn toàn có thể từ chối nếu bạn muốn quản lý các phụ thuộc theo cách khác.

Sau khi các lệnh này chạy thành công, cấu trúc dự án của bạn sẽ như sau:

  • .firebaserc: một tập tin ẩn giúp bạn nhanh chóng chuyển đổi giữa các dự án với lệnh firebase use.
  • firebase.json: mô tả các thuộc tính cho dự án của bạn.
  • functions/: thư mục này chứa tất cả các code cho các hàm của bạn.
  • functions/package.json: một tập tin package của NPM mô tả Cloud Functions của bạn.
  • functions/index.js: mã nguồn chính cho code Cloud Functions của bạn.
  • functions/node_modules/: thư mục chứa tất cả các phụ thuộc NPM đã cài đặt của bạn.

Nhập các Mô-đun Cần thiết và Khởi tạo Ứng dụng

Để phát triển ứng dụng Tutsplus Alerts đơn giản, chúng ta chỉ cần hai mô-đun node: Cloud FunctionsAdmin SDK modules (các mô-đun này đã được cài đặt sẵn cho chúng ta). Vì vậy, hãy đi đến index.js và yêu cầu (require) các mô-đun này, và sau đó khởi tạo một đối tượng ứng dụng admin.

Viết code Cloud Function

Bây giờ thì các mô-đun cần thiết cho dự án của chúng ta đã được import và khởi tạo, hãy viết code cho cloud function của chúng ta trong tập tin index.js. Như đã đề cập ở trên, chúng ta sẽ viết một hàm sẽ được khởi chạy khi một sự kiện onWrite() xảy ra trong cơ sở dữ liệu thời gian thực Firebase của chúng ta và sau đó, trong phản hồi, chúng ta sẽ gửi một thông báo (một thông báo downstream) đến những người đăng ký của thiết bị.

Trong đoạn code ở trên, chúng ta đang lắng nghe đường dẫn trong cơ sở dữ liệu /articles/{articleId}, trong đó {articleId} đại diện cho id của bài viết đã được viết thành công. Bây giờ, những gì chúng ta thật sự quan tâm là dữ liệu đã được ghi. Để có được điều đó, chúng ta sử dụng event.data, đó là một giao diện tĩnh DeltaSnapshot.

Sau đó, thêm dữ liệu từ bản lưu nhanh này vào một khối tin nhắn và gửi nó đến chủ đề "android". Code không đồng bộ được đơn giản hóa với JavaScript promise.

Lưu ý rằng trong đoạn code ở trên, chúng ta đã ghi vào console bằng cách sử dụng console.log(), điều này sẽ giúp chúng ta trong việc gỡ lỗi và giám sát. Chúng ta có thể xem bản ghi này trong dashboard của Firebase hoặc thông qua dòng lệnh với:

Lưu ý rằng vì điều này chạy trên Node.js, nên bạn có thể cài đặt các mô-đun khác có sẵn từ NPM. Bạn cũng có thể viết code bằng JavaScript ES6 hoặc TypeScript thay vì JavaScript thuần tuý.

Triển khai Cloud Function

Hãy triển khai Cloud Function của chúng ta. Hãy chạy lệnh này để triển khai:

Bây giờ chúng ta có thể viết code ứng dụng Android mà sẽ đăng ký vào chủ đề, ghi vào cơ sở dữ liệu thời gian thực và nhận một thông báo khi dữ liệu được ghi vào cơ sở dữ liệu thời gian thực của chúng ta—đó là lúc cloud function của chúng ta sẽ được thực thi!

2. Tạo Ứng dụng TutsplusAlerts

Tạo một Dự án Android Studio

Trước tiên, mở Android Studio và tạo một dự án mới "TutsplusAlerts" với một activity rỗng gọi là MainActivity.

Android Studio create new projectAndroid Studio create new projectAndroid Studio create new project

Để thực hiện theo, hãy đảm bảo rằng bạn đã tích hợp Firebase vào ứng dụng của bạn.

Thêm Phụ thuộc Cơ sở Dữ liệu Thời gian Thực

Thêm phụ thuộc sau đây vào tập tin build.gradle của bạn:

Hãy đảm bảo rằng bạn đồng bộ dự án của bạn sau khi thêm nó.

Tạo Model

Hãy mô hình hoá một thực thể bài viết để được lưu trữ vào cơ sở dữ liệu thời gian thực của chúng ta.

Tạo Layout XML

Layout XML của chúng ta cho activity chính sẽ chỉ có hai EditText và chỉ một button sẽ dùng để submit bài viết mới.

Ghi vào Cơ sở Dữ liệu Thời gian Thực

Bây giờ chúng ta sẽ ghi vào đường dẫn Cơ sở Dữ liệu Thời gian Thực /articles/.

Ứng dụng của bạn sẽ cần quyền ghi vào cơ sở dữ liệu. Đối với mục đích giới thiệu, bạn có thể thiết lập các Quy tắc Bảo mật của bạn để cho phép tất cả các quyền đọc và ghi. Trong một ứng dụng thực tế, bạn sẽ không bao giờ muốn sử dụng các cài đặt bảo mật không an toàn.

Bạn có thể tìm hiểu thêm về các Quy tắt Bảo mật trong Firebase trong bài viết của tôi ở đây trên Envato Tuts+.

Chạy Ứng dụng

Ở giai đoạn này, chúng ta có thể kiểm tra thử ứng dụng và xem Cloud Function của chúng ta đã được thực thi thành công hay chưa. Nhập một tiêu đề và tác giả, sau đó nhấp vào nút submit. Sau đó, truy cập trang dashboard Functions và xem nhật ký. Nhật ký tùy biến của chúng ta sẽ xuất hiện.

Cloud Functions DashboardCloud Functions DashboardCloud Functions Dashboard

Từ nhật ký ở trên, chúng ta thấy rằng chúng ta đã thực thi thành công Cloud Function của chúng ta và gửi một tin nhắn với một khối đến các thiết bị đã đăng ký chủ đề 'android' nhưng vẫn chưa có thiết bị nào đăng ký chủ đề cả. Trong phần tiếp theo, chúng ta sẽ sử dụng Firebase Cloud Messaging để các thiết bị có thể đăng ký một chủ đề và sau đó xử lý tin nhắn đến từ máy chủ để hiển thị một thông báo.

3. Thêm Hỗ trợ Firebase Cloud Messaging

Bao gồm Phụ thuộc

Bao gồm phụ thuộc Firebase Messaging vào tập tin build.gradle và sau đó đồng bộ dự án của bạn:

Xử lý Tin nhắn

Chúng ta cần tạo một dịch vụ thừa kế FirebaseMessagingService và override các callback onMessageReceived.

Trong code ở trên, chúng ta cũng lấy lượng dữ liệu và hiển thị nó trong một thông báo bất kể ứng dụng đang ở trạng thái sử dụng hay chạy nền.

Cập nhật Tập tin Manifest

Cập nhật tập tin manifest, bao gồm dịch vụ đã được tạo trước đó bên trong thẻ <application>.

Đăng ký một Chủ đề

Cuối cùng, chúng ta cần đăng ký chủ đề 'android' để thiết bị có thể nhận và xử lý tin nhắn được gửi đến chủ đề đó.

Chạy Ứng dụng

Chạy ứng dụng lần thứ hai và nhập một tiêu đề và tác giả, và sau đó bấm nút submit. Lần này, một thông báo sẽ hiển thị lên bất cứ khi nào một bài viết mới được đăng vào cơ sở dữ liệu bởi bất kỳ người dùng ứng dụng.

final app screenshotsfinal app screenshotsfinal app screenshots

Để làm điều này trước khi có Coud Functions, bạn sẽ cần một máy chủ HTTP hoặc XMPP, điều này có nghĩa là cần viết thêm code, cũng như một máy chủ để thiết lập và hỗ trợ.

Kết luận

Trong hướng dẫn này, bạn đã được học về Coud Functions cho Firebase: chúng là gì, tại sao có thể bạn cần đến chúng, và làm thế nào để bắt đầu sử dụng Cloud Functions cho ứng dụng của bạn. Lưu ý rằng Cloud Functions cho Firebase vẫn còn đang ở phiên bản beta khi bài viết này được xuất bản.

Để tìm hiểu thêm về Cloud Functions cho Firebase, hãy tham khảo tài liệu chính thức. Và trong khi chờ đợi, hãy xem qua một số tài liệu và hướng dẫn khác của chúng tôi về việc phát triển ứng dụng Android!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.