Quản lý gói thuê bao theo chủ đề

Bạn có thể đăng ký ứng dụng khách vào một chủ đề từ máy chủ hoặc ứng dụng khách:

  • Trên máy chủ, sử dụng Firebase Admin SDK.

  • Trên ứng dụng khách, sử dụng API phía máy khách trong ứng dụng của bạn.

Quản lý gói thuê bao chủ đề bằng SDK dành cho quản trị viên

Firebase Admin SDK cho phép bạn thực hiện các tác vụ quản lý chủ đề cơ bản ở phía máy chủ. Với(các) mã thông báo đăng ký, bạn có thể đăng ký và huỷ đăng ký hàng loạt các thực thể ứng dụng khách bằng logic máy chủ.

Bạn có thể đăng ký các thực thể ứng dụng khách vào bất kỳ chủ đề hiện có nào hoặc tạo một chủ đề mới. Khi bạn sử dụng API để đăng ký một ứng dụng khách vào một chủ đề mới (chủ đề chưa tồn tại cho dự án Firebase của bạn), một chủ đề mới có tên đó sẽ được tạo trong FCM và sau đó, bất kỳ ứng dụng khách nào cũng có thể đăng ký chủ đề đó.

Bạn có thể truyền danh sách mã thông báo đăng ký vào phương thức Firebase Admin SDK đăng ký để đăng ký các thiết bị tương ứng vào một chủ đề:

Node.js

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  'YOUR_REGISTRATION_TOKEN_1',
  // ...
  'YOUR_REGISTRATION_TOKEN_n'
];

// Subscribe the devices corresponding to the registration tokens to the
// topic.
getMessaging().subscribeToTopic(registrationTokens, topic)
  .then((response) => {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully subscribed to topic:', response);
  })
  .catch((error) => {
    console.log('Error subscribing to topic:', error);
  });

Java

// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n"
);

// Subscribe the devices corresponding to the registration tokens to the
// topic.
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were subscribed successfully");

Python

# These registration tokens come from the client FCM SDKs.
registration_tokens = [
    'YOUR_REGISTRATION_TOKEN_1',
    # ...
    'YOUR_REGISTRATION_TOKEN_n',
]

# Subscribe the devices corresponding to the registration tokens to the
# topic.
response = messaging.subscribe_to_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were subscribed successfully')

Go

// These registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}

// Subscribe the devices corresponding to the registration tokens to the
// topic.
response, err := client.SubscribeToTopic(ctx, registrationTokens, topic)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were subscribed successfully")

C#

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Subscribe the devices corresponding to the registration tokens to the
// topic
var response = await FirebaseMessaging.DefaultInstance.SubscribeToTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were subscribed successfully");

Firebase Admin SDK cũng cho phép bạn huỷ đăng ký thiết bị khỏi một chủ đề bằng cách truyền mã thông báo đăng ký vào phương thức thích hợp

Node.js

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  'YOUR_REGISTRATION_TOKEN_1',
  // ...
  'YOUR_REGISTRATION_TOKEN_n'
];

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
getMessaging().unsubscribeFromTopic(registrationTokens, topic)
  .then((response) => {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully unsubscribed from topic:', response);
  })
  .catch((error) => {
    console.log('Error unsubscribing from topic:', error);
  });

Java

// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n"
);

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
TopicManagementResponse response = FirebaseMessaging.getInstance().unsubscribeFromTopic(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were unsubscribed successfully");

Python

# These registration tokens come from the client FCM SDKs.
registration_tokens = [
    'YOUR_REGISTRATION_TOKEN_1',
    # ...
    'YOUR_REGISTRATION_TOKEN_n',
]

# Unubscribe the devices corresponding to the registration tokens from the
# topic.
response = messaging.unsubscribe_from_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were unsubscribed successfully')

Go

// These registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
response, err := client.UnsubscribeFromTopic(ctx, registrationTokens, topic)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were unsubscribed successfully")

C#

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Unsubscribe the devices corresponding to the registration tokens from the
// topic
var response = await FirebaseMessaging.DefaultInstance.UnsubscribeFromTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were unsubscribed successfully");

Các phương thức subscribeToTopic()unsubscribeFromTopic() sẽ trả về một đối tượng chứa phản hồi từ FCM. Kiểu dữ liệu trả về có cùng định dạng bất kể số lượng mã thông báo đăng ký được chỉ định trong yêu cầu.

Trong trường hợp xảy ra lỗi (lỗi xác thực, mã thông báo hoặc chủ đề không hợp lệ, v.v.), các phương thức này sẽ trả về lỗi. Để xem danh sách đầy đủ các mã lỗi, bao gồm cả nội dung mô tả và các bước giải quyết, hãy xem bài viết Firebase Admin SDK Lỗi.

Quản lý gói thuê bao chủ đề từ ứng dụng khách

Các thực thể ứng dụng khách cũng có thể đăng ký hoặc huỷ đăng ký chủ đề trực tiếp từ ứng dụng của bạn thông qua SDK Firebase. Xin lưu ý rằng FCM sẽ thử lại trong trường hợp ban đầu không thành công để đảm bảo đăng ký thành công.

Chọn nền tảng của bạn:

Android

Ứng dụng khách có thể đăng ký bất kỳ chủ đề hiện có nào hoặc tạo một chủ đề mới. Khi một ứng dụng khách đăng ký một tên chủ đề mới (chủ đề chưa tồn tại cho dự án Firebase của bạn), một chủ đề mới có tên đó sẽ được tạo trong FCM và sau đó, bất kỳ ứng dụng khách nào cũng có thể đăng ký chủ đề đó.

Để đăng ký một chủ đề, ứng dụng khách sẽ gọi Firebase Cloud Messaging subscribeToTopic() bằng tên chủ đề FCM. Phương thức này trả về một Task, mà trình nghe hoàn tất có thể dùng để xác định xem việc đăng ký có thành công hay không:

Kotlin

Firebase.messaging.subscribeToTopic("weather")
    .addOnCompleteListener { task ->
        var msg = "Subscribed"
        if (!task.isSuccessful) {
            msg = "Subscribe failed"
        }
        Log.d(TAG, msg)
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
    }

Java

FirebaseMessaging.getInstance().subscribeToTopic("weather")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                String msg = "Subscribed";
                if (!task.isSuccessful()) {
                    msg = "Subscribe failed";
                }
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Để huỷ đăng ký, ứng dụng khách sẽ gọi Firebase Cloud Messaging unsubscribeFromTopic() bằng tên chủ đề.

iOS

Ứng dụng khách có thể đăng ký bất kỳ chủ đề hiện có nào hoặc tạo một chủ đề mới. Khi một ứng dụng khách đăng ký một tên chủ đề mới (chủ đề chưa tồn tại cho dự án Firebase của bạn), một chủ đề mới có tên đó sẽ được tạo trong FCM và sau đó, bất kỳ ứng dụng khách nào cũng có thể đăng ký chủ đề đó.

Để đăng ký một chủ đề, hãy gọi phương thức đăng ký từ luồng chính của ứng dụng (FCM không an toàn theo luồng). Nếu yêu cầu đăng ký ban đầu không thành công, FCM sẽ tự động thử lại. Trong trường hợp không thể hoàn tất việc đăng ký, việc đăng ký sẽ trả về một lỗi mà bạn có thể nắm bắt trong trình xử lý hoàn tất như minh hoạ dưới đây:

Swift

Messaging.messaging().subscribe(toTopic: "weather") { error in
  print("Subscribed to weather topic")
}

Objective-C

[[FIRMessaging messaging] subscribeToTopic:@"weather"
                                completion:^(NSError * _Nullable error) {
  NSLog(@"Subscribed to weather topic");
}];

Lệnh gọi này đưa ra một yêu cầu không đồng bộ tới phần phụ trợ FCM và đăng ký ứng dụng khách vào chủ đề đã cho. Trước khi gọi subscribeToTopic:topic, hãy đảm bảo rằng thực thể ứng dụng khách đã nhận được mã thông báo đăng ký thông qua lệnh gọi lại didReceiveRegistrationToken.

Mỗi khi ứng dụng khởi động, FCM sẽ đảm bảo rằng tất cả các chủ đề được yêu cầu đã được đăng ký. Để huỷ đăng ký, hãy gọi unsubscribeFromTopic:topic, và FCM sẽ huỷ đăng ký chủ đề ở chế độ nền.

C++

Để đăng ký một chủ đề, hãy gọi ::firebase::messaging::Subscribe từ ứng dụng của bạn. Lệnh gọi này đưa ra một tài nguyên không đồng bộ tới phần phụ trợ FCM và đăng ký ứng dụng vào chủ đề đã cho.

::firebase::messaging::Subscribe("example");

Nếu yêu cầu đăng ký ban đầu không thành công, FCM sẽ thử lại cho đến khi có thể đăng ký chủ đề thành công. Mỗi khi ứng dụng khởi động, FCM sẽ đảm bảo rằng tất cả các chủ đề được yêu cầu đã được đăng ký.

Để huỷ đăng ký, hãy gọi ::firebase::messaging::Unsubscribe, và FCM sẽ huỷ đăng ký chủ đề ở chế độ nền.

Unity

Để đăng ký một chủ đề, hãy gọi Firebase.Messaging.FirebaseMessaging.Subscribe từ ứng dụng của bạn. Lệnh gọi này đưa ra một tài nguyên không đồng bộ tới phần phụ trợ FCM và đăng ký ứng dụng vào chủ đề đã cho.

Firebase.Messaging.FirebaseMessaging.Subscribe("/topics/example");

Nếu yêu cầu đăng ký ban đầu không thành công, FCM sẽ thử lại cho đến khi có thể đăng ký chủ đề thành công. Mỗi khi ứng dụng khởi động, FCM sẽ đảm bảo rằng tất cả các chủ đề được yêu cầu đã được đăng ký.

Để huỷ đăng ký, hãy gọi Firebase.Messaging.FirebaseMessaging.Unsubscribe, và FCM sẽ huỷ đăng ký chủ đề ở chế độ nền.

Quản lý chủ đề phía máy chủ cũ (Không dùng nữa)

Để hiểu Mã nhận dạng thực thể là gì, hãy truy cập vào trang Mã nhận dạng thực thể. Để biết thông tin chi tiết về các điểm cuối không dùng nữa, hãy xem Tài liệu tham khảo API Mã nhận dạng thực thể.