اگر قبلاً Firebase Admin SDK تنظیم نکردهاید، برای تنظیم Firebase Admin SDK روی سرور خود، این راهنما را دنبال کنید.
فعال کردن FCM HTTP v1 API
API پیامرسانی ابری را در صفحه تنظیمات پیامرسانی ابری برای پروژه خود فعال کنید.
تأیید اعتبار یک حساب سرویس از یک پروژه دیگر
شما میتوانید برای یک پروژه، «پروژه هدف»، پیام ارسال کنید، در حالی که از یک حساب سرویس در پروژه دیگری، «پروژه فرستنده»، استفاده میکنید. این به شما امکان میدهد مدیریت حساب سرویس را در یک پروژه متمرکز کنید و در عین حال از طرف دیگران پیام ارسال کنید. برای یادگیری نحوه انجام این کار، از مراحل زیر استفاده کنید:
- مطمئن شوید که API پیامرسان ابری فایربیس در پروژه فرستنده فعال شده است.
- یک حساب کاربری سرویس در پروژه فرستنده ایجاد کنید.
- در پروژه هدف، در صفحه IAM به آدرس ایمیل حساب سرویس، نقش مدیر Firebase Cloud Messaging API را اعطا کنید. این کار به حساب سرویس پروژه دیگر اجازه میدهد تا به پروژه هدف پیام ارسال کند.
- SDK خود را با فایل کلید حساب سرویس پروژه فرستنده و شناسه پروژه پروژه هدف، مقداردهی اولیه کنید.
نود جی اس
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>',
});
جاوا
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);
پایتون
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)
برو
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)
}
سی شارپ
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>",
});
ارسال پیام به دستگاههای خاص
برای ارسال به یک دستگاه خاص، توکن ثبت نام دستگاه را همانطور که نشان داده شده است، ارسال کنید.
نود جی اس
// 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);
});
جاوا
// 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);
پایتون
# 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)
برو
// 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)
سی شارپ
// 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" },
},
Token = registrationToken,
};
// 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);
در صورت موفقیت، هر متد ارسال، یک شناسه پیام را برمیگرداند. Firebase Admin SDK رشته شناسه را با فرمت projects/{project_id}/messages/{message_id} برمیگرداند.
ارسال یک پیام به چندین دستگاه
SDK های مدیریت FCM به شما امکان میدهند یک پیام را به لیستی از توکنهای ثبت دستگاه، به صورت چندپخشی (multicast) ارسال کنید. میتوانید از این ویژگی زمانی استفاده کنید که نیاز به ارسال یک پیام مشابه به تعداد زیادی دستگاه دارید. میتوانید در هر فراخوانی تا ۵۰۰ توکن ثبت دستگاه را مشخص کنید.
مقدار برگشتی شامل فهرستی از توکنها است که با ترتیب توکنهای ورودی مطابقت دارند. این زمانی مفید است که میخواهید بررسی کنید کدام توکنها منجر به خطا شدهاند و سپس آنها را به طور مناسب مدیریت کنید .
نود جی اس
// 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);
}
});
جاوا
// 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);
}
پایتون
# 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}')
برو
// 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)
}
سی شارپ
// 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()
{
Tokens = registrationTokens,
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}");
}
ارسال لیست پیامها
کیتهای توسعه نرمافزار ادمین از ارسال فهرستی تا سقف ۵۰۰ پیام پشتیبانی میکنند. از این ویژگی میتوان برای ساخت مجموعهای سفارشی از پیامها و ارسال آنها به گیرندگان مختلف، شامل موضوعات یا توکنهای ثبت دستگاه خاص، استفاده کرد. به عنوان مثال، میتوانید از این ویژگی زمانی استفاده کنید که نیاز به ارسال پیامهای کمی متفاوت به مخاطبان مختلف دارید.
نود جی اس
// 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');
});
جاوا
// 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");
پایتون
# 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')
برو
// 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)
سی شارپ
// 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",
},
Token = registrationToken,
},
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");