Sử dụng API FCM HTTP v1 với mã truy cập OAuth 2

1. Giới thiệu

So với API FCM cũ, API HTTP v1 của FCM cung cấp một mô hình uỷ quyền an toàn hơn bằng cách sử dụng mã truy cập có thời hạn ngắn. Các bước tạo mã truy cập cho API FCM v1 khác biệt đáng kể so với các bước tạo mã truy cập cho API cũ.

Lớp học lập trình này hướng dẫn bạn quy trình thiết lập phía máy khách và máy chủ để cho phép gửi thông báo đẩy đến một ứng dụng Android bằng FCM HTTP v1 API. Thao tác này làm nổi bật bước chính trong quá trình tạo thông tin xác thực cho API phiên bản 1.

Bạn có thể xem thêm thông tin tại:

Điều kiện tiên quyết

  • Có kiến thức cơ bản về Java và phát triển Android

Kiến thức bạn sẽ học được

  • Các bước thiết lập chi tiết ở phía máy khách và máy chủ để cho phép gửi thông báo đẩy đến ứng dụng Android của bạn bằng API HTTP v1 của FCM
  • Tạo thông tin đăng nhập cho HTTP API phiên bản 1 bằng tài khoản dịch vụ
  • Gửi thông báo kiểm thử thông qua HTTP API phiên bản 1

Bạn cần có

Phiên bản ổn định mới nhất của Android Studio

Một trong những thiết bị sau:

Môi trường phát triển Java hoặc trình chỉnh sửa mã mà bạn chọn

2. Thiết lập dự án Firebase và ứng dụng Android

Khi kết thúc lớp học lập trình này, bạn sẽ có thể gửi thông báo đến ứng dụng của mình bằng Giải pháp gửi thông báo qua đám mây của Firebase. Trước khi làm việc đó, bạn cần tạo một dự án Firebase. Lớp học lập trình này cũng cung cấp một ứng dụng Android chứa mã mẫu để tích hợp với FCM.

Thiết lập dự án Firebase

  • Làm theo "Bước 1: Tạo dự án Firebase" để tạo dự án Firebase của riêng bạn cho lớp học lập trình này.

Thiết lập ứng dụng Android

Ứng dụng Android mẫu được cung cấp trong lớp học lập trình này đã được tích hợp với FCM. Sau khi khởi động, ứng dụng sẽ đăng ký với máy chủ FCM và đăng ký theo dõi một chủ đề. Trong các bước sau của lớp học lập trình này, bạn sẽ gửi một thông báo theo chủ đề đến chủ đề và ứng dụng của bạn sẽ nhận được thông báo đó.

3. Thiết lập máy chủ ứng dụng

Sau khi thiết lập ứng dụng, bạn cần tải một mẫu mã phía máy chủ xuống để gửi thông báo đến ứng dụng bằng API FCM phiên bản 1. Đoạn mã này tải thông tin xác thực API (được mô tả trong phần tiếp theo) để tạo mã truy cập. Sau đó, ứng dụng sẽ gửi thông báo đến ứng dụng của bạn bằng tính năng nhắn tin theo chủ đề của FCM.

  • Nhập mã máy chủ khởi đầu bằng cách tải dự án Github xuống. Dự án "messaging" là một dự án Java dựa trên Gradle, có một phần phụ thuộc vào SDK firebase-admin. SDK này cung cấp chức năng gửi tin nhắn.

Bạn có thể xem thêm thông tin về cách máy chủ ứng dụng nên hoạt động với FCM trong tài liệu Môi trường máy chủ và FCM.

4. Lấy thông tin đăng nhập phiên bản 1

API HTTP v1 của FCM sử dụng mã truy cập có thời hạn ngắn theo mô hình bảo mật OAuth2. So với khoá API tĩnh được dùng trong API FCM cũ, mã truy cập có thời hạn ngắn ít có nguy cơ bị rò rỉ thông tin đăng nhập hơn. Phần này trình bày chi tiết các bước tạo thông tin xác thực để tạo mã truy cập dùng trong việc gọi API.

  1. Thiết lập tài khoản dịch vụ Firebase để cho phép Firebase Admin SDK uỷ quyền các lệnh gọi đến API FCM. Mở phần Project Settings (Cài đặt dự án) trong bảng điều khiển của Firebase rồi chọn thẻ Service accounts (Tài khoản dịch vụ). Nhấp vào Tạo khoá riêng tư mới để tải đoạn mã cấu hình xuống. Ảnh chụp màn hình bị cắt làm nổi bật đoạn mã cấu hình Admin SDK của thành phần Tài khoản dịch vụ trên trang Cài đặt dự án
  2. Trong dự án Github đã tải xuống, hãy đổi tên tệp đã tải xuống thành service-account.json rồi sao chép tệp đó vào đường dẫn messaging/ của dự án.
  3. Phương thức getAccessToken() (minh hoạ bên dưới) trong lớp Messaging.java tạo ra một mã thông báo OAuth2 có hiệu lực trong 1 giờ.
private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials.fromStream(new FileInputStream("service-account.json")).createScoped(Arrays.asList(SCOPES));
  googleCredentials.refresh();
  return googleCredentials.getAccessToken().getTokenValue();
}
  1. Thay đổi phương thức chính để thêm dòng sau:
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. Chuyển đến thư mục nhắn tin/ dự án trong thiết bị đầu cuối rồi nhập:
./gradlew run -Pmessage=common-message

để in mã thông báo OAuth2.

Bạn có thể xem thêm thông tin trong phần Uỷ quyền gửi yêu cầu.

5. Gửi tin nhắn bằng API REST

Giờ đây, bạn đã sẵn sàng gửi tin nhắn thông qua HTTP v1 API. Hãy làm theo các bước sau:

  • Cách thêm mã truy cập vào tiêu đề yêu cầu HTTP:
  • Thêm mã thông báo làm giá trị của tiêu đề Uỷ quyền theo định dạng Authorization: Bearer <access_token>
  • Gửi yêu cầu HTTP đến FCM API phiên bản 1 bằng curl:
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $OAuth2_token" -H "X-GFE-SSL: yes" -d  "{\"message\": {\"topic\": \"$topic_name\", \"notification\": {\"title\": \"breaking news\", \"body\": \"This is breaking news\"}}}" https://fcm.googleapis.com/v1/projects/[PROJECT_NAME]/messages:send

Bạn có thể tìm thấy $topic_name ở trên trong ứng dụng Android được đề cập trong phần thiết lập dự án Firebase và ứng dụng Android. Theo mặc định, giá trị này là "weather".

  • Sau khi gửi thành công một tin nhắn, bạn sẽ thấy một thông báo bật lên trên màn hình, tương tự như hình ảnh bên dưới:

54ae84ece22202cd.png

6. Kết luận

Xin chúc mừng! Bạn đã hoàn tất thành công lớp học lập trình để:

  • Thiết lập dự án Firebase
  • Tích hợp Firebase với một ứng dụng Android
  • Tạo thông tin đăng nhập cho API HTTP v1 của FCM
  • Gửi thông báo đến ứng dụng của bạn thông qua FCM HTTP v1 API

Để khám phá các tính năng nâng cao mà FCM cung cấp, bạn có thể tham khảo những tài liệu sau: