Firebase Messaging Topic for C#
===
## 文章內容
[TOC]
## 主題(Topic)說明
關於主題需要記住的一些事項:
1. 主題消息最適合天氣等內容或其他公開可用的信息。
2. 主題消息針對吞吐量而不是延遲進行了優化。為了快速、安全地傳遞到單個設備或小組設備,請將消息定位到註冊令牌,而不是主題。
3. 如果您需要將消息發送到每個用戶的多個設備,請考慮針對這些用例進行設備群組消息傳遞。
4. 主題消息支持每個主題的無限訂閱。但是,FCM 在以下領域實施限制:
5. 一個應用實例最多可以訂閱 2000 個主題。
6. 如果您使用批量導入訂閱應用實例,則每個請求限制為 1000 個應用實例。
7. 新訂閱的頻率受每個項目的速率限制。如果您在短時間內發送太多訂閱請求,FCM 服務器將響應429 RESOURCE_EXHAUSTED (“超出配額”)響應。使用指數退避重試。is, start here!
管理服務器上的主題訂閱 C#
---
> 您可以將註冊令牌列表傳遞給 Firebase Admin SDK 訂閱方法,以便為相應的設備**訂閱主題**:[FirebaseMessagingSnippets.cs ](https://github.com/firebase/firebase-admin-dotnet/blob/2d0a1a5a1ba6e219f0418c9e8f7265b887aa8563/FirebaseAdmin/FirebaseAdmin.Snippets/FirebaseMessagingSnippets.cs#L327-L341)
```csharp=
// 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");
```
> Admin FCM API 還允許您通過將註冊令牌傳遞給適當的方法來**取消訂閱**設備的主題:[FirebaseMessagingSnippets.cs ](https://github.com/firebase/firebase-admin-dotnet/blob/2d0a1a5a1ba6e219f0418c9e8f7265b887aa8563/FirebaseAdmin/FirebaseAdmin.Snippets/FirebaseMessagingSnippets.cs#L327-L341)
```csharp=
// 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#
---
> 向主题发送消息
```csharp=
// 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);
```
## 資料來源
:::info
1. [Firebase Topic訂閱、取消訂閱 C#](https://firebase.google.com/docs/cloud-messaging/android/topic-messaging#c)
2. [Firebase 建構服務器發送請求 C#](https://firebase.google.com/docs/cloud-messaging/send-message#c)
:::
###### tags: `Firebase` `Messaging` `C#`