Thông báo đẩy nhiều hướng đầu tiên của bạn sử dụng chủ đề FCM

1. Giới thiệu

Mục tiêu

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách đo lường ứng dụng đa nền tảng để có thể truyền tin nhắn đẩy đến nhiều nhóm nhỏ của các phiên bản ứng dụng bằng cách sử dụng các chủ đề FCM.

Sau khi hoàn tất, bạn có thể tận dụng cơ sở hạ tầng FCM để quản lý các nhóm nhỏ này cũng như truyền tin nhắn đẩy đa hướng qua các nhóm nhỏ.

Tổng quan về các chủ đề

Chủ đề là một cách tiếp cận được cơ sở hạ tầng FCM hỗ trợ để tiếp cận các nhóm nhỏ của các phiên bản ứng dụng bằng thông báo.

FCM cung cấp các API để gửi thông báo cũng như duy trì việc đăng ký nhận thông báo về các chủ đề này. Hành động liên kết và huỷ liên kết một phiên bản ứng dụng với chủ đề được gọi là đăng ký và huỷ đăng ký tương ứng

Bạn nên sử dụng chủ đề cho nội dung được cung cấp công khai. Ví dụ: thông báo về thông tin cập nhật thời tiết. Nếu muốn gửi thông báo có chứa thông tin nhạy cảm của người dùng, hãy sử dụng Firebase Admin SDK để truyền thông báo đến nhiều thiết bị.

Tính năng truyền tin đa hướng dựa trên chủ đề được tối ưu hoá cho thông lượng.

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

  • Cách đăng ký (và huỷ đăng ký) người dùng nhận thông báo về các chủ đề từ một ứng dụng di động.
  • Cách gửi thông báo đẩy truyền tin bằng cách sử dụng các chủ đề.
  • Cách gửi thông báo đến một tổ hợp các chủ đề bằng cách sử dụng điều kiện về chủ đề.
  • Cách quản lý lượt đăng ký chủ đề ở phía máy chủ và thực hiện đăng ký cũng như huỷ đăng ký hàng loạt.

Sản phẩm bạn sẽ tạo ra

  • Một ứng dụng Android đăng ký/huỷ đăng ký các chủ đề và nhận tin nhắn khi được gửi đến các chủ đề đó.
  • Một hoạt động tích hợp phía máy chủ bằng Firebase Admin SDK, sẽ được dùng để gửi thông báo theo chủ đề thông qua các API FCM.

Bạn cần

  • Một trình duyệt mà bạn chọn, chẳng hạn như Chrome.
  • IDE IntelliJ IDEA để phát triển các ứng dụng Java.
    • Nhớ chọn hỗ trợ Gradle trong khi cài đặt.
  • Android Studio là IDE để phát triển các ứng dụng Android.
  • Một thiết bị để chạy ứng dụng Android. Một trong hai trường hợp sau:
    • Trình mô phỏng Android. (Yêu cầu thiết lập trong Android Studio).
    • Một thiết bị Android thực tế được kết nối với máy tính và được đặt ở chế độ nhà phát triển.
  • Một Tài khoản Google để tạo và quản lý dự án Firebase.

2. Thiết lập

Lấy mã nguồn

Sao chép kho lưu trữ GitHub từ dòng lệnh:

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

Mã mẫu sẽ được sao chép vào thư mục fcm-codelab.

cd fcm-codelab

Ứng dụng khởi đầu cho lớp học lập trình này nằm trong thư mục messaging của nhánh fcm-topics-codelab. Hãy làm theo các bước sau để truy cập vào mã khởi đầu. Thư mục này chứa 2 thư mục StockNewsAppStockNewsServer. Thư mục trước chứa ứng dụng Android khởi đầu và thư mục sau chứa mã phía máy chủ khởi đầu.

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

Phiên bản hoàn chỉnh của lớp học lập trình này được đặt trong thư mục messaging/fcm-topics-codelab/completed.

Tạo một dự án Firebase

  1. Đăng nhập vào bảng điều khiển của Firebase bằng Tài khoản Google của bạn.
  2. Nhấp vào nút này để tạo một dự án mới, rồi nhập tên dự án (ví dụ: StockNews).
  3. Nhấp vào Tiếp tục.
  4. Nếu được nhắc, hãy xem xét và chấp nhận các điều khoản của Firebase, rồi nhấp vào Tiếp tục.
  5. (Không bắt buộc) Bật tính năng hỗ trợ của AI trong bảng điều khiển của Firebase (còn gọi là "Gemini trong Firebase").
  6. Đối với lớp học lập trình này, bạn không cần Google Analytics, vì vậy hãy tắt lựa chọn Google Analytics.
  7. Nhấp vào Tạo dự án, đợi dự án được cấp phép rồi nhấp vào Tiếp tục.

Xin chúc mừng! Bạn vừa tạo dự án Firebase.

3. Cấu hình ứng dụng Firebase theo nền tảng cụ thể

Hầu hết các thay đổi về mã cần thiết để bật tính năng hỗ trợ Firebase đều đã được kiểm tra trong dự án mà bạn đang thực hiện. Tuy nhiên, để thêm tính năng hỗ trợ cho các nền tảng di động, bạn cần:

  • Đăng ký nền tảng mong muốn trên dự án Firebase
  • Tải tệp cấu hình dành riêng cho nền tảng xuống rồi thêm tệp đó vào mã.

Để phục vụ mục đích của lớp học lập trình này, chúng ta sẽ thêm một ứng dụng Firebase Android.

84e0b3199bef6d8a.pngĐịnh cấu hình Android

  1. Trong Bảng điều khiển của Firebase, hãy chọn Cài đặt dự án ở đầu thanh điều hướng bên trái trong biểu tượng Cài đặt, rồi nhấp vào biểu tượng Android trong mục Ứng dụng của bạn trên trang Chung.

Bạn sẽ thấy hộp thoại sau : 8254fc299e82f528.png

  1. Giá trị quan trọng cần cung cấp là tên gói Android. Đặt thành com.ticker.stocknews.
    1. Tên gói được cung cấp ở đây phải giống với tên gói được cung cấp trong AndroidManifest.xml của mã StockNewsApp khởi động. Nếu bạn muốn tìm hoặc thay đổi địa chỉ này, hãy làm theo các bước sau:
      1. Trong thư mục StockNewsApp, hãy mở tệp app/src/main/AndroidManifest.xml.
      2. Trong phần tử manifest, hãy tìm giá trị chuỗi của thuộc tính package. Giá trị này là tên gói Android.
  1. Trong hộp thoại Firebase, hãy dán tên gói đã sao chép vào trường Tên gói Android.
  2. Bạn không cần SHA-1 của chứng chỉ ký gỡ lỗi cho lớp học lập trình này vì ứng dụng này sẽ không được phát hành. Để trống trường này.
  3. Nhấp vào Đăng ký ứng dụng.
  4. Tiếp tục trong Bảng điều khiển của Firebase, hãy làm theo hướng dẫn để tải tệp cấu hình google-services.json xuống.
  5. Bạn có thể bỏ qua các bước thiết lập còn lại vì mọi thứ khác đã được định cấu hình trong mã ứng dụng khởi động. Bạn sẽ thấy ứng dụng của mình trong danh sách trên trang chính của Bảng điều khiển Firebase.
  6. Sao chép tệp google-services.json (bạn vừa tải xuống) vào thư mục messaging/fcm-topics-codelab/starter/StockNewsApp/app.

4. Tạo bản dựng và chạy ứng dụng

Bạn đã sẵn sàng bắt đầu thực sự làm việc trên ứng dụng của mình! Trước tiên, hãy tạo bản dựng và chạy ứng dụng.

Nhập ứng dụng khởi đầu

Khởi động Android Studio rồi nhập messaging/fcm-topics-codelab/starter/StockNewsApp từ thư mục mã khởi đầu.

Sau khi tải dự án, có thể bạn sẽ nhìn thấy cảnh báo cho biết Git không theo dõi tất cả các thay đổi cục bộ của bạn. Bạn có thể nhấp vào "Bỏ qua" hoặc "X" ở góc trên bên phải. (Bạn sẽ không đẩy thay đổi nào ngược trở lại kho lưu trữ Git.)

Ở góc trên bên trái cửa sổ dự án, bạn sẽ thấy như sau nếu đang ở chế độ xem Android. (Nếu đang ở chế độ xem Project (Dự án), bạn cần phải mở rộng dự án để thấy được như này)

b574ea0089ee87c6.png

Hãy lưu ý rằng Android Studio có thể mất vài giây để biên dịch dự án ở chế độ nền trong lần đầu tiên. Trong khoảng thời gian này, bạn sẽ thấy một vòng quay trong thanh trạng thái ở phía dưới Android Studio:

4bc64eb3b99eb0ae.png

Bạn nên đợi quá trình này hoàn tất trước khi chỉnh sửa mã nguồn. Quá trình này cho phép Android Studio chuẩn bị tất cả thành phần cần thiết.

Ngoài ra, nếu bạn thấy lời nhắc "Reload for language changes to take effect?" (Tải lại để áp dụng các thay đổi về ngôn ngữ?) hoặc tương tự, hãy chọn "Yes" ("Có").

Thiết lập trình mô phỏng

Nếu bạn cần trợ giúp thiết lập trình mô phỏng Android, hãy tham khảo bài viết Chạy ứng dụng.

Tìm hiểu mã khởi đầu của Ứng dụng Android

  • Mã khởi đầu là một Ứng dụng Android có dung lượng nhẹ, có chức năng và giao diện người dùng tối thiểu.
  • Một phần phụ thuộc vào SDK firebase-messaging đã được thêm vào tệp app/build.gradle.

f04ff8f48d186dff.png

  • Trong AndroidManifest.xml, trình xử lý lệnh gọi lại MESSAGING_EVENT đã được thêm.
    • Trình xử lý này, StockNewsMessagingService.java, mở rộng lớp FirebaseMessagingService cung cấp nhiều chức năng liên quan đến Giải pháp gửi thông báo qua đám mây của Firebase. Hãy xem tài liệu về FirebaseMessagingService để tìm hiểu thêm. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • Hàm onNewToken sẽ được gọi khi Mã thông báo đăng ký FCM được tạo hoặc làm mới. Hãy xem phần Theo dõi quá trình tạo mã thông báo để biết thêm thông tin.
    • Hàm onMessageReceived được gọi khi thiết bị nhận được một thông báo trong lúc ứng dụng đang chạy trên nền trước. Hiện tại, nó chỉ ghi lại thông báo đã nhận được.
  • Ngoài ra, trong AndroidManifest.xml, một lớp Application Android cũng được cung cấp có tên là StockNewsApplication. a4982a8731492dfc.pngccde692f7f68dc5a.png
    • Lớp này sẽ là lớp đầu tiên được tạo thực thể khi Ứng dụng khởi động.
    • Trong hàm onCreate của lớp StockNewsApplication, một lệnh gọi tạo Mã thông báo đăng ký FCM sẽ được thêm vào. Thao tác này sẽ tạo một Mã đăng ký FCM hợp lệ và ghi lại mã đó.
  • MainActivity.java sẽ thêm RecyclerView hiển thị các lựa chọn về Danh mục trong kho hàng.
  • SubscriptionAdapter.java triển khai RecyclerView.Adapter để vẽ màn hình lựa chọn Danh mục cổ phiếu.
    • Mỗi Danh mục cổ phiếu đều có tên và nút bật/tắt chế độ đăng ký bên cạnh.
    • Khi bạn thay đổi trạng thái của nút bật/tắt, hệ thống sẽ thực hiện lệnh gọi đăng ký/huỷ đăng ký chủ đề FCM.
    • Bạn sẽ triển khai các lệnh gọi này trong các phần sắp tới.
  • Lớp model/StockCategories.java chứa danh sách tất cả Danh mục cổ phiếu và tên chủ đề được liên kết.

b32663ec4e865a18.png

Chạy ứng dụng khởi đầu

  1. Kết nối thiết bị Android với máy tính hoặc khởi động trình mô phỏng.
  2. Trong thanh công cụ trên cùng, hãy chọn thiết bị Android hoặc trình mô phỏng mục tiêu rồi nhấn nút chạy.

5b27fc5b237e06b9.png

  1. Giao diện người dùng của ứng dụng sẽ có dạng như sau:

ff5b1a1c53231c54.png

  1. Ứng dụng sẽ tạo và ghi lại một Mã thông báo đăng ký FCM. Tuy nhiên, sẽ không có gì thay đổi trong giao diện người dùng của ứng dụng.
    1. Sao chép và lưu Mã thông báo đăng ký FCM vì mã thông báo này sẽ được dùng trong các bước tiếp theo.

927eb66bc909f36b.png

5. Gửi tin nhắn thử nghiệm

Giờ đây, bạn đã sẵn sàng gửi một tin nhắn kiểm thử đến thực thể ứng dụng mà bạn đã thiết lập ở bước cuối cùng.

Nhập mã máy chủ khởi đầu

Khởi động IntelliJ IDEA rồi mở dự án messaging/fcm-topics-codelab/starter/StockNewsServer.

Chế độ xem dự án trong thanh điều hướng bên trái sẽ có dạng như sau:

da20711f6527dff6.png

Xin lưu ý rằng có thể mất vài phút để IntelliJ IDEA tạo dự án của bạn, bao gồm cả việc kéo các phần phụ thuộc bắt buộc.

Tìm hiểu mã khởi đầu của máy chủ

  • Mã khởi đầu của máy chủ là một dự án Java dựa trên Gradle.
  • Tệp build.gradle đã có phần phụ thuộc trên SDK firebase-admin được thêm vào. SDK này cung cấp quyền truy cập vào nhiều chức năng gửi thông báo FCM.

650fc733298588f8.png

  • Cuối cùng, có 2 lớp, cụ thể là:
    • FcmSender.java: Lớp này chứa các phương thức sau của ghi chú:
      • initFirebaseSDK: Khởi động SDK firebase-admin.
      • sendMessageToFcmRegistrationToken: gửi một thông báo đến Mã thông báo đăng ký FCM.
      • sendMessageToFcmTopic: gửi thông báo đến một chủ đề FCM.
      • sendMessageToFcmTopicCondition: gửi thông báo đến một điều kiện chủ đề FCM.
    • FcmSubscriptionManager.java: Lớp này chứa các phương thức cho phép quản lý việc đăng ký theo dõi chủ đề từ phía máy chủ.
      • initFirebaseSDK: Khởi động SDK firebase-admin.
      • subscribeFcmRegistrationTokensToTopic: đăng ký(các) FCM Registration Token vào một chủ đề FCM.
      • unsubscribeFcmRegistrationTokensFromTopic: huỷ đăng ký(các) Mã thông báo đăng ký FCM khỏi một chủ đề FCM.

Thiết lập mã máy chủ

  1. Trước tiên, chúng ta cần thiết lập một 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.
    1. Truy cập vào Bảng điều khiển của Firebase, nhấp vào biểu tượng bánh răng bên cạnh mục Tổng quan về dự án trong thanh điều hướng bên trái, rồi chọn Cài đặt dự án. 8c2108d4d7c915e9.png
    2. Trong trang cài đặt, hãy chọn Tài khoản dịch vụ rồi nhấp vào Tạo tài khoản dịch vụ. 84b128cc5dac0a85.png
    3. Giờ đây, hãy nhấp vào nút Tạo khoá riêng tư mới và quá trình tải tệp khoá xuống sẽ bắt đầu tự động.
    4. Đổi tên tệp khoá thành service-account.json rồi sao chép tệp đó vào thư mục messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources.
    5. Cả FcmSender.javaFcmSubscriptionManager.java đều tải tệp service-account.json từ classpath bằng mã sau. 8dffbee658e0bdd.png
  2. Đến đây, mã máy chủ đã sẵn sàng. Chạy Build -> Build Project (Bản dựng -> Tạo dự án) trên thanh trình đơn trên cùng.

Gửi tin nhắn kiểm thử

  1. Trong FcmSender.java, hãy xác định vị trí hàm sendMessageToFcmRegistrationToken rồi chèn mã thông báo đăng ký FCM mà bạn đã sao chép từ phần Chạy ứng dụng khởi đầu vào trường registrationToken.
  2. Trong hàm main, chỉ huỷ nhận xét hàm sendMessageToFcmRegistrationToken rồi nhấp vào chạy để thực thi mã.
    1. Quan sát cách FCM Registration Token được thiết lập vào trường Token của đối tượng message.
    2. Ngoài ra, hãy lưu ý cách chúng tôi đã sử dụng API send của giao diện FirebaseMessaging.

52e4a3ec3f816473.png

  1. Thao tác này sẽ gửi một thông báo đến phiên bản ứng dụng mà bạn đã thiết lập ở bước trước.
  2. Khi phiên bản ứng dụng ở nền trước, bạn sẽ thấy nội dung thông báo được ghi lại.

d3540ec1089f97dd.png

  1. Và khi phiên bản Ứng dụng ở chế độ nền, bạn sẽ thấy thông báo xuất hiện trong khay thông báo.

31203deca59c03fe.png

Tuyệt vời! Bạn đã sử dụng Firebase Admin SDK để gửi thông báo đến một phiên bản ứng dụng. Tìm hiểu thêm về cách sử dụng Firebase Admin SDK trong máy chủ.

6. Triển khai tính năng Đăng ký / Huỷ đăng ký chủ đề

Trong bước này, bạn sẽ triển khai các thao tác đăng ký và huỷ đăng ký chủ đề trên nút bật/tắt Danh mục cổ phiếu của Ứng dụng Android.

Khi người dùng ứng dụng bật/tắt công tắc cho một Danh mục cổ phiếu cụ thể, một lệnh gọi đăng ký hoặc huỷ đăng ký chủ đề sẽ được thực hiện.

Mã đánh giá

  • Chuyển đến lớp SubscriptionAdapter.java trong mã Ứng dụng Android rồi tìm lớp RecyclerViewViewHolder.

6c0614199e684f6.png

  • Hàm khởi tạo lớp thiết lập một trình nghe cho nút bật/tắt gói thuê bao bằng cách sử dụng setOnCheckedChangeListener.
  • Tuỳ thuộc vào trạng thái bật/tắt của công tắc, các thao tác đăng ký và huỷ đăng ký sẽ được thực hiện bằng cách gọi lần lượt các phương thức subscribeToStockCategoryunsubscribeFromStockCategory.
  • Phương thức setData được onBindViewHolder của Bộ chuyển đổi RecyclerView gọi để liên kết ViewHolder với Danh mục cổ phiếu thích hợp.

Triển khai tính năng đăng ký theo dõi chủ đề

  1. Trong phương thức subscribeToStockCategory, bạn sẽ triển khai lệnh gọi đến API subscribeToTopic của đối tượng FirebaseMessaging. Mã có thể có dạng như sau:
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Triển khai tính năng huỷ đăng ký theo dõi chủ đề

  1. Tương tự, trong điều kiện else, bạn sẽ triển khai lệnh gọi đến API unsubscribeFromTopic. Chẳng hạn như:
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Hãy thử xem sao

  1. Chạy ứng dụng và chuyển đổi các lựa chọn Danh mục cổ phiếu để thực hiện các hành động Đăng ký và Huỷ đăng ký. URL sẽ có dạng như sau:

Đăng ký

Hủy đăng ký

7. Gửi tin nhắn đầu tiên trong chủ đề

Trong bước này, bạn sẽ triển khai mã phía máy chủ để gửi một thông báo theo chủ đề FCM.

Triển khai tính năng tích hợp phía máy chủ để gửi thông báo theo chủ đề

  1. Trong mã máy chủ, hãy chuyển đến FcmSender.java và tìm phương thức có tên là sendMessageToFcmTopic.

56381dd1b40cde9c.png

  1. Trong dòng đầu tiên, hãy cung cấp Chủ đề FCM mà bạn muốn gửi thông báo đến.
    • Đây là một chuỗi có dạng: /topics/<Topic Name>. Ví dụ: /topics/Technology.
  2. Trong các dòng tiếp theo, hãy tạo một đối tượng message mới (tương tự như đối tượng được xác định trong hàm sendMessageToFcmRegistrationToken).
    • Thay vì đặt trường Token của đối tượng message, bạn sẽ đặt trường Topic.
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. Bây giờ, hãy thêm lệnh gọi đến thực thể FirebaseMessaging để gửi thông báo (giống với lệnh gọi gửi được thực hiện trong hàm sendMessageToFcmRegistrationToken).
FirebaseMessaging.getInstance().send(message);
  1. Cuối cùng, hãy cập nhật hàm main và chỉ cho phép gọi hàm sendMessageToFcmTopic.

9a6aa08dd7c28898.png

Gửi thông báo và xác thực biên nhận

  1. Trước khi gửi thông báo theo chủ đề, trước tiên, hãy đảm bảo rằng phiên bản ứng dụng của bạn đã đăng ký chủ đề mà bạn muốn gửi.
    1. Bạn có thể thực hiện việc này bằng cách lật nút bật/tắt tương ứng. Ví dụ:
    4668247408377712.png
  2. Giờ đây, bạn có thể gửi thông báo theo chủ đề bằng cách thực thi hàm main của FcmSender.java.
  3. Giống như trước đây, bạn có thể quan sát thông báo đã nhận tin nhắn trên phiên bản ứng dụng.
    1. Phiên bản ứng dụng ở nền trước
    c144721399f610fe.png
    1. Phiên bản ứng dụng ở chế độ nền
    44efc7dfd57e8e9a.png
  4. Mẹo: Hãy thử huỷ đăng ký chủ đề mà bạn đã gửi rồi gửi lại tin nhắn. Bạn sẽ thấy rằng thông báo không được gửi đến phiên bản ứng dụng.

8. Gửi tin nhắn đầu tiên về điều kiện của chủ đề

Tính năng điều kiện về chủ đề cho phép bạn gửi thông báo đến một tổ hợp các chủ đề, nhờ đó bạn có thể cung cấp định nghĩa đối tượng biểu cảm hơn.

Ví dụ: trong Ứng dụng StockNews, hãy cân nhắc khả năng gửi thông báo đến một nhóm các phiên bản ứng dụng đã đăng ký theo dõi chủ đề Công nghệ hoặc Ô tô. Ví dụ: trường hợp này có thể xảy ra nếu có một sự kiện đáng chú ý liên quan đến Waymo.

Chủ đề cho phép bạn thể hiện sự kết hợp của mình dưới dạng một biểu thức boolean bằng cách sử dụng các toán tử sau

  • && : Phép toán AND logic. Ví dụ: 'Technology' in topics && 'Automotive' in topics – Chỉ nhắm đến những phiên bản ứng dụng đã đăng ký cả Chủ đề Công nghệ và Chủ đề Ô tô.
  • || : OR logic. For example, 'Technology' in topics || 'Automotive' in topics – Targets app instances that are subscribed to either Technology or Automotive topics.
  • () : Dấu ngoặc đơn để nhóm. Ví dụ: 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) – Chỉ nhắm đến những phiên bản ứng dụng đã đăng ký theo dõi chủ đề Công nghệ và chủ đề Ô tô hoặc Năng lượng.

Đọc thêm về cách tạo yêu cầu gửi để sử dụng chức năng này.

Triển khai tính năng tích hợp phía máy chủ để gửi thông báo điều kiện về chủ đề

  1. Quay lại mã máy chủ, chuyển đến FcmSender.java và tìm phương thức có tên sendMessageToFcmTopicCondition.

3719a86c274522cf.png

  1. Trong dòng đầu tiên, đối với biến topicCondition, hãy cung cấp điều kiện về chủ đề mà bạn muốn gửi thông báo đến. Bạn có thể đặt thành: 'Technology' in topics && 'Automotive' in topics.
  2. Trong các dòng tiếp theo, hãy tạo một đối tượng message mới (tương tự như đối tượng được xác định trong hàm sendMessageToFcmTopic).
    1. Thay vì đặt trường Topic của đối tượng, bạn sẽ đặt trường Condition.
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. Bây giờ, hãy thêm lệnh gọi đến thực thể FirebaseMessaging để gửi thông báo (giống với lệnh gọi gửi được thực hiện trong hàm sendMessageToFcmTopic).
FirebaseMessaging.getInstance().send(message);
  1. Cuối cùng, hãy cập nhật hàm main và chỉ cho phép gọi hàm sendMessageToFcmTopicCondition.

db9588d40d2a0da6.png

Gửi thông báo và xác thực biên nhận

  1. Trước khi gửi thông báo theo chủ đề, trước tiên, hãy đảm bảo rằng phiên bản ứng dụng của bạn đáp ứng điều kiện về chủ đề đã chỉ định bằng cách đăng ký phiên bản ứng dụng cho cả chủ đề Công nghệ và Ô tô.
  2. Giờ đây, bạn có thể gửi thông báo theo chủ đề bằng cách thực thi hàm main của FcmSender.java.
  3. Giống như trước đây, bạn sẽ có thể quan sát thông báo đã nhận tin nhắn trên phiên bản ứng dụng.
    1. Phiên bản ứng dụng ở nền trước
    6f612ace15aa6515.png
    1. Phiên bản ứng dụng ở chế độ nền
    78044a56ac2359cb.png
  4. Phần thưởng: Giờ đây, bạn có thể huỷ đăng ký chủ đề Công nghệ và gửi lại thông báo điều kiện về chủ đề. Bạn sẽ thấy rằng phiên bản ứng dụng không nhận được thông báo.

9. Tóm tắt

Hãy tóm tắt nhanh những gì bạn đã học được cho đến thời điểm này.

  • Cách bắt đầu đăng ký / huỷ đăng ký chủ đề từ một phiên bản ứng dụng.
  • Gửi thông báo đến chủ đề và xác minh việc nhận thông báo trên các phiên bản ứng dụng đã đăng ký.
  • Gửi thông báo đến một Điều kiện về chủ đề và xác minh việc nhận thông báo trên một phiên bản ứng dụng đáp ứng điều kiện đó.

Trong phần tiếp theo, bạn sẽ tìm hiểu về cách đăng ký / huỷ đăng ký các phiên bản ứng dụng đối với các chủ đề mà không cần khởi tạo các lệnh gọi từ phía máy khách.

c0dc20655d392690.gif

10. Quản lý gói thuê bao theo chủ đề từ phía máy chủ

Cho đến nay, trong lớp học lập trình này, tất cả các lệnh gọi đăng ký và huỷ đăng ký chủ đề đều được bắt đầu từ một phiên bản ứng dụng.

Tuy nhiên, trong một số trường hợp sử dụng, bạn có thể muốn quản lý các lượt đăng ký chủ đề từ Phía máy chủ. Ví dụ: bạn có thể muốn đăng ký một nhóm nhỏ trong cơ sở người dùng hiện tại của mình vào một chủ đề mới mà không cần đợi bản phát hành ứng dụng.

Trong phần này, bạn sẽ tìm hiểu cách sử dụng Firebase Admin SDK để đăng ký và huỷ đăng ký một nhóm Mã đăng ký FCM cho một chủ đề bằng cách thực hiện các lệnh gọi từ phía máy chủ.

Triển khai quy trình đăng ký phía máy chủ của Mã thông báo đăng ký FCM cho chủ đề FCM

  1. Trong mã máy chủ, hãy chuyển sang lớp FcmSubscriptionManager.java. Tìm phương thức có tên là subscribeFcmRegistrationTokensToTopic. Bạn sẽ triển khai lệnh gọi đến API subscribeToTopic tại đây.

5d5709e7b3cbcb04.png

  1. Hãy đăng ký thực thể ứng dụng cho chủ đề Năng lượng. Để thực hiện việc này, trước tiên, hãy cung cấp dữ liệu cho 2 trường sau:
    1. registrationTokens: danh sách các chuỗi được phân tách bằng dấu phẩy, đại diện cho Mã thông báo đăng ký FCM mà bạn muốn tạo các lượt đăng ký theo chủ đề.
    2. topicName: tên chủ đề cho chủ đề Năng lượng, tức là /topics/Energy.
  2. Trong vài dòng tiếp theo, hãy triển khai lệnh gọi theo các dòng sau:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. Bạn có thể kiểm tra TopicManagementResponse để xem một số số liệu thống kê kết quả cấp cao. Chẳng hạn như in số lượng gói thuê bao chủ đề đã tạo thành công bằng cách sử dụng getSuccessCount.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. Cuối cùng, trong hàm main, hãy chỉ cho phép gọi hàm subscribeFcmRegistrationTokensToTopic.

Tạo gói thuê bao và gửi thông báo theo chủ đề

  1. Đến đây, bạn đã sẵn sàng tạo gói thuê bao chủ đề và gửi thông báo đến gói thuê bao đó.
  2. Thực thi hàm main của lớp FcmSubscriptionManager.java. Thao tác này sẽ tạo một gói thuê bao chủ đề.
  3. Bây giờ, hãy thiết lập mã để gửi thông báo. Tương tự như trước đây,
    1. Trong FcmSender.java, hãy tìm hàm sendMessageToFcmTopic.
    2. Đặt topicName thành chủ đề Năng lượng, tức là /topics/Energy.
    3. Tạo một đối tượng Message và nhắm đến chủ đề bằng cách sử dụng setTopic.
    4. Cuối cùng, hãy cập nhật phương thức main để chỉ bật chức năng sendMessageToFcmTopic.
  4. Thực thi hàm main của FcmSender.java. Thao tác này sẽ gửi thông báo đến phiên bản ứng dụng của bạn và bạn có thể quan sát thông báo đó trong ứng dụng của mình như sau.
    1. Phiên bản ứng dụng ở nền trước
    40ab6cf71e0e4116.png
    1. Phiên bản ứng dụng ở chế độ nền
    8fba81037198209e.png

Triển khai việc huỷ đăng ký phía máy chủ đối với Mã đăng ký FCM cho chủ đề FCM

  1. Đối với việc huỷ đăng ký chủ đề phía máy chủ, hãy sử dụng API unsubscribeFromTopic này. Bạn sẽ thêm mã có liên quan vào hàm unsubscribeFcmRegistrationTokensFromTopic của lớp FcmSubscriptionManager.java.

8d9e8ea9d34016bd.png

  1. Bạn có thể tự thực hiện việc triển khai mã huỷ đăng ký phía máy chủ và xác thực hiệu quả của mã này bằng cách gửi một thông báo theo chủ đề.

11. Xin chúc mừng

Xin chúc mừng! Bạn đã sử dụng thành công các chủ đề FCM để gửi thông báo truyền tin đến các nhóm nhỏ của phiên bản ứng dụng. Điều này sẽ giúp bạn dễ dàng tiếp cận người dùng đúng lúc bằng nội dung phù hợp.

947def3eb33b1e4a.gif

Tiếp theo là gì?

Giờ đây, bạn đã hoàn thành lớp học lập trình này, hãy cân nhắc việc thử các chủ đề cho những nền tảng khác bằng cách sử dụng các hướng dẫn sau:

Tài liệu tham khảo