Bắt đầu sử dụng Giải pháp gửi thông báo qua đám mây của Firebase trong ứng dụng web

Chọn nền tảng: iOS+ Android Web Flutter Unity C++


Hướng dẫn này mô tả cách bắt đầu sử dụng Firebase Cloud Messaging trong các ứng dụng web của bạn để bạn có thể gửi thông báo một cách đáng tin cậy.

API JavaScript của FCM cho phép bạn nhận thông báo trong các ứng dụng web chạy trong trình duyệt hỗ trợ Push API. Trong đó có các phiên bản trình duyệt được liệt kê trong ma trận hỗ trợ này và các tiện ích Chrome sử dụng Push API.

SDK FCM chỉ được hỗ trợ trong các trang được phân phát qua HTTPS. Điều này là do SDK sử dụng trình thực thi dịch vụ, chỉ có trên các trang web HTTPS. Nếu bạn cần một nhà cung cấp, thì Firebase App Hosting nên dùng. Dịch vụ này cung cấp một gói miễn phí để lưu trữ HTTPS trên miền của riêng bạn.

Để bắt đầu sử dụng API JavaScript của FCM, bạn cần thêm Firebase vào ứng dụng web và thêm logic để truy cập vào Mã cài đặt Firebase. Mã này cho phép bạn chỉ định người nhận thông báo.

Thêm và khởi chạy SDK FCM

  1. Nếu bạn chưa làm việc này, hãy cài đặt SDK Firebase JS và khởi chạy Firebase.

  2. Thêm SDK JS Firebase Cloud Messaging và khởi chạy Firebase Cloud Messaging:

Web

import { initializeApp } from "firebase/app";
import { getMessaging } from "firebase/messaging";

// TODO: Replace the following with your app's Firebase project configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);


// Initialize Firebase Cloud Messaging and get a reference to the service
const messaging = getMessaging(app);

Web

import firebase from "firebase/compat/app";
import "firebase/compat/messaging";

// TODO: Replace the following with your app's Firebase project configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize Firebase
firebase.initializeApp(firebaseConfig);


// Initialize Firebase Cloud Messaging and get a reference to the service
const messaging = firebase.messaging();

Nếu bạn đang sử dụng FCM cho web và muốn nâng cấp lên SDK 6.7.0 trở lên, bạn phải bật API Đăng ký FCM cho dự án của mình trong bảng điều khiển Google Cloud. Khi bật API, hãy nhớ đăng nhập vào bảng điều khiển Google Cloud bằng chính Tài khoản Google mà bạn dùng cho Firebase và nhớ chọn đúng dự án. Các dự án mới thêm FCM SDK sẽ bật API này theo mặc định.

Định cấu hình thông tin đăng nhập web bằng FCM

Giao diện web FCM sử dụng thông tin đăng nhập web có tên là Voluntary Application Server Identification (Xác định máy chủ ứng dụng tự nguyện) hoặc khoá VAPID để cho phép các yêu cầu gửi đến các dịch vụ thông báo đẩy trên web được hỗ trợ. Để đăng ký ứng dụng nhận thông báo đẩy, bạn cần liên kết một cặp khoá với dự án Firebase. Bạn có thể tạo một cặp khoá mới hoặc nhập cặp khoá hiện có thông qua bảng điều khiển Firebase console.

Tạo một cặp khoá mới

  1. Trong bảng điều khiển Firebase, hãy chuyển đến Settings > General (Cài đặt > Cài đặt chung). Sau đó, hãy nhấp vào thẻ Cloud Messaging

  2. Chuyển đến phần Web configuration (Cấu hình web).

  3. Trong thẻ Web Push certificates (Chứng chỉ thông báo đẩy trên web), hãy nhấp vào Generate Key Pair (Tạo cặp khoá).

    Bảng điều khiển sẽ hiển thị thông báo rằng cặp khoá đã được tạo, đồng thời hiển thị chuỗi khoá công khai và ngày thêm.

Nhập một cặp khoá hiện có

Nếu có một cặp khoá hiện có mà bạn đang sử dụng với ứng dụng web, bạn có thể nhập cặp khoá đó vào FCM để có thể tiếp cận các thực thể ứng dụng web hiện có thông qua API FCM. Để nhập khoá, bạn phải có quyền truy cập ở cấp chủ sở hữu vào dự án Firebase. Nhập khoá công khai và riêng tư hiện có ở dạng mã hoá an toàn cho URL base64:

  1. Trong bảng điều khiển Firebase, hãy chuyển đến Settings > General (Cài đặt > Cài đặt chung). Sau đó, hãy nhấp vào thẻ Cloud Messaging

  2. Chuyển đến phần Web configuration (Cấu hình web).

  3. Trong thẻ Web Push certificates (Chứng chỉ thông báo đẩy trên web), hãy tìm và chọn văn bản có đường liên kết: import an existing key pair (nhập một cặp khoá hiện có).

  4. Trong hộp thoại Import a key pair (Nhập một cặp khoá), hãy cung cấp khoá công khai và riêng tư trong các trường tương ứng rồi nhấp vào Import (Nhập).

    Bảng điều khiển sẽ hiển thị chuỗi khoá công khai và ngày thêm.

Để biết hướng dẫn về cách thêm khoá vào ứng dụng, hãy xem bài viết Định cấu hình thông tin đăng nhập web trong ứng dụng. Để biết thêm thông tin về định dạng của khoá và cách tạo khoá, hãy xem bài viết Khoá máy chủ ứng dụng.

Định cấu hình thông tin đăng nhập web trong ứng dụng

Phương thức register(): Promise<void> cho phép FCM sử dụng thông tin đăng nhập khoá VAPID khi gửi yêu cầu thông báo đến các dịch vụ thông báo đẩy khác nhau. Sử dụng khoá mà bạn đã tạo hoặc nhập theo hướng dẫn trong bài viết Định cấu hình thông tin đăng nhập web bằng FCM, hãy thêm khoá đó vào mã sau khi truy xuất đối tượng thông báo:

import { getMessaging, register } from "firebase/messaging";

const messaging = getMessaging();
// Add the public key generated from the Firebase console here.
register(messaging, {vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu"});

Yêu cầu cấp quyền gửi thông báo và định cấu hình trình thực thi dịch vụ

Khi bạn cần nhắm đến một thực thể ứng dụng bằng FCM, trước tiên hãy yêu cầu người dùng cấp quyền gửi thông báo bằng Notification.requestPermission(). Khi được gọi như minh hoạ, phương thức này sẽ trả về trạng thái quyền nếu được cấp:

function requestPermission() {
  console.log('Requesting permission...');
  Notification.requestPermission().then((permission) => {
    if (permission === 'granted') {
      console.log('Notification permission granted.');
    }
  });
}

FCM yêu cầu tệp firebase-messaging-sw.js. Trừ phi bạn đã có tệp firebase-messaging-sw.js, hãy tạo một tệp trống có tên đó và đặt tệp đó vào thư mục gốc của miền trước khi đăng ký. Sau này, bạn có thể thêm nội dung có ý nghĩa vào tệp trong quá trình thiết lập ứng dụng.

Truy cập vào Mã cài đặt Firebase

Cách đăng ký thực thể ứng dụng và truy xuất Mã cài đặt Firebase (FID) để nhắm đến thông báo:

import { getMessaging, onRegistered, register } from "firebase/messaging";

const messaging = getMessaging();

// 1. Implement callback to receive the Firebase installation ID upon registration.
// This is triggered every time a manual register() finishes, a FID change
// is detected, or a pushsubscriptionchange event is fired.
onRegistered(messaging, (installationId) => {
  console.log('Registered installation ID:', installationId);

  // Send the Firebase Installation ID to your app server and update the UI if needed.
  sendRegistrationToServer(installationId);
});

// 2. You can also manually trigger registration (recommended on app startup)
register(messaging, {
  vapidKey: '<YOUR_PUBLIC_VAPID_KEY_HERE>'
}).then(() => {
  // Success! The Firebase Installation ID can be used to target messages to this app
  // instance and will be delivered asynchronously to your onRegistered() callback.
}).catch((err) => {
  console.error('An error occurred while registering', err);
});

Lệnh gọi lại onRegistered được kích hoạt trong 3 trường hợp:

  1. Mỗi khi lệnh gọi register() thủ công hoàn tất.
  2. Đã phát hiện thấy thay đổi Mã cài đặt Firebase.
  3. Sự kiện pushsubscriptionchange được kích hoạt.

Sau khi nhận được Mã cài đặt Firebase, hãy gửi mã đó đến máy chủ ứng dụng và lưu trữ bằng phương thức bạn muốn.

Truy cập vào mã thông báo đăng ký (không dùng nữa)

Cách truy xuất mã thông báo hiện tại:

Web

import { getMessaging, getToken } from "firebase/messaging";

// Get registration token. Initially this makes a network call, once retrieved
// subsequent calls to getToken will return from cache.
const messaging = getMessaging();
getToken(messaging, { vapidKey: '<YOUR_PUBLIC_VAPID_KEY_HERE>' }).then((currentToken) => {
  if (currentToken) {
    // Send the token to your server and update the UI if necessary
    // ...
  } else {
    // Show permission request UI
    console.log('No registration token available. Request permission to generate one.');
    // ...
  }
}).catch((err) => {
  console.log('An error occurred while retrieving token. ', err);
  // ...
});

Web

// Get registration token. Initially this makes a network call, once retrieved
// subsequent calls to getToken will return from cache.
messaging.getToken({ vapidKey: '<YOUR_PUBLIC_VAPID_KEY_HERE>' }).then((currentToken) => {
  if (currentToken) {
    // Send the token to your server and update the UI if necessary
    // ...
  } else {
    // Show permission request UI
    console.log('No registration token available. Request permission to generate one.');
    // ...
  }
}).catch((err) => {
  console.log('An error occurred while retrieving token. ', err);
  // ...
});

Sau khi nhận được mã thông báo, hãy gửi mã đó đến máy chủ ứng dụng và lưu trữ bằng phương thức bạn muốn.

Gửi thông báo thử nghiệm

  1. Cài đặt và chạy ứng dụng trên thiết bị đích. Trên các thiết bị Apple, bạn cần chấp nhận yêu cầu cấp quyền nhận thông báo từ xa.

  2. Kiểm tra để đảm bảo ứng dụng đang chạy ở chế độ nền trên thiết bị.

  3. Trong bảng điều khiển Firebase, hãy chuyển đến DevOps & Engagement > Messaging

  4. Tạo một chiến dịch.

    • Nếu đây là thông báo đầu tiên của bạn:

      1. Chọn Create your first campaign (Tạo chiến dịch đầu tiên).

      2. Chọn Firebase Notification messages (Thông báo Firebase) rồi chọn Create (Tạo).

    • Nếu bạn đã tạo chiến dịch trước đây:

      1. Trên thẻ Campaigns (Chiến dịch), hãy chọn New campaign (Chiến dịch mới).

      2. Nhấp vào Notifications (Thông báo).

  5. Nhập nội dung tin nhắn.

  6. Chọn Send test message (Gửi thông báo thử nghiệm) trong ngăn bên phải.

  7. Trong trường có nhãn Add an FCM registration token (Thêm mã thông báo đăng ký), hãy nhập mã thông báo đăng ký.

  8. Chọn Test (Thử nghiệm).

Sau khi bạn chọn Test (Thử nghiệm), thiết bị ứng dụng đích (với ứng dụng chạy ở chế độ nền) sẽ nhận được thông báo.

Các bước tiếp theo

Sau khi bạn hoàn tất các bước thiết lập, dưới đây là một vài lựa chọn để tiếp tục sử dụng FCM cho Web (JavaScript):