Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Uygulama sunucusu oluşturma istekleri

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

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

Önceden tanımlanmış alanlardan oluşan bir bildirim yükü, kendi kullanıcı tanımlı alanlarınızın bir veri yükü veya her iki tür yükü içeren bir mesaj içeren mesajlar gönderebilirsiniz. Daha fazla bilgi için Mesaj türleri bölümüne bakın.

Bu sayfadaki örnekler, Firebase Admin SDK ( Node , Java , Python , C # ve Go desteği vardır ) ve v1 HTTP protokolü kullanılarak bildirim mesajlarının nasıl gönderileceğini gösterir. Eski HTTP ve XMPP protokolleri aracılığıyla mesaj göndermek için rehberlik de vardır.

Belirli cihazlara mesaj gönderin

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

node.js

 // This registration token comes from the client FCM SDKs.
var registrationToken = 'YOUR_REGISTRATION_TOKEN';

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

Git

 // 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İNLENME

 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 Admin SDK, projects/{project_id}/messages/{message_id} biçiminde kimlik dizesini döndürür. 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 jetonları listesine çok noktaya yayınlamanıza olanak tanır. Çağrı başına en fazla 100 cihaz kayıt jetonu (Java ve Node.js için 500) 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 100 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)) 

Git

 // 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 100 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İNLENME

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
 

sendAll() Admin SDK'ları için bu işlem, örneklerde gösterildiği gibi, başlık altındaki sendAll() API'yi kullanır. Dönüş değeri, yanıt listesi giriş belirteçlerinin sırasına karşılık gelen bir BatchResponse . Bu, hangi belirteçlerin hatalarla sonuçlandığı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)) 

Git

 // 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İNLENME

Her alt gönderme bir yanıt döndürür. Yanıtlar, --batch_ ile başlayan bir yanıt sınır dizesiyle --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

Bir konu oluşturduktan sonra, istemci tarafındaki konuya istemci uygulama örneklerini abone olarak veya sunucu API'si aracılığıyla konuya mesaj gönderebilirsiniz. Bu, FCM için ilk kez gönderme istekleri oluşturuyorsanız, önemli arka plan ve kurulum bilgileri için sunucu ortamınız ve FCM kılavuzuna bakın.

Arka uçtaki gönderme mantığınızda, gösterilen şekilde istediğiniz konu adını belirtin:

node.js

 // The topic name can be optionally prefixed with "/topics/".
var topic = 'highScores';

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

Git

 // 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İNLENME

 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
 

Bir konu kombinasyonuna mesaj göndermek için, hedef konuları belirten bir boole ifadesi olan bir koşul belirtin. Örneğin, aşağıdaki koşul, TopicA ve TopicB veya TopicC abone olan cihazlara mesajlar gönderecektir:

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

FCM önce parantez içindeki herhangi bir koşulu 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. Benzer şekilde, TopicA abone olmayan bir kullanıcı mesajı almaz. Bu kombinasyonlar onu alıyor:

  • 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.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
var message = {
  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.
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(new Notification(
        "$GOOG up 1.43% on the day",
        "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day."))
    .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) 

Git

 // 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İNLENME

 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 Admin SDK'lar, toplu halde mesaj göndermeyi destekler. 500'e kadar mesajı tek bir grup halinde gruplayabilir ve hepsini tek bir API çağrısında gönderebilirsiniz; her mesaj için ayrı HTTP istekleri göndermeye kıyasla önemli bir performans artışı elde edebilirsiniz.

Bu özellik, özelleştirilmiş bir mesaj kümesi 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. Bu özelliği, örneğin, mesaj gövdesinde biraz farklı ayrıntılarla aynı anda farklı hedef kitlelere mesaj göndermeniz gerektiğinde 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(new Notification("Price drop", "5% off all electronics"))
        .setToken(registrationToken)
        .build(),
    // ...
    Message.builder()
        .setNotification(new Notification("Price drop", "2% off all books"))
        .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)) 

Git

 // 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 100 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İNLENME

Alt isteklerin bir 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--
 

İletilerin kaç BatchResponse başarıyla teslim edildiğini kontrol etmek için döndürülen BatchResponse sorgulayabilirsiniz. Ayrıca, tek tek mesajların durumunu kontrol etmek için kullanılabilecek yanıtların bir listesini de gösterir. Yanıtların sırası, giriş listesindeki mesajların sırasına karşılık gelir.

Doğrudan önyükleme etkin mesajlar gönderin (yalnızca Android)

HTTP v1 veya eski HTTP API'lerini kullanarak doğrudan önyükleme modunda cihazlara mesaj gönderebilirsiniz. Aygıtlara doğrudan önyükleme modunda göndermeden önce, istemci aygıtların doğrudan önyükleme modunda FCM mesajlarını almasını sağlamak için adımları tamamladığınızdan emin olun.

FCM v1 HTTP API kullanarak gönderin

Mesaj isteği, istek gövdesinin AndroidConfig seçeneklerinde "direct_book_ok" : true anahtarını "direct_book_ok" : true . Ö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önderin

Mesaj isteği, istek gövdesinin en üst seviyesinde "direct_book_ok" : true anahtarını "direct_book_ok" : true . Ö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_book_ok" : true
}
 

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

Platformlar arasında mesajları özelleştirin

Firebase Admin SDK ve FCM v1 HTTP protokolünün her ikisi de mesaj isteklerinizin message nesnesinde bulunan tüm alanları ayarlamasına izin verir. Bu içerir:

  • mesajı alan tüm uygulama örnekleri tarafından yorumlanacak ortak bir alan kümesi.
  • AndroidConfig ve WebpushConfig gibi platforma özgü alan kümeleri, yalnızca belirtilen platformda çalışan uygulama örnekleri tarafından yorumlanır.

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

Ortak alanlar ne zaman kullanılır?

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

  • Uygulama örneklerini tüm platformlarda (iOS, Android ve web) hedefleme
  • 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önderin
  • Ortak alanlara ek olarak platforma özel alanlar gönderin

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

Belirli teslimat seçenekleriyle mesaj gönderirken, bunları ayarlamak için platforma özel alanları kullanın. İsterseniz platform başına farklı değerler belirleyebilirsiniz. Bununla birlikte, temelde aynı değeri platformlar arasında ayarlamak isteseniz bile, platforma özgü alanları kullanmanız gerekir. Bunun nedeni, her platformun değeri biraz farklı yorumlayabilmesidir - örneğin, canlı kalma süresi Android'de saniye cinsinden sona erme süresi olarak ayarlanırken, iOS'ta sona erme tarihi olarak ayarlanır.

Örnek: platforma özel teslim seçenekleriyle bildirim mesajı

Aşağıdaki gönderme isteği, tüm platformlara ortak bir bildirim başlığı ve içeriği gönderir, ancak aynı zamanda platforma özgü bazı geçersiz kılmalar da gönderir. Özellikle istek:

  • Android cihazlarda görüntülenecek özel bir simge ve renkle birlikte Android için uzun bir yaşam süresi ayarlar.
  • İOS cihazlara teslimat için APN'lerin yükündeki yalnızca iOS badge alanını ayarlar.

node.js

 var message = {
  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: {
    ttl: 3600 * 1000,
    notification: {
      icon: 'stock_ticker_update',
      color: '#f45342',
    },
  },
  apns: {
    payload: {
      aps: {
        badge: 42,
      },
    },
  },
  topic: 'industry-tech'
};
 

Java

 Message message = Message.builder()
    .setNotification(new Notification(
        "$GOOG up 1.43% on the day",
        "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day."))
    .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',
) 

Git

 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İNLENME

 {
  "message":{
     "topic":"industry-tech",
     "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":{
       "ttl":"3600s",
       "notification":{
         "icon":"stock_ticker_update",
         "color":"#f45342"
       }
     },
     "apns":{
       "payload":{
         "aps":{
           "badge":"42"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }
 

Mesaj gövdesindeki platforma özgü bloklarda bulunan anahtarlar hakkında tam ayrıntı için HTTP v1 referans belgelerine bakın.

Yönetici hata kodları

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

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 bilgi içermelidir.
messaging/invalid-recipient Amaçlanan mesaj alıcısı geçersiz. Hata mesajı ek bilgi içermelidir.
messaging/invalid-payload Geçersiz bir mesaj yükü nesnesi sağlandı. Hata mesajı ek bilgi içermelidir.
messaging/invalid-data-payload-key Veri mesajı yükü geçersiz bir anahtar içeriyor. Kısıtlanmış anahtarlar için DataMessagePayload başvuru belgelerine bakın.
messaging/payload-size-limit-exceeded Sağlanan mesaj yükü, FCM boyut sınırlarını aşıyor. Çoğu mesaj 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 bilgi içermelidir.
messaging/invalid-registration-token Geçersiz kayıt jetonu sağlandı. İstemci uygulamasının FCM'ye kaydolurken aldığı kayıt jetonuyla eşleştiğinden emin olun. Kesmeyin veya ek karakterler eklemeyin.
messaging/registration-token-not-registered Sağlanan kayıt jetonu kayıtlı değil. Önceden geçerli bir kayıt jetonunun kaydı, aşağıdakiler dahil çeşitli nedenlerle kaldırılabilir:
  • İstemci uygulaması, FCM'deki kaydını sildi.
  • İstemci uygulamasının kaydı otomatik olarak kaldırıldı. Bu, kullanıcı uygulamayı kaldırırsa veya iOS'ta APNS Geri Bildirim Hizmeti APNS belirtecini geçersiz olarak bildirirse olabilir.
  • Kayıt jetonunun süresi doldu. Örneğin Google, iOS cihazlar için kayıt jetonlarını yenilemeye karar verebilir veya APNS jetonunun süresi dolmuş olabilir.
  • İstemci uygulaması güncellendi, ancak yeni sürüm mesajları alacak şekilde yapılandırılmadı.
Tüm bu durumlar için, bu kayıt jetonunu kaldırın ve mesaj göndermek için kullanmayı bırakın.
messaging/invalid-package-name Mesaj, paket adı sağlanan restrictedPackageName seçeneğiyle eşleşmeyen bir kayıt jetonuna yönlendirildi.
messaging/message-rate-exceeded Belirli bir hedefe gönderilen mesajların oranı çok yüksek. Bu cihaza veya konuya gönderilen mesajların sayısını azaltın ve bu hedefe göndermeyi hemen tekrar 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 göndermeyi hemen tekrar denemeyin.
messaging/topics-message-rate-exceeded Belirli bir konunun abonelerine mesaj oranı çok yüksek. Bu konu için gönderilen mesajların sayısını azaltın ve bu konuya hemen göndermeyi denemeyin.
messaging/too-many-topics Bir kayıt jetonu, maksimum konu sayısına abone olunmuştur ve artık abone olunamaz.
messaging/invalid-apns-credentials Bir iOS cihazını hedefleyen bir mesaj, gerekli APNs SSL sertifikası yüklenmediği veya süresi dolduğu için 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 bilgilerinin, sağlanan kayıt jetonuna karşılık gelen cihaza mesaj gönderme izni yok. Kimlik bilgilerinin ve kayıt jetonunun aynı Firebase projesine ait olduğundan emin olun. Firebase Admin SDK'larının kimlik doğrulamasının nasıl yapılacağına ilişkin belgeler için uygulamanıza Firebase ekleme konusuna bakın.
messaging/authentication-error SDK, FCM sunucularına kimlik doğrulayamadı. Firebase Admin SDK'nın kimliğini, FCM mesajları göndermek için uygun izinlere sahip bir kimlik bilgileriyle doğruladığınızdan emin olun. Firebase Admin SDK'larının kimlik doğrulamasının nasıl yapılacağına ilişkin belgeler için uygulamanıza Firebase ekleme konusuna bakın.
messaging/server-unavailable FCM sunucusu isteği zamanında işleyemedi. Aynı isteği yeniden denemelisiniz, ancak şunları yapmalısınız:
  • FCM Bağlantı Sunucusundan gelen yanıta dahil edilmişse, Retry-After başlığını dikkate alın.
  • Yeniden deneme mekanizmanızda üstel geri çekilme uygulayın. Örneğin, ilk denemeden önce bir saniye beklediyseniz, bir sonrakinden önce en az iki saniye, ardından dört saniye bekleyin ve bu şekilde devam edin. Birden fazla mesaj gönderiyorsanız, aynı anda tüm mesajlar için yeni bir istek göndermekten kaçınmak için her birini bağımsız olarak ek bir rastgele miktarda erteleyin.
Sorunlara neden olan göndericiler kara listeye alınma riski taşır.
messaging/internal-error FCM sunucusu, isteği işlemeye çalışırken bir hatayla karşılaştı. Yukarıdaki messaging/server-unavailable satırında listelenen gereksinimleri izleyerek aynı isteği yeniden deneyebilirsiniz. Hata devam ederse, lütfen sorunu Hata Raporu destek kanalımıza bildirin.
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, lütfen hata mesajının tamamını Hata Raporu destek kanalımıza bildirin.

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 çok 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 jetonları 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 bazı başka seçenekler sağlar. Bkz. Sunucu yanıt biçimi .

İstemci uygulamalarına aşağı akış mesajları gönderirken kullanılabilen mesaj seçeneklerinin tam listesi için, seçtiğiniz bağlantı sunucusu protokolü olan HTTP veya XMPP için referans bilgilerine bakın.

Konulara mesaj gönder

Bir Firebase Bulut Mesajlaşma konusuna mesaj göndermek, tek bir cihaza veya bir kullanıcı grubuna mesaj göndermeye çok benzer. Uygulama sunucusu, /topics/yourTopic gibi bir değerle to anahtarını ayarlar. Geliştiriciler, "/topics/[a-zA-Z0-9-_.~%]+" normal ifadesiyle eşleşen herhangi bir konu adını seçebilirler.

Birden çok konunun kombinasyonlarına göndermek için, uygulama sunucusunun condition anahtarını ( to tuşu yerine) hedef konuları belirten bir boole koşuluna ayarlaması gerekir. Örneğin, TopicA ve TopicB veya TopicC abone olan cihazlara mesaj göndermek için:

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

FCM önce parantez içindeki herhangi bir koşulu 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. Benzer şekilde, KonuA'ya abone olmayan bir kullanıcı mesajı almaz. Bu kombinasyonlar onu alıyor:

  • Konu A ve KonuB
  • Konu A ve Konu C

Koşullu ifadenize en fazla beş konu ekleyebilirsiniz ve parantezler desteklenir. Desteklenen operatörler: && , || , ! . İçin kullanımı not edin ! :

!('TopicA' in topics)

Bu ifadeyle, herhangi bir konuya abone olmayan uygulama örnekleri dahil olmak üzere TopicA'ya abone olmayan tüm uygulama örnekleri mesajı alır.

Uygulama sunucusu anahtarları hakkında daha fazla ayrıntı için, seçtiğiniz bağlantı sunucusu protokolü, HTTP veya XMPP için referans bilgilerine bakın. Bu sayfadaki örnekler, mesajların hem HTTP hem de XMPP'deki konulara nasıl gönderileceğini gösterir.

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 Sunucusunun konu gönderme isteklerine başarılı veya başarısız yanıt vermesinden önce 30 saniyeye kadar gecikme bekleyin. İstekte uygulama sunucusunun zaman aşımı değerini buna göre ayarladığınızdan emin olun.

Mesaj seçeneklerinin tam listesi için, seçtiğiniz bağlantı sunucusu protokolü, HTTP veya XMPP için referans bilgilerine bakın.

Cihaz gruplarına mesaj gönderin

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. Yük desteği ile ilgili ayrıntılar için bkz. Mesaj türleri . Bu sayfadaki örnekler, HTTP ve XMPP protokollerinde veri mesajlarının aygıt gruplarına 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 bir "başarı" örneği - notification_key ile ilişkili 2 kayıt jetonu var ve mesaj her ikisine de başarıyla gönderildi:

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

İşte bir "kısmi başarı" örneği - notification_key ile ilişkili 3 kayıt jetonu vardır. Mesaj, kayıt jetonlarının yalnızca 1'ine başarıyla gönderildi. Yanıt mesajı, mesajı alamayan kayıt belirteçlerini listeler:

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

Bir notification_key , bir notification_key anahtarıyla ilişkili bir veya daha fazla kayıt jetonuna teslim edilemediğinde, uygulama sunucusu, denemeler arasında geri çekilmeyle yeniden denemelidir.

Sunucu, üyesi olmayan bir aygıt 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
}

Aygıt 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>

Aygıt 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 bir "başarı" örneği - notification_key ile ilişkilendirilmiş 3 kayıt jetonu vardır ve mesaj hepsine başarıyla gönderilmiştir:

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

İşte bir "kısmi başarı" örneği - notification_key anahtarının kendisiyle ilişkili 3 kayıt jetonu vardır. Mesaj, kayıt jetonlarının yalnızca 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 teslimat yapamadığında. Uygulama sunucusu bir nack yanıtı alacak.

Mesaj seçeneklerinin tam listesi için, seçtiğiniz bağlantı sunucusu protokolü, HTTP veya XMPP için referans bilgilerine bakın.

Firebase Admin SDK eski gönderme yöntemleri

Firebase Admin Node.js SDK, Eski FCM sunucu API'sına dayalı olarak mesaj gönderme (FCM) yöntemlerini destekler. Bu yöntemler, send() yöntemine kıyasla farklı bağımsız değişkenleri kabul eder. Mümkün olduğunda send() yöntemini kullanmalı ve yalnızca bu sayfada açıklanan yöntemleri tek tek cihazlara veya cihaz gruplarına mesaj gönderirken kullanmalısınız.

Bireysel cihazlara gönder

Bu cihaza bir mesaj göndermek için sendToDevice() yöntemine bir kayıt jetonu iletebilirsiniz:

node.js

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

// See the "Defining the message payload" section below for details
// on how to define a message payload.
var 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(function(response) {
    // See the MessagingDevicesResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });
 

sendToDevice() yöntemi, yalnızca tek bir kayıt belirteci yerine bir dizi kayıt belirteci ileterek çok noktaya yayın iletisi (yani birden çok aygıta bir ileti) gönderebilir:

node.js

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

// See the "Defining the message payload" section below for details
// on how to define a message payload.
var 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(function(response) {
    // See the MessagingDevicesResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });
 

sendToDevice() yöntemi, sendToDevice() gelen yanıtı içeren MessagingDevicesResponse nesnesiyle çözülen bir söz verir. Dönüş türü, tek bir kayıt belirteci veya bir kayıt belirteci dizisi geçirirken 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, sendToDevice() tarafından döndürülen söz, bir hata ile reddedilir. Açıklamalar ve çözüm adımları dahil olmak üzere hata kodlarının tam listesi için Yönetici FCM API Hataları sayfasına göz atın .

Bir cihaz grubuna gönder

Aygıt grubu mesajlaşması, tek bir gruba birden çok aygıt 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ğrulaması 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. Aygıt grubu mesajlaşması, cihaz gruplarını doğrudan uygulamanızın içinden yönetmek yerine sunucularınızdan yönetmeyi içerdiği için konu mesajlaşmasından farklıdır.

Uygulama sunucunuzdaki eski XMPP veya HTTP protokolleri aracılığıyla cihaz grubu mesajlaşmasını kullanabilirsiniz. Eski protokolleri temel alan Node.js için Firebase Admin SDK, cihaz grubu mesajlaşma yetenekleri de sağlar. 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. Ayrıntılar için Aygıt gruplarını yönetme konusuna bakın.

sendToDeviceGroup() yöntemi, o aygıt grubu için bildirim anahtarını belirterek bir aygıt grubuna mesaj göndermenizi sağlar:

node.js

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

// See the "Defining the message payload" section below for details
// on how to define a message payload.
var 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(function(response) {
    // See the MessagingDeviceGroupResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });
 

sendToDeviceGroup() yöntemi, sendToDeviceGroup() gelen yanıtı içeren MessagingDeviceGroupResponse nesnesiyle çözülen bir söz döndürür.

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

Mesaj yükünü tanımlama

Eski FCM protokollerine dayanan yukarıdaki yöntemler, ikinci argüman olarak bir mesaj yükünü kabul eder ve hem bildirim hem de veri mesajlarını destekler . data ve / veya notification tuşlarıyla bir nesne oluşturarak mesaj türlerinden birini veya her ikisini de belirtebilirsiniz. Örneğin, farklı türde ileti yüklerinin nasıl tanımlanacağı aşağıda açıklanmıştır:

Bildirim mesajı

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

Veri mesajı

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

Kombine mesaj

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

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

Veri mesajı yükleri, tüm değerlerin dizeler olması gerektiği gerçeği de dahil olmak üzere birkaç kısıtlamaya sahip özel anahtar-değer çiftlerinden oluşur. Kısıtlamaların tam listesi için DataMessagePayload referans belgelerine bakın.

Mesaj seçeneklerinin tanımlanması

Eski FCM protokollerine dayanan yukarıdaki yöntemler, mesaj için bazı seçenekler belirten isteğe bağlı üçüncü bir bağımsız değişkeni kabul eder. Örneğin, aşağıdaki örnek bir cihaza yüksek öncelikli bir mesaj gönderir ve bu mesaj 24 saat sonra sona erer:

node.js

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

// See the "Defining the message payload" section above for details
// on how to define a message payload.
var 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.
var 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(function(response) {
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });
 

Mevcut seçeneklerin tam listesi için MessagingOptions referans belgelerine bakın.