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ể sử dụng chủ đề FCM để truyền nhiều thông báo đẩy đến các nhóm con của các phiên bản ứng dụng khác nhau.

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

Tổng quan về chủ đề

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

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

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

Tính năng phát đ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 theo dõi chủ đề trong ứng dụng di động.
  • Cách gửi thông báo đẩy nhiều hướng bằng chủ đề.
  • Cách gửi thông báo cho một tổ hợp chủ đề bằng các điều kiện về chủ đề.
  • Cách quản lý các gói thuê bao chủ đề ở phía máy chủ, cũng như tiến hành đăng ký và huỷ đăng ký hàng loạt.

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

  • Ứng dụng Android đăng ký/huỷ đăng ký theo dõi các chủ đề và nhận thông báo khi được gửi đến các chủ đề.
  • Tích hợp phía máy chủ bằng cách sử dụng SDK quản trị của Firebase. SDK này sẽ được dùng để gửi các thông báo về chủ đề qua API FCM.

Bạn cần có

  • Một trình duyệt bạn chọn, chẳng hạn như Chrome.
  • IDE IntelliJ IDEA để phát triển các ứng dụng Java.
    • Hãy nhớ chọn sử dụng tính năng hỗ trợ Gradle trong khi cài đặt.
  • IDE Android Studio dùng để phát triển các ứng dụng Android.
  • 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 kết nối với máy tính của bạn và được đặt ở chế độ nhà phát triển.
  • 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. Tệp này chứa hai thư mục StockNewsAppStockNewsServer. Phần trước chứa ứng dụng Android khởi đầu và phần sau có 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 tất của lớp học lập trình này sẽ được đặt trong thư mục messaging/fcm-topics-codelab/completed.

Tạo một dự án Firebase

  1. Trong bảng điều khiển của Firebase, hãy nhấp vào Thêm dự án, đặt tên cho dự án Firebase đó là stockNews rồi nhấp vào tiếp tục. Lưu ý: Hãy ghi nhớ Mã dự án cho dự án Firebase của bạn (hoặc nhấp vào biểu tượng Chỉnh sửa để đặt Mã dự án mà bạn muốn).

fc08f9a7808e4553.pngS

  1. Bạn có thể bỏ qua bước bật Google Analytics. Để phục vụ mục đích của lớp học lập trình này, bạn không cần đến. Nhấp vào Tiếp tục.
  2. Nhấp vào Tạo dự án.

Xin chúc mừng! Bạn vừa tạo dự án Firebase của mình. Bây giờ, bạn có thể nhấp vào tên dự án để truy cập vào bảng điều khiển.

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 bạn đang thực hiện. Tuy nhiên, để thêm tính năng hỗ trợ cho 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ã.

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

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

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

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

  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 được cung cấp trong AndroidManifest.xml của mã khởi đầu khoNewsApp của bạn. Nếu bạn muốn tìm hoặc thay đổi vị trí, 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 Chứng chỉ ký gỡ lỗi SHA-1 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. Hãy để 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 bước khác đã được định cấu hình trong mã ứng dụng khởi đầu. Bạn sẽ thấy ứng dụng của mình được liệt kê trên trang chính của Bảng điều khiển của Firebase.
  6. Sao chép tệp google-services.json (mà 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 công việc trên ứng dụng của mình! Trước tiên, hãy tạo và chạy ứng dụng.

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

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

Sau khi dự án được tải, bạn cũng có thể 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 "Ignore" (Bỏ qua) hoặc "X" ở phía trên bên phải. (Bạn sẽ không đẩy thay đổi nào 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 nội dung tương tự như hình bên dưới nếu đang ở chế độ xem Android. (Nếu đang ở chế độ xem Project (Dự án), bạn cần mở rộng dự án để thấy được điều tương tự)

b574ea0089ee87c6.png.

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

4bc64eb3b99eb0ae.png.

Bạn nên đợi cho đến khi quá trình này hoàn tất rồi mới thay đổi mã. Thao tác này sẽ cho phép Android Studio lấy tất cả thành phần cần thiết.

Ngoài ra, nếu bạn nhận được lời nhắc "Tải lại để các thay đổi về ngôn ngữ có hiệu lực?" hoặc nội dung tương tự, hãy chọn "Có".

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

Nếu bạn cần trợ giúp về việc 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 gọn nhẹ, có giao diện người dùng và chức năng ở mức tối thiểu.
  • Một phần phụ thuộc của firebase-Messaging SDK đã được thêm vào tệp app/build.gradle.

f04ff8f48d186dff.pngS

  • Trong AndroidManifest.xml, một trình xử lý 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. Xem tài liệu về FirebaseMessagingService để tìm hiểu thêm. b843c4d33ee53166.pngS
    88fad1960f4a6ff5.pngS
    • Hàm onNewToken được gọi khi Mã thông báo đăng ký FCM được tạo hoặc làm mới. Hãy xem bài viết 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 nhận được tin nhắn và ứng dụng đang chạy trên nền trước. Hiện tại, Chrome chỉ ghi lại tin nhắn đã nhận.
  • Ngoài ra, trong AndroidManifest.xml, một lớp Application của Android cũng được cung cấp có tên là StockNewsApplication. a4982a8731492dfc.png.ccde692f7f68dc5a.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, lệnh gọi tạo Mã thông báo đăng ký FCM sẽ được thêm. Hệ thống sẽ tạo một Mã thông báo đăng ký FCM hợp lệ và ghi lại mã đó.
  • MainActivity.java thêm RecyclerView cho thấy các lựa chọn về Danh mục cổ phiếu.
  • 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 chứng khoán đều có tên và nút bật/tắt gói thuê bao bên cạnh.
    • Việc thay đổi nút bật/tắt sẽ thực hiện một cuộc gọi đăng ký/huỷ đăng ký theo 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 quan.

b32663ec4e865a18.pngs

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 trình mô phỏng hoặc thiết bị Android mục tiêu rồi nhấn nút chạy.

5b27fc5b237e06b9.pngS

  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 một Mã thông báo đăng ký FCM và ghi nhật ký mã đó. Tuy nhiên, 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ã này sẽ được dùng trong các bước tiếp theo.

927eb66bc909f36b.pngs

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

Bây giờ, bạn có thể gửi tin nhắn kiểm thử đến phiên bản ứng dụng mà bạn đã thiết lập ở bước trước.

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

Khởi động IntelliJ IDEA và 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.

Lưu ý: Có thể mất vài phút để IntellIj IDEA xây dựng 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 về mã khởi đầu của máy chủ

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

650fc733298588f8.png.

  • Cuối cùng, có hai lớp, ví dụ:
    • FcmSender.java: Lớp này chứa các phương thức ghi chú sau:
      • initFirebaseSDK: Khởi chạy SDK quản trị của Firebase.
      • sendMessageToFcmRegistrationToken: gửi tin nhắn đến Mã thông báo đăng ký FCM.
      • sendMessageToFcmTopic: gửi tin nhắn đến một chủ đề FCM.
      • sendMessageToFcmTopicCondition: gửi tin nhắn đến một điều kiện của chủ đề FCM.
    • FcmSubscriptionManager.java: Lớp này chứa các phương thức cho phép quản lý các gói đăng ký chủ đề từ phía máy chủ.
      • initFirebaseSDK: Khởi chạy SDK quản trị của Firebase.
      • subscribeFcmRegistrationTokensToTopic: đăng ký(các) Mã thông báo đăng ký FCM theo chủ đề FCM.
      • unsubscribeFcmRegistrationTokensFromTopic: huỷ đăng ký(các) Mã thông báo đăng ký FCM về 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 SDK quản trị của Firebase uỷ quyền lệnh gọi đến các 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 trên thanh điều hướng bên trái rồi chọn Cài đặt dự án. 8c2108d4d7c915e9.png.
    2. Trên 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.pngS
    3. Giờ hãy nhấp vào nút Tạo khoá cá nhân mới và quá trình tự động tải tệp khoá của bạn xuống sẽ bắt đầu.
    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 qua classpath bằng đoạn mã sau. 8dffbee658e0bdd.pngs
  2. Lúc này, mã máy chủ đã sẵn sàng. Chạy bản dựng -> Tạo dự án qua thanh trình đơn trên cùng.

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

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

52e4a3ec3f816473.pngS

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

d3540ec1089f97dd.pngS

  1. Và khi phiên bản Ứng dụng chạy ở 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 SDK quản trị của Firebase để gửi thông báo đến một phiên bản ứng dụng. Đọc thêm về cách sử dụng SDK quản trị của Firebase trong máy chủ của bạn.

6. Triển khai gói thuê bao / huỷ đăng ký chủ đề

Ở bước này, bạn sẽ triển khai các thao tác đăng ký chủ đề và huỷ đăng ký, 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 nút chuyển cho một Danh mục cổ phiếu cụ thể, một cuộc gọi đăng ký chủ đề hoặc huỷ đăng ký sẽ được thực hiện.

Xem lại mã

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

6c0614199e684f6.pngS

  • Hàm khởi tạo lớp thiết lập 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 nút bật/tắt, các thao tác đăng ký và huỷ đăng ký sẽ được thực hiện bằng cách gọi các phương thức subscribeToStockCategoryunsubscribeFromStockCategory tương ứng.
  • 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 gói thuê bao 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 chức năng huỷ đăng ký chủ đề

  1. Tương tự, trong điều kiện else, bạn sẽ triển khai lệnh gọi đến API unsubscribeFromTopic. Nội dung dưới đây:
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!

  1. Chạy Ứng dụng và bật/tắt các tuỳ chọn Danh mục cổ phiếu để thực thi thao tác Đăng ký và Huỷ đăng ký. Mã sẽ có dạng như sau:

Đăng ký

Hủy đăng ký

7. Đang gửi Tin nhắn chủ đề đầu tiên của bạn

Trong bước này, bạn sẽ triển khai mã phía máy chủ để gửi tin nhắn theo chủ đề FCM.

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

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

56381dd1b40cde9c.png.

  1. Trong dòng đầu tiên, cung cấp Chủ đề FCM mà bạn muốn gửi thông điệp đến.
    • Đó 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).
    • Điểm khác biệt sẽ là 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 vào 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ỉ bật lệnh gọi tới hàm sendMessageToFcmTopic.

9a6aa08dd7c28898.pngS

Gửi tin nhắn và xác thực biên nhận

  1. Trước khi gửi thông báo chủ đề, trước tiên hãy đảm bảo rằng phiên bản ứng dụng của bạn đã được đăng ký với chủ đề mà bạn muốn gửi tớ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.pngS
  2. Giờ đây, bạn có thể gửi tin nhắn 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 xác 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.pngS
    1. Phiên bản ứng dụng trong nền
    44efc7dfd57e8e9a.png.
  4. Bật mí thêm cho bạn: Thử huỷ đăng ký chủ đề bạn đã gửi đến rồi gửi lại thư. Bạn sẽ thấy rằng thông báo không được gửi đến thực thể ứng dụng.

8. Gửi Thông báo về điều kiện chủ đề đầu tiên của bạn

Tính năng điều kiện về chủ đề giúp bạn gửi thông điệp đến một tổ hợp các chủ đề để đưa ra định nghĩa rõ ràng hơn về đối tượng.

Ví dụ: trong ứng dụng stockNews của chúng tôi, hãy xem xét khả năng gửi tin nhắn đến một nhóm phiên bản ứng dụng đã đăng ký chủ đề Công nghệ hoặc Automotive. Những trường hợp như vậy có thể xảy ra, chẳng hạn như 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 biểu thức boolean bằng cách sử dụng các toán tử sau

  • && : Logic AND. 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ô.
  • || : Lôgic OR. Ví dụ: 'Technology' in topics || 'Automotive' in topics – Nhắm đến các thực thể ứng dụng đăng ký chủ đề Công nghệ hoặc Ô tô.
  • () : Dấu ngoặc đơn để nhóm. Ví dụ: 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) – Chỉ nhắm đến các phiên bản ứng dụng đã đăng ký theo dõi chủ đề Công nghệ và 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 hoạt động tích hợp phía máy chủ để gửi thông báo về điều kiện của chủ đề

  1. Quay lại mã máy chủ, chuyển đến FcmSender.java rồi 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. 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. Điểm khác biệt sẽ là 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 vào 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ỉ bật lệnh gọi tới hàm sendMessageToFcmTopicCondition.

db9588d40d2a0da6.pngS

Gửi tin nhắn và xác thực biên nhận

  1. Trước khi gửi thông báo 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 tin nhắn 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 xác nhận tin nhắn trong phiên bản ứng dụng.
    1. Phiên bản ứng dụng ở nền trước
    6f612ace15aa6515.pngs
    1. Phiên bản ứng dụng trong nền
    78044a56ac2359cb.pngS
  4. Thêm: Bây giờ bạn có thể hủy đăng ký khỏi chủ đề Công nghệ và gửi lại thư về điều kiện của chủ đề. Bạn sẽ thấy rằng thực thể ứ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ý chủ đề / hủy đăng ký khỏi một phiên bản ứng dụng.
  • Gửi tin nhắn đến chủ đề và xác minh biên nhận trên các phiên bản ứng dụng đã đăng ký.
  • Gửi tin nhắn đến một chủ đề Điều kiện và xác minh biên nhận trong 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 theo các chủ đề mà không cần tạo thực thể lệnh gọi từ phía máy khách.

c0dc20655d392690.gif

10. Quản lý các lượt đăng ký chủ đề từ phía máy chủ

Cho đến nay, trong lớp học lập trình này, tất cả lệnh gọi đăng ký chủ đề và huỷ đăng ký đề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ể cần quản lý việc đăng ký chủ đề từ Phía máy chủ. Ví dụ: bạn có thể muốn đăng ký một nhóm con cơ sở người dùng hiện tại của mình theo chủ đề mới mà không cần chờ phát hành ứng dụng.

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

Triển khai gói thuê bao 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 đến lớp FcmSubscriptionManager.java. Tìm phương thức có tên subscribeFcmRegistrationTokensToTopic. Bạn sẽ triển khai lệnh gọi đến API subscribeToTopic tại đây.

5d5709e7b3cbcb04.pngS

  1. Hãy đăng ký phiên bản ứng dụng này theo chủ đề Năng lượng. Để làm được điều đó, trước tiên, hãy cung cấp dữ liệu cho hai trường sau:
    1. registrationTokens: một 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 gói thuê bao chủ đề.
    2. topicName: tên chủ đề của 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 để biết một số số liệu thống kê về kết quả cấp cao. Chẳng hạn như in số lượng gói thuê bao chủ đề được tạo thành công bằng getSuccessCount.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. Cuối cùng, trong hàm main, 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. Tại thời điểm này, bạn có thể tạo đăng ký chủ đề và gửi tin nhắn tới đó.
  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 tin nhắn. Tương tự như trước,
    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 rồi nhắm mục tiêu đối tượng đó đến chủ đề bằng setTopic.
    4. Cuối cùng, hãy cập nhật phương thức main để chỉ bật hàm 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 thực thể ứng dụng và bạn có thể quan sát thông báo đó trong ứng dụng như sau.
    1. Phiên bản ứng dụng ở nền trước
    40ab6cf71e0e4116.png.
    1. Phiên bản ứng dụng trong nền
    8fba81037198209e.png.

Triển khai phía máy chủ huỷ đăng ký Mã thông báo đăng ký FCM cho chủ đề FCM

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

8d9e8ea9d34016bd.png.

  1. Việc triển khai mã huỷ đăng ký phía máy chủ và xác thực tác động của mã bằng cách gửi thông báo chủ đề, vẫn là một bài tập dành cho bạn.

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 phát đa hướng đến các nhóm con của các phiên bản ứng dụng của mình. Điều này sẽ giúp đơn giản hoá khả năng tiếp cận người dùng kịp thời 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, hãy cân nhắc thử nghiệm các chủ đề cho các nền tảng khác theo hướng dẫn sau:

Tài liệu tham khảo