Uygulama sunucusu oluşturma istekleri gönderme

Firebase Admin SDK veya FCM uygulama sunucusu protokollerini kullanarak mesaj istekleri oluşturabilir ve bunları şu tür hedeflere gönderebilirsiniz:

  • Konu adı
  • Şart
  • Cihaz kayıt jetonu
  • Cihaz grubu adı (yalnızca Node.js için eski protokoller ve Firebase Admin SDK)

Önceden tanımlanmış alanlardan oluşan bir bildirim yükü, kendi kullanıcı tanımlı alanlarınızın veri yükü veya her iki veri yükü türünü içeren bir mesaj gönderebilirsiniz. Bkz İleti türlerini daha fazla bilgi için.

(Desteği vardır Firebase Admin SDK kullanılarak bildirim mesajları göndermek için nasıl Bu sayfayı gösterisinde örnekleri Düğüm , Java , Python , C # ve Go ) ve v1 HTTP protokolünü . Aracılığıyla mesaj göndermek için rehberlik de bulunmaktadır eski HTTP ve XMPP protokolleri .

Belirli cihazlara mesaj gönderin

Tek bir belirli cihaza göndermek için cihazın kayıt jetonunu gösterildiği gibi iletin. Kayıt belirteçleri hakkında daha fazla bilgi edinmek için platformunuzun istemci kurulum bilgilerine bakın.

Node.js

// 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.
admin.messaging().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

// 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);

piton

# 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)

Gitmek

// 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#

// 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);

DİNLENMEK

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":{
      "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
      "notification":{
        "body":"This is an FCM notification message!",
        "title":"FCM Message"
      }
   }
}

cURL komutu:

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
   "notification":{
     "title":"FCM Message",
     "body":"This is an FCM Message"
   },
   "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

Başarılı olduğunda, her gönderme yöntemi bir mesaj kimliği döndürür. Firebase Yönetici SDK biçimi ID dize döndürür projects/{project_id}/messages/{message_id} . HTTP protokolü yanıtı, tek bir JSON anahtarıdır:

    {
      "name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
    }

Birden fazla cihaza mesaj gönderin

REST API ve Admin FCM API'leri, bir mesajı cihaz kayıt belirteçleri listesine çoklu yayın yapmanıza olanak tanır. Çağrı başına en fazla 500 cihaz kayıt belirteci belirtebilirsiniz.

Node.js

// Create a list containing up to 500 registration tokens.
// 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,
};

admin.messaging().sendMulticast(message)
  .then((response) => {
    console.log(response.successCount + ' messages were sent successfully');
  });

Java

// Create a list containing up to 500 registration tokens.
// 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().sendMulticast(message);
// See the BatchResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " messages were sent successfully");

piton

# Create a list containing up to 500 registration tokens.
# 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_multicast(message)
# See the BatchResponse reference documentation
# for the contents of response.
print('{0} messages were sent successfully'.format(response.success_count))

Gitmek

// Create a list containing up to 100 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.SendMulticast(context.Background(), message)
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#

// Create a list containing up to 500 registration tokens.
// 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.SendMulticastAsync(message);
// See the BatchResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} messages were sent successfully");

DİNLENMEK

Bir HTTP toplu isteği oluşturun:

--subrequest_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

POST /v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
accept: application/json

{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"FCM Message",
       "body":"This is an FCM notification message!"
     }
  }
}

...

--subrequest_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

POST /v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
accept: application/json

{
  "message":{
     "token":"cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
     "notification":{
       "title":"FCM Message",
       "body":"This is an FCM notification message!"
     }
  }
}
--subrequest_boundary--

İsteği bir dosyaya kaydedin (bu örnekte batch_request.txt). Ardından cURL komutunu kullanın:

curl --data-binary @batch_request.txt -H 'Content-Type: multipart/mixed; boundary="subrequest_boundary"' https://fcm.googleapis.com/batch

Firebase Yönetici SDK'larından, bu işlem kullanan sendAll() örneklerde gösterildiği gibi, başlık altında API. Dönüş değeri olan BatchResponse olan tepkileri giriş belirteçleri sırasına karşılık gelir listelenmektedir. Bu, hangi belirteçlerin hatalara yol açtığını kontrol etmek istediğinizde kullanışlıdır.

Node.js

// 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,
};

admin.messaging().sendMulticast(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

// 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().sendMulticast(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);
}

piton

# 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_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('List of tokens that caused failures: {0}'.format(failed_tokens))

Gitmek

// Create a list containing up to 100 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.SendMulticast(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#

// 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.SendMulticastAsync(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}");
}

DİNLENMEK

Her gönderme alt gönderme bir yanıt döndürür. Yanıtlar ile başlayan bir tepki sınır dize ile ayrılır --batch_ .

--batch_nDhMX4IzFTDLsCJ3kHH7v_44ua-aJT6q
Content-Type: application/http
Content-ID: response-

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  "name": "projects/35006771263/messages/0:1570471792141125%43c11b7043c11b70"
}

...

--batch_nDhMX4IzFTDLsCJ3kHH7v_44ua-aJT6q
Content-Type: application/http
Content-ID: response-

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  "name": "projects/35006771263/messages/0:1570471792141696%43c11b7043c11b70"
}

--batch_nDhMX4IzFTDLsCJ3kHH7v_44ua-aJT6q--

Konulara mesaj gönder

Eğer, her iki istemci tarafında veya üzeri konuya istemci uygulaması örneklerini abone olarak bir konuyu oluşturduktan sonra sunucu API , sen konusuna mesajlar gönderebilir. Bu FCM gönderme isteklerini inşaatındaki ilk kez, hiç kılavuzuna bakın sunucu ortamı ve FCM önemli arka plan ve kurulum bilgileri için.

Arka uçtaki gönderme mantığınızda, gösterildiği gibi istediğiniz konu adını belirtin:

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.
admin.messaging().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);

piton

# 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)

Gitmek

// 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);

DİNLENMEK

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"
      }
   }
}

cURL komutu:

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

Konuların bir birleşimi bir mesaj göndermek için, hedef konularını belirten bir boolean ifadedir bir koşul belirtin. Örneğin, aşağıdaki koşul abone olan cihazlara mesaj gönderecek TopicA ve ya TopicB veya TopicC :

"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"

FCM önce parantez içindeki koşulları değerlendirir ve ardından ifadeyi soldan sağa doğru değerlendirir. Yukarıdaki ifadede herhangi bir konuya abone olan bir kullanıcı mesajı almaz. Aynı şekilde, abone olmayan bir kullanıcı TopicA mesajı almaz. Bu kombinasyonlar bunu alır:

  • TopicA ve TopicB
  • TopicA ve TopicC

Koşullu ifadenize en fazla beş konu ekleyebilirsiniz.

Bir koşula göndermek için:

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.
admin.messaging().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);

piton

# 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)

Gitmek

// 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);

DİNLENMEK

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",
    }
  }
}

cURL komutu:

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

Toplu mesaj gönder

REST API ve Yönetici SDK'ları, toplu olarak mesaj göndermeyi destekler. 500'e kadar mesajı tek bir toplu iş halinde gruplayabilir ve her mesaj için ayrı HTTP istekleri göndermeye göre önemli performans iyileştirmesiyle hepsini tek bir API çağrısında gönderebilirsiniz.

Bu özellik, özelleştirilmiş bir mesaj seti oluşturmak ve bunları konular veya belirli cihaz kayıt belirteçleri dahil olmak üzere farklı alıcılara göndermek için kullanılabilir. Örneğin, mesaj gövdesinde biraz farklı ayrıntılarla farklı hedef kitlelere aynı anda mesajlar göndermeniz gerektiğinde bu özelliği kullanın.

Node.js

// 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',
});

admin.messaging().sendAll(messages)
  .then((response) => {
    console.log(response.successCount + ' messages were sent successfully');
  });

Java

// 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().sendAll(messages);
// See the BatchResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " messages were sent successfully");

piton

# 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_all(messages)
# See the BatchResponse reference documentation
# for the contents of response.
print('{0} messages were sent successfully'.format(response.success_count))

Gitmek

// Create a list containing up to 100 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.SendAll(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#

// 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.SendAllAsync(messages);
// See the BatchResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} messages were sent successfully");

DİNLENMEK

Alt isteklerin listesini birleştirerek bir HTTP toplu isteği oluşturun:

--subrequest_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

POST /v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
accept: application/json

{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"FCM Message",
       "body":"This is an FCM notification message to device 0!"
     }
  }
}

--subrequest_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

POST /v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
accept: application/json

{
  "message":{
     "topic":"readers-club",
     "notification":{
       "title":"Price drop",
       "body":"2% off all books"
     }
  }
}

...

--subrequest_boundary
Content-Type: application/http
Content-Transfer-Encoding: binary
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

POST /v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
accept: application/json

{
  "message":{
     "token":"cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
     "notification":{
       "title":"FCM Message",
       "body":"This is an FCM notification message to device N!"
     }
  }
}
--subrequest_boundary--

Döndünüz sorgulayabilir BatchResponse başarıyla FCM devredilmiştir nasıl mesajların birçok kontrol etmek. Ayrıca, bireysel mesajların durumunu kontrol etmek için kullanılabilecek bir yanıt listesi sunar. Yanıtların sırası, giriş listesindeki mesajların sırasına karşılık gelir.

Doğrudan önyükleme özellikli iletiler gönderin (yalnızca Android)

HTTP v1 veya eski HTTP API'lerini kullanarak doğrudan önyükleme modunda aygıtlara mesaj gönderebilirsiniz. Direkt önyükleme modunda cihazlara göndermeden önce, emin olun size istemci aygıtları etkinleştirmek için gerekli adımları tamamladıktan doğrudan önyükleme modunda FCM mesajları almak .

FCM v1 HTTP API'sini kullanarak gönderin

Mesajı isteği anahtar içermelidir "direct_boot_ok" : true in AndroidConfig istek gövdesinin seçenekleri. Örneğin:

https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
  "Message":{
    "token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
    "data": {
      "score": "5x1",
      "time": "15:10"
    },
    "android": {
      "direct_boot_ok": true,
    },
}

FCM eski HTTP API'sini kullanarak gönder

Mesajı isteği anahtarı içermelidir "direct_boot_ok" : true istek gövdesinin üst düzeyinde. Örneğin:

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{ "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
  "direct_boot_ok" : true
}

İstek gövdesinde bu anahtarla gönderilen mesajlar, şu anda doğrudan önyükleme modunda (ve bu modda değilken) aygıtlardaki uygulamalar tarafından işlenebilir.

Mesajları platformlar arasında özelleştirin

Firebase Yönetici SDK ve FCM v1 HTTP protokolü hem mesajınız istekleri mevcut tüm alanları belirlemesine izin message nesnesi. Bu içerir:

  • alanların ortak bir dizi iletisi tüm uygulama örnekleri tarafından yorumlanmalıdır.
  • gibi alanlarda, platforma özel setleri AndroidConfig ve WebpushConfig , belirtilen platformda çalışan uygulamaya örnekleri sadece yorumlanır.

Platforma özel bloklar, alındığında doğru şekilde işlenmelerini sağlamak için mesajları farklı platformlar için özelleştirme esnekliği sağlar. FCM arka ucu, belirtilen tüm parametreleri dikkate alacak ve mesajı her platform için özelleştirecektir.

Ortak alanlar ne zaman kullanılır?

Aşağıdaki durumlarda ortak alanları kullanın:

  • Tüm platformlarda uygulama örneklerini Hedefleme - iOS, Android ve web
  • Konulara mesaj gönderme

Platformdan bağımsız olarak tüm uygulama örnekleri aşağıdaki ortak alanları yorumlayabilir:

Platforma özel alanlar ne zaman kullanılır?

Aşağıdakileri yapmak istediğinizde platforma özel alanları kullanın:

  • Alanları yalnızca belirli platformlara gönder
  • Ortak alanın yanı sıra platforma özgü alanlarını Gönder

Ne zaman ortak alanları kullanmayın, sadece belirli platformlara değerleri göndermek istiyorum; platforma özel alanları kullanın. Örneğin, yalnızca iOS ve web'e bildirim göndermek, ancak Android'e göndermemek için, biri iOS için diğeri web için olmak üzere iki ayrı alan grubu kullanmanız gerekir.

Belirli ile mesaj göndermek zaman teslimat seçenekleri , kullanım platforma özel alanlar bunları ayarlamak için. İsterseniz platform başına farklı değerler belirleyebilirsiniz. Ancak, platformlar arasında temelde aynı değeri ayarlamak istediğinizde bile, platforma özel alanlar kullanmanız gerekir. Her platformu biraz farklı örneğin, süre-canlı saniyede bir son kullanma süresi olarak Android'de ayarlanır değeri yorumlayabilir çünkü iOS'ta bir son kullanma tarihi olarak belirlenir iken, buna bağlıdır.

Örnek: renk ve simge seçenekleriyle bildirim mesajı

Bu örnek gönderme isteği, tüm platformlara ortak bir bildirim başlığı ve içeriği gönderir, ancak aynı zamanda Android cihazlara platforma özel bazı geçersiz kılmalar gönderir.

Android için istek, Android cihazlarda görüntülenecek özel bir simge ve renk ayarlar. Referans belirtildiği gibi AndroidNotification , renk #kkyymm biçimde belirtilir ve görüntü Android uygulamasına yerel bir çekilebilir simge kaynak olmalıdır.

Bir kullanıcının cihazındaki görsel efektin bir tahmini:

Biri özel bir simge ve renk gösteren iki cihazın basit çizimi

Node.js

const topicName = 'industry-tech';

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.'
  },
  android: {
    notification: {
      icon: 'stock_ticker_update',
      color: '#7e55c3'
    }
  },
  topic: topicName,
};

admin.messaging().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

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())
    .setAndroidConfig(AndroidConfig.builder()
        .setTtl(3600 * 1000)
        .setNotification(AndroidNotification.builder()
            .setIcon("stock_ticker_update")
            .setColor("#f45342")
            .build())
        .build())
    .setApnsConfig(ApnsConfig.builder()
        .setAps(Aps.builder()
            .setBadge(42)
            .build())
        .build())
    .setTopic("industry-tech")
    .build();

piton

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.',
    ),
    android=messaging.AndroidConfig(
        ttl=datetime.timedelta(seconds=3600),
        priority='normal',
        notification=messaging.AndroidNotification(
            icon='stock_ticker_update',
            color='#f45342'
        ),
    ),
    apns=messaging.APNSConfig(
        payload=messaging.APNSPayload(
            aps=messaging.Aps(badge=42),
        ),
    ),
    topic='industry-tech',
)

Gitmek

oneHour := time.Duration(1) * time.Hour
badge := 42
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.",
	},
	Android: &messaging.AndroidConfig{
		TTL: &oneHour,
		Notification: &messaging.AndroidNotification{
			Icon:  "stock_ticker_update",
			Color: "#f45342",
		},
	},
	APNS: &messaging.APNSConfig{
		Payload: &messaging.APNSPayload{
			Aps: &messaging.Aps{
				Badge: &badge,
			},
		},
	},
	Topic: "industry-tech",
}

C#

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.",
    },
    Android = new AndroidConfig()
    {
        TimeToLive = TimeSpan.FromHours(1),
        Notification = new AndroidNotification()
        {
            Icon = "stock_ticker_update",
            Color = "#f45342",
        },
    },
    Apns = new ApnsConfig()
    {
        Aps = new Aps()
        {
            Badge = 42,
        },
    },
    Topic = "industry-tech",
};

DİNLENMEK

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":"industry-tech",
     "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."
     },
     "android":{
       "notification":{
         "icon":"stock_ticker_update",
         "color":"#7e55c3"
       }
     }
   }
 }

Bkz HTTP v1 referans belgeleri ileti gövdesinde platforma özgü bloklar halinde mevcut tuşları tam ayrıntı için.

Örnek: özel resimli bildirim mesajı

Aşağıdaki örnek gönderme isteği, tüm platformlara ortak bir bildirim başlığı gönderir, ancak aynı zamanda bir görüntü de gönderir. Bir kullanıcının cihazındaki görsel efektin yaklaşık bir tahmini:

Bir ekran bildiriminde bir görüntünün basit çizimi

Node.js

const topicName = 'industry-tech';

const message = {
  notification: {
    title: 'Sparky says hello!'
  },
  android: {
    notification: {
      imageUrl: 'https://foo.bar.pizza-monster.png'
    }
  },
  apns: {
    payload: {
      aps: {
        'mutable-content': 1
      }
    },
    fcm_options: {
      image: 'https://foo.bar.pizza-monster.png'
    }
  },
  webpush: {
    headers: {
      image: 'https://foo.bar.pizza-monster.png'
    }
  },
  topic: topicName,
};

admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

DİNLENMEK

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":"industry-tech",
     "notification":{
       "title":"Sparky says hello!",
     },
     "android":{
       "notification":{
         "image":"https://foo.bar/pizza-monster.png"
       }
     },
     "apns":{
       "payload":{
         "aps":{
           "mutable-content":1
         }
       },
       "fcm_options": {
           "image":"https://foo.bar/pizza-monster.png"
       }
     },
     "webpush":{
       "headers":{
         "image":"https://foo.bar/pizza-monster.png"
       }
     }
   }
 }

Bkz HTTP v1 referans belgeleri ileti gövdesinde platforma özgü bloklar halinde mevcut tuşları tam ayrıntı için.

Örnek: ilişkili bir tıklama eylemi içeren bildirim mesajı

Aşağıdaki örnek gönderme isteği, tüm platformlara ortak bir bildirim başlığı gönderir, ancak kullanıcının bildirimle etkileşime girmesine yanıt olarak uygulamanın gerçekleştirmesi için bir eylem de gönderir. Bir kullanıcının cihazındaki görsel efektin bir tahmini:

Bir web sayfasını açan bir kullanıcı musluğunun basit çizimi

Node.js

const topicName = 'industry-tech';

const message = {
  notification: {
    title: 'Breaking News....'
  },
  android: {
    notification: {
      clickAction: 'news_intent'
    }
  },
  apns: {
    payload: {
      aps: {
        'category': 'INVITE_CATEGORY'
      }
    }
  },
  webpush: {
    fcmOptions: {
      link: 'breakingnews.html'
    }
  },
  topic: topicName,
};

admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

DİNLENMEK

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":"industry-tech",
     "notification":{
       "title":"Breaking News...",
     },
     "android":{
       "notification":{
         "click_action":"news_intent"
       }
     },
     "apns":{
       "payload":{
         "aps":{
           "category" : "INVITE_CATEGORY"
         }
       },
     },
     "webpush":{
       "fcm_options":{
         "link":"breakingnews.html"
       }
     }
   }
 }

Bkz HTTP v1 referans belgeleri ileti gövdesinde platforma özgü bloklar halinde mevcut tuşları tam ayrıntı için.

Örnek: yerelleştirme seçenekleriyle bildirim mesajı

Aşağıdaki örnek gönderme isteği, istemcinin yerelleştirilmiş mesajları görüntülemesi için yerelleştirme seçenekleri gönderir. Bir kullanıcının cihazındaki görsel efektin bir tahmini:

İngilizce ve İspanyolca metin görüntüleyen iki cihazın basit çizimi

Node.js

var topicName = 'industry-tech';

var message = {
  android: {
    ttl: 3600000,
    notification: {
      bodyLocKey: 'STOCK_NOTIFICATION_BODY',
      bodyLocArgs: ['FooCorp', '11.80', '835.67', '1.43']
    }
  },
  apns: {
    payload: {
      aps: {
        alert: {
          locKey: 'STOCK_NOTIFICATION_BODY',
          locArgs: ['FooCorp', '11.80', '835.67', '1.43']
        }
      }
    }
  },
  topic: topicName,
};

admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

DİNLENMEK

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":"Tech",
             "android":{
               "ttl":"3600s",
               "notification":{
                 "body_loc_key": "STOCK_NOTIFICATION_BODY",
                 "body_loc_args":  ["FooCorp", "11.80", "835.67", "1.43"],
               },
             },
             "apns":{
               "payload":{
                 "aps":{
                   "alert" : {
                     "loc-key": "STOCK_NOTIFICATION_BODY",
                     "loc-args":  ["FooCorp", "11.80", "835.67", "1.43"],
                    },
                 },
               },
             },
  },
}'

Bkz HTTP v1 referans belgeleri ileti gövdesinde platforma özgü bloklar halinde mevcut tuşları tam ayrıntı için.

Yönetici hata kodları

Aşağıdaki tablo, önerilen çözüm adımları dahil olmak üzere Firebase Admin FCM API hata kodlarını ve açıklamalarını listeler.

Hata kodu Açıklama ve Çözüm Adımları
messaging/invalid-argument Bir FCM yöntemine geçersiz bir bağımsız değişken sağlandı. Hata mesajı ek bilgiler içermelidir.
messaging/invalid-recipient Amaçlanan ileti alıcısı geçersiz. Hata mesajı ek bilgiler içermelidir.
messaging/invalid-payload Geçersiz bir mesaj yükü nesnesi sağlandı. Hata mesajı ek bilgiler içermelidir.
messaging/invalid-data-payload-key Veri mesajı yükü geçersiz bir anahtar içeriyor. Referans belgelerine bakın DataMessagePayload kısıtlı anahtarlar için.
messaging/payload-size-limit-exceeded Sağlanan mesaj yükü, FCM boyut sınırlarını aşıyor. Çoğu ileti için sınır 4096 bayttır. Konulara gönderilen mesajlar için sınır 2048 bayttır. Toplam yük boyutu hem anahtarları hem de değerleri içerir.
messaging/invalid-options Geçersiz bir mesaj seçenekleri nesnesi sağlandı. Hata mesajı ek bilgiler içermelidir.
messaging/invalid-registration-token Geçersiz kayıt jetonu sağlandı. İstemci uygulamasının FCM'ye kaydolurken aldığı kayıt simgesiyle eşleştiğinden emin olun. Kesmeyin veya ona ek karakterler eklemeyin.
messaging/registration-token-not-registered Sağlanan kayıt jetonu kayıtlı değil. Daha önce geçerli olan bir kayıt jetonu, aşağıdakiler de dahil olmak üzere çeşitli nedenlerle kaydedilmemiş olabilir:
  • İstemci uygulaması kendisini FCM'den kaydettirdi.
  • İstemci uygulamasının kaydı otomatik olarak silindi. Bu, kullanıcı uygulamayı kaldırırsa veya iOS'ta APNs Geri Bildirim Hizmeti APNs belirtecini geçersiz olarak bildirirse gerçekleşebilir.
  • Kayıt jetonunun süresi doldu. Örneğin, Google, kayıt jetonlarını yenilemeye karar verebilir veya iOS cihazları için APN jetonunun süresi dolmuş olabilir.
  • İstemci uygulaması güncellendi, ancak yeni sürüm iletileri alacak şekilde yapılandırılmadı.
Tüm bu durumlarda, bu kayıt jetonunu kaldırın ve mesaj göndermek için kullanmayı bırakın.
messaging/invalid-package-name Mesajı kimin paket adı verilen eşleşmeyen bir kayıt belirteci hitaben restrictedPackageName seçeneği.
messaging/message-rate-exceeded Belirli bir hedefe yönelik mesajların oranı çok yüksek. Bu cihaza veya konuya gönderilen mesaj sayısını azaltın ve bu hedefe hemen yeniden göndermeyi denemeyin.
messaging/device-message-rate-exceeded Belirli bir cihaza gönderilen mesajların oranı çok yüksek. Bu cihaza gönderilen mesajların sayısını azaltın ve bu cihaza hemen yeniden göndermeyi denemeyin.
messaging/topics-message-rate-exceeded Belirli bir konuya abonelere gönderilen mesajların oranı çok yüksek. Bu konu için gönderilen mesaj sayısını azaltın ve hemen bu konuya tekrar göndermeyi denemeyin.
messaging/too-many-topics Bir kayıt jetonu, maksimum sayıda konuya abone oldu ve artık abone olunamaz.
messaging/invalid-apns-credentials Gerekli APNs SSL sertifikası yüklenmediği veya süresi dolmadığı için bir iOS cihazını hedefleyen bir mesaj gönderilemedi. Geliştirme ve üretim sertifikalarınızın geçerliliğini kontrol edin.
messaging/mismatched-credential Bu SDK'nın kimliğini doğrulamak için kullanılan kimlik bilgisi, sağlanan kayıt belirtecine karşılık gelen cihaza mesaj gönderme iznine sahip değil. Kimlik bilgisinin ve kayıt belirtecinin her ikisinin de aynı Firebase projesine ait olduğundan emin olun. Bkz uygulamanıza Firebase ekle Firebase Yönetici SDK'larını kimliğini doğrulamak için nasıl belgeleri için.
messaging/authentication-error SDK, FCM sunucularında kimlik doğrulaması yapamadı. FCM mesajları göndermek için uygun izinlere sahip bir kimlik bilgisi ile Firebase Admin SDK'nın kimliğini doğruladığınızdan emin olun. Bkz uygulamanıza Firebase ekle Firebase Yönetici SDK'larını kimliğini doğrulamak için nasıl belgeleri için.
messaging/server-unavailable FCM sunucusu, isteği zamanında işleyemedi. Aynı isteği yeniden denemelisiniz, ancak şunları yapmalısınız:
  • Onur Retry-After başlığında o FCM Bağlantı Server yanıt olarak dahil edilir.
  • Yeniden deneme mekanizmanızda üstel geri çekilme uygulayın. Örneğin, ilk denemeden önce bir saniye beklediyseniz, bir sonraki denemeden önce en az iki saniye, ardından dört saniye vb. bekleyin. Birden fazla mesaj gönderiyorsanız, tüm mesajlar için aynı anda yeni bir istek göndermekten kaçınmak için her birini bağımsız olarak rastgele ek bir miktar kadar geciktirin.
Sorun yaratan gönderenler kara listeye alınma riskiyle karşı karşıyadır.
messaging/internal-error FCM sunucusu, isteği işlemeye çalışırken bir hatayla karşılaştı. Sen listelenen gereksinimleri aşağıdaki aynı talebi yeniden denemek olabilir messaging/server-unavailable yukarıdaki satırda. Hata devam ederse, bizim için problem rapor edin Hata Raporu destek kanalı.
messaging/unknown-error Bilinmeyen bir sunucu hatası döndürüldü. Daha fazla ayrıntı için hata mesajındaki ham sunucu yanıtına bakın. Bu hatayı alırsanız, bizim için tam hata mesajı rapor edin Hata Raporu destek kanalı.

Eski uygulama sunucusu protokollerini kullanarak mesaj gönderin

Eski protokolleri kullanmayı tercih ediyorsanız, bu bölümde gösterildiği gibi mesaj istekleri oluşturun. HTTP aracılığıyla birden fazla platforma gönderiyorsanız, v1 protokolünün mesaj isteklerinizi basitleştirebileceğini unutmayın.

Belirli cihazlara mesaj gönderin

Belirli cihazlara mesaj göndermek için, set to belirli bir uygulama örneğine belirteci kayıt anahtarı. Kayıt belirteçleri hakkında daha fazla bilgi edinmek için platformunuzun istemci kurulum bilgilerine bakın.

HTTP POST isteği

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{ "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}

HTTP yanıtı

{ "multicast_id": 108,
  "success": 1,
  "failure": 0,
  "results": [
    { "message_id": "1:08" }
  ]
}

XMPP mesajı

<message id="">
  <gcm xmlns="google:mobile:data">
    { "data": {
      "score": "5x1",
      "time": "15:10"
    },
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
  }
  </gcm>
</message>

XMPP yanıtı

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "from":"REGID",
      "message_id":"m-1366082849205"
      "message_type":"ack"
  }
  </gcm>
</message>

XMPP bağlantı sunucusu, yanıtlar için başka seçenekler sunar. Bkz Sunucu yanıt biçimi .

İstemci uygulamalarına mansap mesaj gönderirken kullanılabilir mesaj seçeneklerinin tam listesi için seçtiğiniz bağlantı sunucu protokolü, referans bilgileri görebilir , HTTP veya XMPP .

Konulara mesaj gönder

Bir Firebase Cloud Messaging konusuna mesaj göndermek, tek bir cihaza veya bir kullanıcı grubuna mesaj göndermeye çok benzer. Uygulamanın sunucu kümeleri to gibi bir değerle anahtarın /topics/yourTopic . : Geliştiriciler normal ifadeyle eşleşen herhangi konu adını seçebilir "/topics/[a-zA-Z0-9-_.~%]+" .

Birden konuların kombinasyonlarına göndermek için, uygulama sunucusu ayarlamanız gerekir condition (yerine anahtarını to bir boolean durumda olduğunu belirtir hedef konular anahtarı). Örneğin, abone cihazlara mesaj göndermek için TopicA ve ya TopicB veya TopicC :

'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)

FCM önce parantez içindeki koşulları değerlendirir ve ardından ifadeyi soldan sağa doğru değerlendirir. Yukarıdaki ifadede herhangi bir konuya abone olan bir kullanıcı mesajı almaz. Aynı şekilde TopicA'ya abone olmayan bir kullanıcı da mesajı almaz. Bu kombinasyonlar bunu alır:

  • KonuA ve KonuB
  • KonuA ve KonuC

Koşullu ifadenize en fazla beş konu ekleyebilirsiniz ve parantezler desteklenir. Desteklenen operatörler: && , || .

Konu HTTP POST isteği

Tek bir konuya gönder:

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA


"Köpekler" veya "kediler" konularına abone olan cihazlara gönderin:

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA


Konu HTTP yanıtı

//Success example:
{
  "message_id": "1023456"
}

//failure example:
{
  "error": "TopicsMessageRateExceeded"
}

Konu XMPP mesajı

Tek bir konuya gönder:

<message id="">
  <gcm xmlns="google:mobile:data">


  </gcm>
</message>

"Köpekler" veya "kediler" konularına abone olan cihazlara gönderin:

<message id="">
  <gcm xmlns="google:mobile:data">


  </gcm>
</message>

Konu XMPP yanıtı

//Success example:
{
  "message_id": "1023456"
}

//failure example:
{
  "error": "TopicsMessageRateExceeded"
}

FCM Sunucusu konu gönderme isteklerine bir başarı veya başarısızlık yanıtı vermeden önce 30 saniyeye kadar gecikme bekleyin. İstekte uygulama sunucusunun zaman aşımı değerini uygun şekilde ayarladığınızdan emin olun.

Cihaz gruplarına mesaj gönder

Bir cihaz grubuna mesaj göndermek, tek bir cihaza mesaj göndermeye çok benzer. Set to aygıt grubu için özel bildirim anahtar parametresi. Bkz İleti türlerini yük desteği ile ilgili ayrıntılar için. Bu sayfadaki örnekler, HTTP ve XMPP protokollerinde cihaz gruplarına veri mesajlarının nasıl gönderileceğini gösterir.

Cihaz Grubu HTTP POST İsteği

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "aUniqueKey",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!",
   }
}

Cihaz Grubu HTTP Yanıtı

İşte "başarı" bir örneğidir - notification_key kendisiyle ilişkili 2 kayıt belirteçleri vardır ve mesajın başarıyla ikisi de gönderildi:

{
  "success": 2,
  "failure": 0
}

Burada "kısmi başarı" bir örneğidir - notification_key 3 kayıt ile ilişkili jetonudur sahiptir. İleti, yalnızca kayıt belirteçlerinden 1'ine başarıyla gönderildi. Yanıt mesajı listeleri tescil belirteçleri ( registration_ids iletisi başarısız):

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

Mesaj bir veya kayıt daha ilişkili jetonudur teslim edilmek üzere başarısız olduğunda notification_key , uygulama sunucusu denemeleri arasında back-off ile yeniden denemek gerekir.

Sunucu, üyesi olmayan bir cihaz grubuna mesaj göndermeye çalışırsa, yanıt 0 başarılı ve 0 başarısızlıkla aşağıdaki gibi görünür:

{
  "success": 0,
  "failure": 0
}

Cihaz Grubu XMPP Mesajı

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to": "aUniqueKey",
      "message_id": "m-1366082849205" ,
      "data": {
          "hello":"This is a Firebase Cloud Messaging Device Group Message!"
      }
  }
  </gcm>
</message>

Cihaz Grubu XMPP Yanıtı

Mesaj gruptaki cihazlardan herhangi birine başarıyla gönderildiğinde, XMPP bağlantı sunucusu bir ACK ile yanıt verir. Gruptaki tüm cihazlara gönderilen tüm mesajlar başarısız olursa, XMPP bağlantı sunucusu bir NACK ile yanıt verir.

İşte "başarı" bir örneğidir - notification_key kendisiyle ilişkili 3 kayıt belirteçleri vardır ve mesajın başarıyla hepsini gönderildi:

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success": 3,
  "failure": 0,
  "message_id": "m-1366082849205"
}

Burada "kısmi başarı" bir örneğidir - notification_key 3 kayıt ile ilişkili jetonudur sahiptir. İleti, yalnızca kayıt belirteçlerinden 1'ine başarıyla gönderildi. Yanıt mesajı, mesajı alamayan kayıt belirteçlerini listeler:

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

FCM bağlantı sunucusu gruptaki tüm cihazlara teslim edemediğinde. Uygulama sunucusu bir nack yanıtı alacaktır.

Mesajı seçeneklerinin tam listesi için seçtiğiniz bağlantı sunucu protokolü, referans bilgileri görebilir , HTTP veya XMPP .

Firebase Admin SDK eski gönderme yöntemleri

Firebase Yönetici node.js SDK dayalı (FKM) mesaj göndermek için yöntemler destekler Legacy FCM sunucu API . Bu yöntemler ile karşılaştırıldığında farklı argümanları kabul send() yöntemiyle. Sen kullanmalıdır send() mümkün olduğunda yöntem ve sadece bireysel cihazlar veya cihaz gruplarına mesaj gönderirken bu sayfada açıklanan yöntemleri kullanın.

Tek tek cihazlara gönder

Sen hiç belirteci bir kayıt geçebilir sendToDevice() o cihaza bir mesaj göndermek için yöntemiyle:

Node.js

// This registration token comes from the client FCM SDKs.
const registrationToken = 'bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...';

// See the "Defining the message payload" section below for details
// on how to define a message payload.
const payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

// Send a message to the device corresponding to the provided
// registration token.
admin.messaging().sendToDevice(registrationToken, payload)
  .then((response) => {
    // See the MessagingDevicesResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

sendToDevice() yöntemi ayrıca kayıt dizisi yerine sadece tek bir kayıt belirteci belirtisi geçirilerek (yani, birden fazla cihaz bir mesajdır) bir çok mesaj gönderebilir:

Node.js

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  'bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...',
  // ...
  'ecupwIfBy1w:APA91bFtuMY7MktgxA3Au_Qx7cKqnf...'
];

// See the "Defining the message payload" section below for details
// on how to define a message payload.
const payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

// Send a message to the devices corresponding to the provided
// registration tokens.
admin.messaging().sendToDevice(registrationTokens, payload)
  .then((response) => {
    // See the MessagingDevicesResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

sendToDevice() metodu ile giderilmiş olup söz döner MessagingDevicesResponse FCM yanıtı içeren nesnenin. Dönüş türü, tek bir kayıt belirteci veya bir dizi kayıt belirteci geçerken aynı biçime sahiptir.

Kimlik doğrulama hatası veya hız sınırlaması gibi bazı durumlar, mesajın tamamının işlenememesine neden olur. Bu durumlarda, söz tarafından döndürülen sendToDevice() bir hatayla reddedilir. Açıklamaları ve çözüm adımları içeren hata kodları, tam listesi için bkz Yönetici FCM API Hataları .

Bir cihaz grubuna gönder

Cihaz grubu mesajlaşma, tek bir gruba birden fazla cihaz eklemenize olanak tanır. Bu, konu mesajlaşmasına benzer, ancak grup üyeliğinin yalnızca sunucularınız tarafından yönetilmesini sağlamak için kimlik doğrulamayı içerir. Örneğin, farklı telefon modellerine farklı mesajlar göndermek istiyorsanız, sunucularınız uygun gruplara kayıt ekleyebilir/kaldırabilir ve her gruba uygun mesajı gönderebilir. Cihaz grubu mesajlaşması, doğrudan uygulamanız yerine sunucularınızdan cihaz gruplarının yönetilmesini içermesi bakımından konu mesajlaşmasından farklıdır.

Sen eski aracılığıyla cihaz grup mesajlaşma kullanabilirsiniz XMPP veya HTTP uygulama sunucusunda protokolleri. Node.js için Firebase Yönetici SDK ayrıca cihazın grup mesajlaşma yetenekleri sağlamak mirası protokollere dayanarak. Bir bildirim anahtarı için izin verilen maksimum üye sayısı 20'dir.

Bir uygulama sunucusu veya bir Android istemcisi aracılığıyla cihaz grupları oluşturabilir ve bildirim anahtarları oluşturabilirsiniz. Bkz cihaz gruplarını yönetme detaylar için.

sendToDeviceGroup() yöntemi, söz konusu cihaz grubu için bildirim anahtarını belirterek bir cihaz gruba mesaj göndermek için izin verir:

Node.js

// See the "Managing device groups" link above on how to generate a
// notification key.
const notificationKey = 'some-notification-key';

// See the "Defining the message payload" section below for details
// on how to define a message payload.
const payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

// Send a message to the device group corresponding to the provided
// notification key.
admin.messaging().sendToDeviceGroup(notificationKey, payload)
  .then((response) => {
    // See the MessagingDeviceGroupResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

sendToDeviceGroup() metodu ile giderilmiş olup söz döner MessagingDeviceGroupResponse FCM yanıtı içeren nesnenin.

Kimlik doğrulama hatası veya hız sınırlaması gibi bazı durumlar, mesajın tamamının işlenememesine neden olur. Bu durumlarda, söz tarafından döndürülen sendToDeviceGroup() bir hatayla reddedilir. Açıklamaları ve çözüm adımları içeren hata kodları, tam listesi için bkz Yönetici FCM API Hataları .

Mesaj yükünü tanımlama

FCM eski protokollerine dayanmaktadır Yukarıdaki yöntemler ikinci değişken olarak bir mesaj yükü kabul ve her iki destek bildirimi ve veri mesajlarını . Sen sahip bir nesne oluşturarak bir veya her iki mesaj türlerini belirtebilirsiniz data ve / veya notification tuşları. Örneğin, farklı türde mesaj yüklerinin nasıl tanımlanacağı aşağıda açıklanmıştır:

bildirim mesajı

const payload = {
  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.'
  }
};

Veri mesajı

const payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

birleşik mesaj

const payload = {
  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.'
  },
  data: {
    stock: 'GOOG',
    open: '829.62',
    close: '635.67'
  }
};

Bildirim mesajı yükleri, önceden tanımlanmış bir geçerli özellikler alt kümesine sahiptir ve hedeflediğiniz mobil işletim sistemine bağlı olarak biraz farklılık gösterir. İçin referans dokümanlar bakın NotificationMessagePayload tam listesi için.

Veri mesajı yükleri, tüm değerlerin dize olması gerektiği gerçeği de dahil olmak üzere, birkaç kısıtlamayla özel anahtar/değer çiftlerinden oluşur. İçin referans dokümanlar bakın DataMessagePayload kısıtlamaların tam listesi için.

Mesaj seçeneklerini tanımlama

FCM eski protokollerine dayanan yukarıdaki yöntemler, mesaj için bazı seçenekleri belirten isteğe bağlı bir üçüncü argümanı kabul eder. Örneğin, aşağıdaki örnek, 24 saat sonra süresi dolan bir cihaza yüksek öncelikli bir mesaj gönderir:

Node.js

// This registration token comes from the client FCM SDKs.
const registrationToken = 'bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...';

// See the "Defining the message payload" section above for details
// on how to define a message payload.
const payload = {
  notification: {
    title: 'Urgent action needed!',
    body: 'Urgent action is needed to prevent your account from being disabled!'
  }
};

// Set the message as high priority and have it expire after 24 hours.
const options = {
  priority: 'high',
  timeToLive: 60 * 60 * 24
};

// Send a message to the device corresponding to the provided
// registration token with the provided options.
admin.messaging().sendToDevice(registrationToken, payload, options)
  .then((response) => {
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

İçin referans dokümanlar bakın MessagingOptions mevcut seçeneklerin tam listesi için.