Henüz Firebase Admin SDK'ı ayarlamadıysanız Firebase Admin SDK'ı sunucunuzda ayarlamak için kılavuzu izleyin.
FCM HTTP v1 API'yi etkinleştirme
Firebase konsolunda
Ayarlar > Genel'e gidin. Ardından Cloud Messaging sekmesini tıklayın.Cloud Messaging API'yi etkinleştirin.
Farklı bir projeden hizmet hesabını yetkilendirme
Farklı bir projedeki ("gönderen projesi") hizmet hesabını kullanırken bir proje ("hedef proje") için ileti gönderebilirsiniz. Bu sayede, başkaları adına mesaj gönderirken hizmet hesabı yönetimini tek bir projede merkezileştirebilirsiniz. Bunu nasıl yapacağınızı öğrenmek için aşağıdaki adımları uygulayın:
Gönderen projesinde Firebase Cloud Messaging API'nin etkinleştirildiğinden emin olun. Firebase konsolunda etkinleştirilip etkinleştirilmediğini kontrol etmek için
Ayarlar > Genel'e gidin. Ardından Cloud Messaging sekmesini tıklayın.Gönderen projesinde bir hizmet hesabı oluşturun.
Hedef projede, hizmet hesabının e-posta adresine Firebase Cloud Messaging API Yöneticisi rolünü atayın. Bu işlemi Google Cloud konsolunun IAM & Admin > IAM sayfası bölümünde yapabilirsiniz. Bu rol, gönderen projedeki hizmet hesabının hedef projeye mesaj göndermesine olanak tanır.
SDK'nızı gönderen projenin hizmet hesabı anahtar dosyası ve hedef projenin proje kimliğiyle başlatın.
Node.js
import { initializeApp, applicationDefault } from 'firebase-admin/app'; initializeApp({ // The credential is configured to be the sender project's service // account key via the environment variable GOOGLE_APPLICATION_CREDENTIALS credential: applicationDefault(), projectId: '<TARGET_PROJECT_ID>', });Java
FirebaseOptions options = FirebaseOptions.builder() // The credential is configured to be the sender project's service // account key via the environment variable GOOGLE_APPLICATION_CREDENTIALS .setCredentials(GoogleCredentials.getApplicationDefault()) .setProjectId("<TARGET_PROJECT_ID>") .build(); FirebaseApp.initializeApp(options);Python
import firebase_admin app_options = {'projectId': '<TARGET_PROJECT_ID>'} # Initialize with the default credential, i.e. the sender project's service # account key, stored in GOOGLE_APPLICATION_CREDENTIALS default_app = firebase_admin.initialize_app(options=app_options)Go
config := &firebase.Config{ProjectID: "<TARGET_PROJECT_ID>"} // Initialize with the default credential, i.e. the sender project's service // account key, stored in GOOGLE_APPLICATION_CREDENTIALS app, err := firebase.NewApp(context.Background(), config) if err != nil { log.Fatalf("error initializing app: %v\n", err) }C#
FirebaseApp.Create(new AppOptions() { // The credential is configured to be the sender project's service // account key via the environment variable GOOGLE_APPLICATION_CREDENTIALS Credential = GoogleCredential.GetApplicationDefault(), ProjectId = "<TARGET_PROJECT_ID>", });
Belirli cihazlara mesaj gönderme
Tek bir cihaza göndermek için Firebase kurulum kimliğini (FID) veya kayıt jetonunu hedefleyebilirsiniz.
Node.js
FID kullanma (önerilir):
// This installation ID comes from the client FCM SDKs.
const fid = 'YOUR_REGISTERED_FID';
const message = {
data: {
score: '850',
time: '2:45'
},
fid: fid
};
// Send a message to the device corresponding to the provided FID.
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);
});
Kayıt jetonunu kullanma (desteği sonlandırıldı):
// This registration token comes from the client FCM SDKs.
const registrationToken = 'YOUR_REGISTRATION_TOKEN';
const message = {
data: {
score: '850',
time: '2:45'
},
token: registrationToken
};
// Send a message to the device corresponding to the provided
// registration token.
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
FID kullanma (önerilir):
// This installation ID comes from the client FCM SDKs.
String fid = "YOUR_REGISTERED_FID";
// See documentation on defining a message payload.
Message message = Message.builder()
.putData("score", "850")
.putData("time", "2:45")
.setFid(fid)
.build();
// Send a message to the device corresponding to the provided FID.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
Kayıt jetonunu kullanma (desteği sonlandırıldı):
// This registration token comes from the client FCM SDKs.
String registrationToken = "YOUR_REGISTRATION_TOKEN";
// See documentation on defining a message payload.
Message message = Message.builder()
.putData("score", "850")
.putData("time", "2:45")
.setToken(registrationToken)
.build();
// Send a message to the device corresponding to the provided
// registration token.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
Python
FID kullanma (önerilir):
# This installation ID comes from the client FCM SDKs.
fid = 'YOUR_REGISTERED_FID'
# See documentation on defining a message payload.
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
fid=fid,
)
# Send a message to the device corresponding to the provided FID.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
Kayıt jetonunu kullanma (desteği sonlandırıldı):
# This registration token comes from the client FCM SDKs.
registration_token = 'YOUR_REGISTRATION_TOKEN'
# See documentation on defining a message payload.
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
token=registration_token,
)
# Send a message to the device corresponding to the provided
# registration token.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
Go
FID kullanma (önerilir):
// Obtain a messaging.Client from the App.
ctx := context.Background()
client, err := app.Messaging(ctx)
if err != nil {
log.Fatalf("error getting Messaging client: %v\n", err)
}
// This installation ID comes from the client FCM SDKs.
fid := "YOUR_REGISTERED_FID"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Fid: fid,
}
// Send a message to the device corresponding to the provided FID.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)
Kayıt jetonunu kullanma (desteği sonlandırıldı):
// Obtain a messaging.Client from the App.
ctx := context.Background()
client, err := app.Messaging(ctx)
if err != nil {
log.Fatalf("error getting Messaging client: %v\n", err)
}
// This registration token comes from the client FCM SDKs.
registrationToken := "YOUR_REGISTRATION_TOKEN"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Token: registrationToken,
}
// Send a message to the device corresponding to the provided
// registration token.
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#
FID kullanma (önerilir):
// This installation ID comes from the client FCM SDKs.
var fid = "YOUR_REGISTERED_FID";
var message = new Message()
{
Data = new Dictionary<string, string>()
{
{ "score", "850" },
{ "time", "2:45" },
},
Fid = fid,
};
// Send a message to the device corresponding to the provided FID.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
Kayıt jetonunu kullanma (desteği sonlandırıldı):
// This registration token comes from the client FCM SDKs.
var registrationToken = "YOUR_REGISTRATION_TOKEN";
// See documentation on defining a message payload.
var message = new Message()
{
Data = new Dictionary<string, string>()
{
{ "score", "850" },
{ "time", "2:45" },
},
#pragma warning disable CS0618
Token = registrationToken,
#pragma warning restore CS0618
};
// Send a message to the device corresponding to the provided
// registration token.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
Her gönderme yöntemi, başarılı olduğunda ileti kimliği döndürür. Firebase Admin SDK, kimlik dizesini projects/{project_id}/messages/{message_id} biçiminde döndürür.
Birden fazla cihaza tek mesaj gönderme
Yönetici FCM SDK'ları, bir mesajı Firebase kurulum kimlikleri (FIDs) veya cihaz kayıt jetonları listesine çoklu yayınlamanıza olanak tanır. Aynı mesajı çok sayıda cihaza göndermeniz gerektiğinde bu özelliği kullanabilirsiniz. Her çağırma için en fazla 500 FID ve/veya jeton belirtebilirsiniz.
Dönüş değeri, giriş hedeflerinin, FIDs'lerin ve/veya jetonların sırasına karşılık gelen bir yanıt listesi içerir. Bu, hangi hedeflerin hatalara neden olduğunu kontrol etmek istediğinizde kullanışlıdır. Hem jetonlar hem de FID'ler sağlanırsa önce jetonlar, ardından FID'ler işlenir.
Node.js
FID'leri kullanma (önerilir):
// These Firebase Installation IDs (FIDs) come from the client FCM SDKs.
const fids = [
'YOUR_REGISTERED_FID_1',
// ...
'YOUR_REGISTERED_FID_N'
];
const message = {
data: {score: '850', time: '2:45'},
fids: fids,
};
getMessaging().sendEachForMulticast(message)
.then((response) => {
console.log(response.successCount + ' messages were sent successfully');
if (response.failureCount > 0) {
const failedFids = [];
response.responses.forEach((resp, idx) => {
if (!resp.success) {
failedFids.push(fids[idx]);
}
});
console.log('List of FIDs that caused failures: ' + failedFids);
}
});
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
'YOUR_REGISTRATION_TOKEN_1',
// …
'YOUR_REGISTRATION_TOKEN_N',
];
const message = {
data: {score: '850', time: '2:45'},
tokens: registrationTokens,
};
getMessaging().sendEachForMulticast(message)
.then((response) => {
if (response.failureCount > 0) {
const failedTokens = [];
response.responses.forEach((resp, idx) => {
if (!resp.success) {
failedTokens.push(registrationTokens[idx]);
}
});
console.log('List of tokens that caused failures: ' + failedTokens);
}
});
Java
FID'leri kullanma (önerilir):
// These Firebase Installation IDs (FIDs) come from the client FCM SDKs.
List<String> fids = Arrays.asList(
"YOUR_REGISTERED_FID_1",
// ...
"YOUR_REGISTERED_FID_N"
);
MulticastMessage message = MulticastMessage.builder()
.putData("score", "850")
.putData("time", "2:45")
.addAllFids(fids)
.build();
BatchResponse response = FirebaseMessaging.getInstance().sendEachForMulticast(message);
if (response.getFailureCount() > 0) {
List<SendResponse> responses = response.getResponses();
List<String> failedFids = new ArrayList<>();
for (int i = 0; i < responses.size(); i++) {
if (!responses.get(i).isSuccessful()) {
// The order of responses corresponds to the order of the destination FIDs.
failedFids.add(fids.get(i));
}
}
System.out.println("List of FIDs that caused failures: " + failedFids);
}
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
"YOUR_REGISTRATION_TOKEN_1",
// ...
"YOUR_REGISTRATION_TOKEN_n"
);
MulticastMessage message = MulticastMessage.builder()
.putData("score", "850")
.putData("time", "2:45")
.addAllTokens(registrationTokens)
.build();
BatchResponse response = FirebaseMessaging.getInstance().sendEachForMulticast(message);
if (response.getFailureCount() > 0) {
List<SendResponse> responses = response.getResponses();
List<String> failedTokens = new ArrayList<>();
for (int i = 0; i < responses.size(); i++) {
if (!responses.get(i).isSuccessful()) {
// The order of responses corresponds to the order of the registration tokens.
failedTokens.add(registrationTokens.get(i));
}
}
System.out.println("List of tokens that caused failures: " + failedTokens);
}
Python
FID'leri kullanma (önerilir):
# These Firebase Installation IDs (FIDs) come from the client FCM SDKs.
fids = [
'YOUR_REGISTERED_FID_1',
# ...
'YOUR_REGISTERED_FID_N',
]
message = messaging.MulticastMessage(
data={'score': '850', 'time': '2:45'},
fids=fids,
)
response = messaging.send_each_for_multicast(message)
if response.failure_count > 0:
responses = response.responses
failed_fids = []
for idx, resp in enumerate(responses):
if not resp.success:
# The order of responses corresponds to the order of the destination FIDs.
failed_fids.append(fids[idx])
print('List of FIDs that caused failures: {0}'.format(failed_fids))
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
# These registration tokens come from the client FCM SDKs.
registration_tokens = [
'YOUR_REGISTRATION_TOKEN_1',
# ...
'YOUR_REGISTRATION_TOKEN_N',
]
message = messaging.MulticastMessage(
data={'score': '850', 'time': '2:45'},
tokens=registration_tokens,
)
response = messaging.send_each_for_multicast(message)
if response.failure_count > 0:
responses = response.responses
failed_tokens = []
for idx, resp in enumerate(responses):
if not resp.success:
# The order of responses corresponds to the order of the registration tokens.
failed_tokens.append(registration_tokens[idx])
print(f'List of tokens that caused failures: {failed_tokens}')
Go
FID'leri kullanma (önerilir):
// Create a list containing up to 500 Firebase Installation IDs (FIDs).
// These Firebase Installation IDs (FIDs) come from the client FCM SDKs.
fids := []string{
"YOUR_REGISTERED_FID_1",
// ...
"YOUR_REGISTERED_FID_N",
}
message := &messaging.MulticastMessage{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Fids: fids,
}
br, err := client.SendEachForMulticast(ctx, message)
if err != nil {
log.Fatalln(err)
}
if br.FailureCount > 0 {
var failedFids []string
for idx, resp := range br.Responses {
if !resp.Success {
// The order of responses corresponds to the order of the destination FIDs.
failedFids = append(failedFids, fids[idx])
}
}
fmt.Printf("List of FIDs that caused failures: %v\n", failedFids)
}
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// Create a list containing up to 500 registration tokens.
// This registration tokens come from the client FCM SDKs.
registrationTokens := []string{
"YOUR_REGISTRATION_TOKEN_1",
// ...
"YOUR_REGISTRATION_TOKEN_n",
}
message := &messaging.MulticastMessage{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Tokens: registrationTokens,
}
br, err := client.SendEachForMulticast(context.Background(), message)
if err != nil {
log.Fatalln(err)
}
if br.FailureCount > 0 {
var failedTokens []string
for idx, resp := range br.Responses {
if !resp.Success {
// The order of responses corresponds to the order of the registration tokens.
failedTokens = append(failedTokens, registrationTokens[idx])
}
}
fmt.Printf("List of tokens that caused failures: %v\n", failedTokens)
}
C#
FID'leri kullanma (önerilir):
// These Firebase Installation IDs (FIDs) come from the client FCM SDKs.
var fids = new List<string>()
{
"YOUR_REGISTERED_FID_1",
// ...
"YOUR_REGISTERED_FID_N",
};
var message = new MulticastMessage()
{
Data = new Dictionary<string, string>()
{
{ "score", "850" },
{ "time", "2:45" },
},
Fids = fids,
};
var response = await FirebaseMessaging.DefaultInstance.SendEachForMulticastAsync(message);
if (response.FailureCount > 0)
{
var failedFids = new List<string>();
for (var i = 0; i < response.Responses.Count; i++)
{
if (!response.Responses[i].IsSuccess)
{
// The order of responses corresponds to the order of the destination FIDs.
failedFids.add(fids[i]);
}
}
Console.WriteLine($"List of FIDs that caused failures: {string.Join(", ", failedFids)}");
}
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
"YOUR_REGISTRATION_TOKEN_1",
// ...
"YOUR_REGISTRATION_TOKEN_n",
};
var message = new MulticastMessage()
{
#pragma warning disable CS0618
Tokens = registrationTokens,
#pragma warning restore CS0618
Data = new Dictionary<string, string>()
{
{ "score", "850" },
{ "time", "2:45" },
},
};
var response = await FirebaseMessaging.DefaultInstance.SendEachForMulticastAsync(message);
if (response.FailureCount > 0)
{
var failedTokens = new List<string>();
for (var i = 0; i < response.Responses.Count; i++)
{
if (!response.Responses[i].IsSuccess)
{
// The order of responses corresponds to the order of the registration tokens.
failedTokens.Add(registrationTokens[i]);
}
}
Console.WriteLine($"List of tokens that caused failures: {failedTokens}");
}
İleti listesi gönderme
Yönetici SDK'ları, en fazla 500 iletinin listesini göndermeyi destekler. Bu özellik, özelleştirilmiş bir mesaj grubu oluşturmak ve bunları konular, Firebase kurulum kimlikleri (FID'ler) veya cihaz kayıt jetonları dahil olmak üzere farklı alıcılara göndermek için kullanılabilir. Örneğin, farklı kitlelere farklı mesajlar göndermeniz gerektiğinde bu özelliği kullanabilirsiniz.
Node.js
Karma hedefler kullanma (önerilir):
// Create a list containing up to 500 messages.
const messages = [
{
notification: { title: 'Price drop', body: '5% off all electronics' },
fid: 'YOUR_REGISTERED_FID', // Using FID (Recommended)
},
{
notification: { title: 'Price drop', body: '2% off all books' },
token: 'YOUR_REGISTRATION_TOKEN', // Using token (Deprecated)
},
{
notification: { title: 'Price drop', body: '10% off all shoes' },
topic: 'readers-club',
}
];
getMessaging().sendEach(messages)
.then((response) => {
console.log(response.successCount + ' messages were sent successfully');
});
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// Create a list containing up to 500 messages.
const messages = [];
messages.push({
notification: { title: 'Price drop', body: '5% off all electronics' },
token: registrationToken,
});
messages.push({
notification: { title: 'Price drop', body: '2% off all books' },
topic: 'readers-club',
});
getMessaging().sendEach(messages)
.then((response) => {
console.log(response.successCount + ' messages were sent successfully');
});
Java
Karma hedefler kullanma (önerilir):
// Create a list containing up to 500 messages.
List<Message> messages = new ArrayList<>();
messages.add(Message.builder()
.setNotification(Notification.builder()
.setTitle("Price drop")
.setBody("5% off all electronics")
.build())
.setFid("YOUR_REGISTERED_FID") // Using FID (Recommended)
.build());
messages.add(Message.builder()
.setNotification(Notification.builder()
.setTitle("Price drop")
.setBody("2% off all books")
.build())
.setToken("YOUR_REGISTRATION_TOKEN") // Using token (Deprecated)
.build());
messages.add(Message.builder()
.setNotification(Notification.builder()
.setTitle("Price drop")
.setBody("10% off all shoes")
.build())
.setTopic("readers-club")
.build());
BatchResponse response = FirebaseMessaging.getInstance().sendEach(messages);
// See the BatchResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " messages were sent successfully");
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// Create a list containing up to 500 messages.
List<Message> messages = Arrays.asList(
Message.builder()
.setNotification(Notification.builder()
.setTitle("Price drop")
.setBody("5% off all electronics")
.build())
.setToken(registrationToken)
.build(),
// ...
Message.builder()
.setNotification(Notification.builder()
.setTitle("Price drop")
.setBody("2% off all books")
.build())
.setTopic("readers-club")
.build()
);
BatchResponse response = FirebaseMessaging.getInstance().sendEach(messages);
// See the BatchResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " messages were sent successfully");
Python
Karma hedefler kullanma (önerilir):
# Create a list containing up to 500 messages.
messages = [
messaging.Message(
notification=messaging.Notification('Price drop', '5% off all electronics'),
fid='YOUR_REGISTERED_FID', # Using FID (Recommended)
),
messaging.Message(
notification=messaging.Notification('Price drop', '2% off all books'),
token='YOUR_REGISTRATION_TOKEN', # Using token (Deprecated)
),
messaging.Message(
notification=messaging.Notification('Price drop', '10% off all shoes'),
topic='readers-club',
),
]
response = messaging.send_each(messages)
# See the BatchResponse reference documentation
# for the contents of response.
print('{0} messages were sent successfully'.format(response.success_count))
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
# Create a list containing up to 500 messages.
messages = [
messaging.Message(
notification=messaging.Notification('Price drop', '5% off all electronics'),
token=registration_token,
),
# ...
messaging.Message(
notification=messaging.Notification('Price drop', '2% off all books'),
topic='readers-club',
),
]
response = messaging.send_each(messages)
# See the BatchResponse reference documentation
# for the contents of response.
print(f'{response.success_count} messages were sent successfully')
Go
Karma hedefler kullanma (önerilir):
// Create a list containing up to 500 messages.
messages := []*messaging.Message{
{
Notification: &messaging.Notification{
Title: "Price drop",
Body: "5% off all electronics",
},
Fid: "YOUR_REGISTERED_FID", // Using FID (Recommended)
},
{
Notification: &messaging.Notification{
Title: "Price drop",
Body: "2% off all books",
},
Token: "YOUR_REGISTRATION_TOKEN", // Using token (Deprecated)
},
{
Notification: &messaging.Notification{
Title: "Price drop",
Body: "10% off all shoes",
},
Topic: "readers-club",
},
}
br, err := client.SendEach(ctx, messages)
if err != nil {
log.Fatalln(err)
}
// See the BatchResponse reference documentation
// for the contents of response.
fmt.Printf("%d messages were sent successfully\n", br.SuccessCount)
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// Create a list containing up to 500 messages.
messages := []*messaging.Message{
{
Notification: &messaging.Notification{
Title: "Price drop",
Body: "5% off all electronics",
},
Token: registrationToken,
},
{
Notification: &messaging.Notification{
Title: "Price drop",
Body: "2% off all books",
},
Topic: "readers-club",
},
}
br, err := client.SendEach(context.Background(), messages)
if err != nil {
log.Fatalln(err)
}
// See the BatchResponse reference documentation
// for the contents of response.
fmt.Printf("%d messages were sent successfully\n", br.SuccessCount)
C#
Karma hedefler kullanma (önerilir):
// Create a list containing up to 500 messages.
var messages = new List<Message>()
{
new Message()
{
Notification = new Notification()
{
Title = "Price drop",
Body = "5% off all electronics",
},
Fid = "YOUR_REGISTERED_FID", // Using FID (Recommended)
},
new Message()
{
Notification = new Notification()
{
Title = "Price drop",
Body = "2% off all books",
},
Token = "YOUR_REGISTRATION_TOKEN", // Using token (Deprecated)
},
new Message()
{
Notification = new Notification()
{
Title = "Price drop",
Body = "10% off all shoes",
},
Topic = "readers-club",
},
};
var response = await FirebaseMessaging.DefaultInstance.SendEachAsync(messages);
// See the BatchResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} messages were sent successfully");
Kayıt jetonlarını kullanma (desteği sonlandırıldı):
// Create a list containing up to 500 messages.
var messages = new List<Message>()
{
new Message()
{
Notification = new Notification()
{
Title = "Price drop",
Body = "5% off all electronics",
},
#pragma warning disable CS0618
Token = registrationToken,
#pragma warning restore CS0618
},
new Message()
{
Notification = new Notification()
{
Title = "Price drop",
Body = "2% off all books",
},
Topic = "readers-club",
},
};
var response = await FirebaseMessaging.DefaultInstance.SendEachAsync(messages);
// See the BatchResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} messages were sent successfully");