Dựa trên mô hình xuất bản/đăng ký, tính năng nhắn tin theo chủ đề FCM cho phép bạn gửi tin nhắn trên nhiều thiết bị đã chọn tham gia vào một chủ đề cụ thể. Bạn soạn tin nhắn chủ đề dưới dạng cần thiết và FCM xử lý việc định tuyến và gửi thư một cách đáng tin cậy đến bên phải thiết bị.
Ví dụ: người dùng thủy triều cục bộ ứng dụng dự báo có thể chọn nhận "cảnh báo dòng thuỷ triều" chủ đề và nhận thông báo về điều kiện tối ưu cho hoạt động đánh bắt cá biển ở những khu vực cụ thể. Người dùng ứng dụng thể thao có thể đăng ký nhận thông tin cập nhật tự động trong phần tỷ số trực tiếp của trận đấu để xem nhóm.
Một số điều cần lưu ý về chủ đề:
- Tính năng nhắn tin theo chủ đề phù hợp nhất với nội dung như thời tiết hoặc các nội dung công khai thông tin hiện có.
- Thông báo theo chủ đề được tối ưu hoá cho thông lượng thay vì độ trễ. Để giao hàng nhanh, an toàn đến một thiết bị hoặc một nhóm nhỏ các thiết bị, nhắm mục tiêu thông báo đến mã thông báo đăng ký, chứ không phải chủ đề.
- Nếu bạn cần gửi thông báo đến nhiều thiết bị cho mỗi người dùng, hãy cân nhắc nhắn tin theo nhóm thiết bị cho các trường hợp sử dụng đó.
- Tính năng nhắn tin theo chủ đề hỗ trợ số lượt đăng ký không giới hạn cho mỗi chủ đề. Tuy nhiên, FCM
thực thi giới hạn trong những lĩnh vực sau:
- Một phiên bản ứng dụng chỉ có thể đăng ký tối đa 2.000 chủ đề.
- Nếu bạn đang sử dụng nhập hàng loạt đăng ký phiên bản ứng dụng, mỗi yêu cầu chỉ được có 1.000 phiên bản ứng dụng.
- Tần suất đăng ký mới bị giới hạn tỷ lệ cho mỗi dự án. Nếu bạn gửi quá nhiều
các yêu cầu đăng ký trong một khoảng thời gian ngắn, máy chủ FCM sẽ phản hồi bằng một
Phản hồi
429 RESOURCE_EXHAUSTED
("vượt quá hạn mức"). Thử lại bằng thời gian đợi luỹ thừa.
Đăng ký ứng dụng khách theo một chủ đề
Ứng dụng khách có thể đăng ký theo dõi bất kỳ chủ đề hiện có nào hoặc có thể tạo một chủ đề mới chủ đề. Khi một ứng dụng khách đăng ký một tên chủ đề mới (tên này phù hợp với chưa tồn tại cho dự án Firebase của bạn), một chủ đề mới có tên đó là được tạo trong FCM và mọi khách hàng sau đó có thể đăng ký tài khoản này.
Để đăng ký một chủ đề, ứng dụng khách sẽ gọi Firebase Cloud Messaging
subscribeToTopic()
với tên chủ đề là FCM. Phương thức này
sẽ trả về một Task
mà trình nghe hoàn thành có thể sử dụng để xác định xem
đăng ký thành công:
Kotlin+KTX
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()
với tên chủ đề.
Quản lý đăng ký chủ đề trên máy chủ
Firebase Admin SDK cho phép bạn thực hiện các thao tác cơ bản nhiệm vụ quản lý chủ đề từ phía máy chủ. Sau khi đăng ký mã thông báo, bạn có thể đăng ký và huỷ đăng ký hàng loạt bản sao ứng dụng khách bằng cách sử dụng logic máy chủ.
Bạn có thể đăng ký các phiên bản ứng dụng khách cho bất kỳ chủ đề hiện có nào, hoặc bạn có thể tạo một chủ đề mới. Khi bạn sử dụng API để đăng ký một ứng dụng khách sang 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 đó được tạo trong FCM và bất kỳ khách hàng nào sau đó cũng có thể hãy đăng ký kênh đó.
Bạn có thể chuyển danh sách mã thông báo đăng ký tới Firebase Admin SDK để đăng ký thiết bị tương ứng với 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')
Tiến hành
// 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");
API FCM dành cho quản trị viên cũng cho phép bạn huỷ đăng ký thiết bị khỏi một chủ đề bằng cách chuyển mã thông báo đăng ký đến dịch vụ phương thức:
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')
Tiến hành
// 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");
Phương thức subscribeToTopic()
và unsubscribeFromTopic()
dẫn đến kết quả
đối tượng chứa phản hồi từ FCM. Loại dữ liệu trả về có cùng
bất kể số lượng mã thông báo đăng ký được chỉ định trong
của bạn.
Trong trường hợp xảy ra lỗi (không xác thực được, mã thông báo hoặc chủ đề không hợp lệ, v.v.) thì các phương thức này dẫn đến 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 Lỗi API Quản trị FCM.
Nhận và xử lý thông báo theo chủ đề
FCM gửi thông điệp theo chủ đề theo cách tương tự như các hạ nguồn khác tin nhắn.
Để nhận tin nhắn, hãy sử dụng một dịch vụ mở rộng
FirebaseMessagingService
.
Dịch vụ của bạn phải ghi đè onMessageReceived
và onDeletedMessages
lệnh gọi lại.
Khoảng thời gian xử lý thông báo có thể ngắn hơn 20 giây tuỳ thuộc vào sự chậm trễ
phát sinh trước khi gọi onMessageReceived
, bao gồm cả độ trễ hệ điều hành, thời gian khởi động ứng dụng,
luồng chính đang bị chặn bởi các thao tác khác hoặc onMessageReceived
trước đó
cuộc gọi mất quá nhiều thời gian. Sau thời gian đó, các hành vi hệ điều hành khác nhau như
quy trình
giết người hoặc của Android O
giới hạn thực thi trong nền có thể ảnh hưởng đến khả năng hoàn thành công việc của bạn.
onMessageReceived
được cung cấp cho hầu hết các loại thông báo, với những loại sau
ngoại lệ:
-
Gửi tin nhắn thông báo khi ứng dụng của bạn chạy trong nền. Trong phần này hộp đựng, thông báo sẽ được gửi đến khay hệ thống của thiết bị. Người dùng nhấn vào một thông báo mở trình chạy ứng dụng theo mặc định.
-
Tin nhắn có cả tải trọng thông báo và tải trọng dữ liệu, khi nhận ở chế độ nền. Trong trường hợp này, thông báo sẽ được gửi đến khay hệ thống của thiết bị, và tải trọng dữ liệu được phân phối trong phần bổ sung của ý định của Hoạt động của trình chạy.
Tóm lại:
Trạng thái ứng dụng | Thông báo | Dữ liệu | Cả hai |
---|---|---|---|
Màu nổi | onMessageReceived |
onMessageReceived |
onMessageReceived |
Thông tin khái quát | Khay hệ thống | onMessageReceived |
Thông báo: khay hệ thống Dữ liệu: trong phần bổ sung của ý định. |
Chỉnh sửa tệp kê khai ứng dụng
Để sử dụng FirebaseMessagingService
, bạn cần thêm đoạn mã sau vào
tệp kê khai ứng dụng:
<service android:name=".java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
Ngoài ra, bạn nên đặt các giá trị mặc định để tuỳ chỉnh giao diện thông báo. Bạn có thể chỉ định biểu tượng mặc định tuỳ chỉnh và màu mặc định tuỳ chỉnh được áp dụng bất cứ khi nào các giá trị tương đương không được đặt trong tải trọng thông báo.
Thêm những dòng này vào bên trong
Thẻ application
để đặt biểu tượng và màu sắc tuỳ chỉnh mặc định:
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. See README(https://goo.gl/l4GJaQ) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_ic_notification" /> <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message. See README(https://goo.gl/6BKBk7) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" />
Android hiển thị biểu tượng mặc định tuỳ chỉnh cho
- Tất cả thông báo được gửi từ Trình soạn thông báo.
- Mọi nội dung thông báo không đặt biểu tượng một cách rõ ràng trong tải trọng thông báo.
Android sử dụng màu mặc định tuỳ chỉnh cho
- Tất cả thông báo được gửi từ Trình soạn thông báo.
- Mọi nội dung thông báo không đặt rõ màu trong thông báo tải trọng.
Nếu bạn không đặt biểu tượng mặc định tuỳ chỉnh và biểu tượng nào trong tải trọng thông báo, Android hiển thị biểu tượng ứng dụng có màu trắng.
Ghi đè onMessageReceived
Bằng cách ghi đè phương thức FirebaseMessagingService.onMessageReceived
,
bạn có thể thực hiện hành động dựa trên
Tin nhắn từ xa
và lấy dữ liệu tin nhắn:
Kotlin+KTX
override fun onMessageReceived(remoteMessage: RemoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: ${remoteMessage.from}") // Check if message contains a data payload. if (remoteMessage.data.isNotEmpty()) { Log.d(TAG, "Message data payload: ${remoteMessage.data}") // Check if data needs to be processed by long running job if (needsToBeScheduled()) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob() } else { // Handle message within 10 seconds handleNow() } } // Check if message contains a notification payload. remoteMessage.notification?.let { Log.d(TAG, "Message Notification Body: ${it.body}") } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
Java
@Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: " + remoteMessage.getFrom()); // Check if message contains a data payload. if (remoteMessage.getData().size() > 0) { Log.d(TAG, "Message data payload: " + remoteMessage.getData()); if (/* Check if data needs to be processed by long running job */ true) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob(); } else { // Handle message within 10 seconds handleNow(); } } // Check if message contains a notification payload. if (remoteMessage.getNotification() != null) { Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
Ghi đè onDeletedMessages
Trong một số trường hợp, FCM có thể không gửi được tin nhắn. Điều này xảy ra khi có quá nhiều
thư (>100) đang chờ xử lý trong
ứng dụng của bạn trên một thiết bị cụ thể tại thời điểm ứng dụng kết nối hoặc nếu thiết bị chưa kết nối với
FCM trong hơn một tháng. Trong những trường hợp này,
bạn có thể nhận được cuộc gọi lại đến FirebaseMessagingService.onDeletedMessages()
Khi thực thể ứng dụng nhận được lệnh gọi lại này,
nó sẽ thực hiện đồng bộ hoá toàn bộ với máy chủ ứng dụng của bạn. Nếu bạn chưa gửi tin nhắn cho ứng dụng qua email đó
thiết bị trong vòng 4 tuần qua, FCM sẽ không gọi onDeletedMessages()
.
Xử lý tin nhắn thông báo trong ứng dụng chạy ở chế độ nền
Khi ứng dụng của bạn chạy trong nền, Android sẽ chuyển tin nhắn thông báo đến khay hệ thống. Khi người dùng nhấn vào thông báo, trình chạy ứng dụng sẽ mở bằng cách mặc định.
Bao gồm cả các tin nhắn chứa cả thông báo và dữ liệu tải trọng (và tất cả thông báo được gửi từ Bảng điều khiển thông báo). Trong những trường hợp này, thông báo sẽ được gửi đến khay hệ thống và tải trọng dữ liệu được phân phối trong phần bổ sung của ý định của Hoạt động của trình chạy.
Để biết thông tin chi tiết về cách gửi thư đến ứng dụng của bạn, hãy xem Trang tổng quan báo cáo FCM, nơi ghi lại các số thư được gửi và mở trên thiết bị Apple và Android, cùng với dữ liệu về "lượt hiển thị" (thông báo mà người dùng nhìn thấy) đối với ứng dụng Android.
Tạo yêu cầu gửi
Sau khi bạn tạo một chủ đề, bằng cách đăng ký các phiên bản ứng dụng khách để chủ đề ở phía máy khách hoặc thông qua server API, bạn có thể gửi thông báo đến chủ đề. Nếu đây là lần đầu tiên bạn tạo yêu cầu gửi cho FCM, hãy xem hướng dẫn về môi trường máy chủ của bạn và FCM cho thông tin quan trọng về nền tảng và chế độ thiết lập.
Trong logic gửi trên phần phụ trợ, hãy chỉ định tên chủ đề mà bạn muốn như được hiển thị:
Node.js
// The topic name can be optionally prefixed with "/topics/".
const topic = 'highScores';
const message = {
data: {
score: '850',
time: '2:45'
},
topic: topic
};
// Send a message to devices subscribed to the provided topic.
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
Java
// The topic name can be optionally prefixed with "/topics/".
String topic = "highScores";
// See documentation on defining a message payload.
Message message = Message.builder()
.putData("score", "850")
.putData("time", "2:45")
.setTopic(topic)
.build();
// Send a message to the devices subscribed to the provided topic.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
Python
# The topic name can be optionally prefixed with "/topics/".
topic = 'highScores'
# See documentation on defining a message payload.
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
topic=topic,
)
# Send a message to the devices subscribed to the provided topic.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
Tiến hành
// The topic name can be optionally prefixed with "/topics/".
topic := "highScores"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Topic: topic,
}
// Send a message to the devices subscribed to the provided topic.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)
C#
// The topic name can be optionally prefixed with "/topics/".
var topic = "highScores";
// See documentation on defining a message payload.
var message = new Message()
{
Data = new Dictionary<string, string>()
{
{ "score", "850" },
{ "time", "2:45" },
},
Topic = topic,
};
// Send a message to the devices subscribed to the provided topic.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
Kiến trúc chuyển trạng thái đại diện (REST)
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"topic" : "foo-bar",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message"
}
}
}
Lệnh cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message": {
"topic" : "foo-bar",
"notification": {
"body": "This is a Firebase Cloud Messaging Topic Message!",
"title": "FCM Message"
}
}
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Để gửi thư đến một tổ hợp chủ đề,
chỉ định điều kiện, là biểu thức boolean chỉ định
chủ đề mục tiêu. Ví dụ: điều kiện sau đây sẽ gửi thông báo đến
các thiết bị đã đăng ký TopicA
và TopicB
hoặc TopicC
:
"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"
Trước tiên, FCM sẽ đánh giá mọi điều kiện trong dấu ngoặc đơn, sau đó đánh giá
biểu thức từ trái sang phải. Trong biểu thức trên, người dùng đã đăng ký
bất kỳ chủ đề nào đều không nhận được thông báo. Tương tự, một người dùng không
đăng ký TopicA
không nhận được thông báo. Những cách kết hợp này
nhận email:
TopicA
vàTopicB
TopicA
vàTopicC
Bạn có thể đưa tối đa 5 chủ đề vào biểu thức có điều kiện.
Để gửi đến một điều kiện:
Node.js
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
const condition = '\'stock-GOOG\' in topics || \'industry-tech\' in topics';
// See documentation on defining a message payload.
const message = {
notification: {
title: '$FooCorp up 1.43% on the day',
body: '$FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
},
condition: condition
};
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
Java
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
String condition = "'stock-GOOG' in topics || 'industry-tech' in topics";
// See documentation on defining a message payload.
Message message = Message.builder()
.setNotification(Notification.builder()
.setTitle("$GOOG up 1.43% on the day")
.setBody("$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.")
.build())
.setCondition(condition)
.build();
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
Python
# Define a condition which will send to devices which are subscribed
# to either the Google stock or the tech industry topics.
condition = "'stock-GOOG' in topics || 'industry-tech' in topics"
# See documentation on defining a message payload.
message = messaging.Message(
notification=messaging.Notification(
title='$GOOG up 1.43% on the day',
body='$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.',
),
condition=condition,
)
# Send a message to devices subscribed to the combination of topics
# specified by the provided condition.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
Tiến hành
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
condition := "'stock-GOOG' in topics || 'industry-tech' in topics"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Condition: condition,
}
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)
C#
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";
// See documentation on defining a message payload.
var message = new Message()
{
Notification = new Notification()
{
Title = "$GOOG up 1.43% on the day",
Body = "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
},
Condition = condition,
};
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
Kiến trúc chuyển trạng thái đại diện (REST)
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"condition": "'dogs' in topics || 'cats' in topics",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message",
}
}
}
Lệnh cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"notification": {
"title": "FCM Message",
"body": "This is a Firebase Cloud Messaging Topic Message!",
},
"condition": "'dogs' in topics || 'cats' in topics"
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Các bước tiếp theo
- Tìm hiểu thêm về cách khác để gửi đến nhiều thiết bị: nhắn tin theo nhóm thiết bị