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

1. Giới thiệu

So với API cũ của FCM, API HTTP phiên bản 1 của FCM cung cấp mô hình uỷ quyền an toàn hơn bằng cách sử dụng mã truy cập ngắn hạn. Các bước tạo mã truy cập cho API FCM phiên bản 1 khác biệt đáng kể so với các bước dành 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à phía máy chủ để cho phép gửi thông báo đẩy đến ứng dụng Android bằng API HTTP v1 của FCM. Hướng dẫn này làm nổi bật bước quan trọng trong quá trình tạo thông tin xác thực cho API v1.

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

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

  • Hiểu biết cơ bản về cách phát triển bằng Java và Android

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

  • Các bước chi tiết để thiết lập phía máy khách và phía máy chủ để cho phép gửi thông báo đẩy đến ứng dụng Android bằng API FCM HTTP v1
  • Tạo thông tin xác thực cho API HTTP 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 API HTTP v1

Bạn cần có

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

Một trong các thiết bị sau:

Môi trường phát triển Java hoặc trình soạn thảo 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 tin nhắn đến ứng dụng 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 bắt đầu, tài khoản này 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 thông báo 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

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

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

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

4. Nhận thông tin đăng nhập v1

FCM HTTP phiên bản 1 API sử dụng mã truy cập ngắn hạn theo mô hình bảo mật OAuth2. So với khoá API tĩnh dùng trong API FCM cũ, mã truy cập ngắn hạn ít có nguy cơ rò rỉ thông tin đăng nhập. 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 khi gọi API.

  1. Thiết lập tài khoản dịch vụ Firebase để cho phép SDK quản trị của Firebase uỷ quyền các lệnh gọi đến API FCM. Mở phần Cài đặt dự án trong bảng điều khiển của Firebase và chọn thẻ Tài khoản dịch vụ. Nhấp vào Tạo khoá riêng tư mới để tải đoạn cấu hình xuống. Ảnh chụp màn hình bị cắt, trong đó làm nổi bật đoạn cấu hình SDK quản trị 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() (hiển thị bên dưới) trong lớp Messaging.java sẽ tạo 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 main (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 cửa sổ dòng lệnh 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 bài viết Cho phép gửi yêu cầu.

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

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

  • Cách thêm mã truy cập vào tiêu đề của yêu cầu HTTP:
  • Thêm mã thông báo dưới dạng giá trị trong tiêu đề Uỷ quyền ở định dạng Authorization: Bearer <access_token>
  • Gửi một yêu cầu HTTP đến API FCM v1 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 dự án Firebase và quá trình thiết lập ứng dụng Android. Theo mặc định, giá trị này là "weather".

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

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 ứng dụng Android
  • Tạo thông tin đăng nhập cho API HTTP v1 của FCM
  • Gửi tin nhắn đế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, hãy tham khảo các tài liệu tham khảo sau đây: