Google 致力于为黑人社区推动种族平等。查看具体举措

বিল্ড অ্যাপ সার্ভার অনুরোধ প্রেরণ

ফায়ারবেস অ্যাডমিন এসডিকে বা এফসিএম অ্যাপ সার্ভার প্রোটোকল ব্যবহার করে, আপনি বার্তা অনুরোধ তৈরি করতে পারেন এবং এই ধরনের লক্ষ্যগুলিতে পাঠাতে পারেন:

  • বিষয় নাম
  • শর্ত
  • ডিভাইস রেজিস্ট্রেশন টোকেন
  • ডিভাইসের গ্রুপের নাম (শুধুমাত্র Node.js- এর জন্য লিগ্যাসি প্রোটোকল এবং ফায়ারবেস অ্যাডমিন এসডিকে)

আপনি পূর্বনির্ধারিত ক্ষেত্রগুলি দিয়ে তৈরি একটি বিজ্ঞপ্তি পেলোড, আপনার নিজের ব্যবহারকারী-সংজ্ঞায়িত ক্ষেত্রগুলির একটি ডেটা পেলোড, বা উভয় ধরণের পেলোড সহ একটি বার্তা পাঠাতে পারেন। দেখুন বার্তা ধরনের আরও তথ্যের জন্য।

এই পৃষ্ঠাটি কিভাবে Firebase এডমিন SDK এর (যার জন্য সমর্থন আছে ব্যবহার বিজ্ঞপ্তি বার্তা পাঠানোর জন্য উদাহরণ নোড , জাভা , পাইথন , সি # , এবং যান ) এবং v1 এ HTTP প্রোটোকলের । এছাড়া মাধ্যমে বার্তা পাঠানোর জন্য পথনির্দেশ উত্তরাধিকার HTTP এবং পাওয়া XMPP প্রোটোকলের

নির্দিষ্ট ডিভাইসে বার্তা পাঠান

একটি একক, নির্দিষ্ট ডিভাইসে পাঠানোর জন্য, ডিভাইসের রেজিস্ট্রেশন টোকেনটি দেখানো হয়েছে। নিবন্ধন টোকেন সম্পর্কে আরো জানতে আপনার প্ল্যাটফর্মের জন্য ক্লায়েন্ট সেটআপ তথ্য দেখুন।

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

জাভা

// This registration token comes from the client FCM SDKs.
String registrationToken = "YOUR_REGISTRATION_TOKEN";

// See documentation on defining a message payload.
Message message = Message.builder()
    .putData("score", "850")
    .putData("time", "2:45")
    .setToken(registrationToken)
    .build();

// Send a message to the device corresponding to the provided
// registration token.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

পাইথন

# This registration token comes from the client FCM SDKs.
registration_token = 'YOUR_REGISTRATION_TOKEN'

# See documentation on defining a message payload.
message = messaging.Message(
    data={
        'score': '850',
        'time': '2:45',
    },
    token=registration_token,
)

# Send a message to the device corresponding to the provided
# registration token.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

যাওয়া

// Obtain a messaging.Client from the App.
ctx := context.Background()
client, err := app.Messaging(ctx)
if err != nil {
	log.Fatalf("error getting Messaging client: %v\n", err)
}

// This registration token comes from the client FCM SDKs.
registrationToken := "YOUR_REGISTRATION_TOKEN"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Token: registrationToken,
}

// Send a message to the device corresponding to the provided
// registration token.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)

সি#

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

// See documentation on defining a message payload.
var message = new Message()
{
    Data = new Dictionary<string, string>()
    {
        { "score", "850" },
        { "time", "2:45" },
    },
    Token = registrationToken,
};

// Send a message to the device corresponding to the provided
// registration token.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);

বিশ্রাম

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 কমান্ড:

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

সাফল্যে, প্রতিটি পাঠানোর পদ্ধতি একটি বার্তা আইডি প্রদান করে। Firebase এডমিন SDK এর বিন্যাসে আইডি স্ট্রিং ফেরৎ projects/{project_id}/messages/{message_id} । HTTP প্রোটোকল প্রতিক্রিয়া একটি একক JSON কী:

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

একাধিক ডিভাইসে বার্তা পাঠান

আরইএসটি এপিআই এবং অ্যাডমিন এফসিএম এপিআই আপনাকে ডিভাইস নিবন্ধন টোকেনের তালিকায় একটি বার্তা মাল্টিকাস্ট করার অনুমতি দেয়। আপনি প্রতি আহ্বানে 500 টি ডিভাইস নিবন্ধন টোকেন নির্দিষ্ট করতে পারেন।

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

জাভা

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

পাইথন

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

যাওয়া

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

সি#

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

বিশ্রাম

একটি HTTP ব্যাচের অনুরোধ তৈরি করুন:

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

অনুরোধটি একটি ফাইলে সংরক্ষণ করুন (এই উদাহরণে batch_request.txt)। তারপর cURL কমান্ড ব্যবহার করুন:

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

Firebase এডমিন SDK আছে, এই অপারেশন ব্যবহার sendAll() এপিআই ফণা অধীন, যেমন উদাহরণ দেখানো। ফেরত মান একটি হল BatchResponse যার প্রতিক্রিয়া ইনপুট টোকেন ক্রম তালিকা। কোন টোকেনের ফলে ত্রুটি হয়েছে তা পরীক্ষা করতে চাইলে এটি কার্যকর।

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

জাভা

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

পাইথন

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

যাওয়া

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

সি#

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

বিশ্রাম

প্রতিটি পাঠান সাব-সেন্ড একটি প্রতিক্রিয়া প্রদান করে। প্রত্যুত্তর একটি প্রতিক্রিয়া সীমানা স্ট্রিং দিয়ে শুরু দ্বারা বিভক্ত করা হয় --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--

বিষয়গুলিতে বার্তা পাঠান

পরে আপনি, হয় ক্লায়েন্ট সাইড বা মাধ্যমে বিষয়ে ক্লায়েন্ট অ্যাপ্লিকেশন দৃষ্টান্ত সাবস্ক্রাইব করে একটি বিষয় তৈরি করেছেন সার্ভার API , আপনি বিষয় বার্তা পাঠাতে পারেন। এই আপনার প্রথম সময় FCM এর জন্য পাঠানো অনুরোধ বিল্ডিং হয়, তাহলে গাইড দেখতে আপনার সার্ভারে পরিবেশ ও FCM গুরুত্বপূর্ণ পটভূমি এবং সেটআপ তথ্যের জন্য।

ব্যাকএন্ডে আপনার পাঠানোর যুক্তিতে, দেখানো হিসাবে পছন্দসই বিষয়ের নাম উল্লেখ করুন:

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

জাভা

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

পাইথন

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

যাওয়া

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

সি#

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

বিশ্রাম

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 কমান্ড:

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

বিষয় সংমিশ্রণ একটি বার্তা পাঠানোর জন্য, একটি শর্ত, যা একটি বুলিয়ান অভিব্যক্তি লক্ষ্য বিষয় নির্দিষ্ট করে কি উল্লেখ করুন। উদাহরণস্বরূপ, নিম্নলিখিত শর্ত ডিভাইস সদস্যতা নিয়েছেন বার্তা পাঠাবে TopicA এবং হয় TopicB বা TopicC :

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

FCM প্রথমে বন্ধনীতে কোন শর্ত মূল্যায়ন করে, এবং তারপর বাম থেকে ডানে অভিব্যক্তি মূল্যায়ন করে। উপরের অভিব্যক্তিতে, কোনও ব্যবহারকারী যে কোনও একক বিষয়ে সাবস্ক্রাইব করেছেন তিনি বার্তাটি পান না। অনুরূপভাবে, একটি ব্যবহারকারী যারা সাবস্ক্রাইব করা হয় না TopicA বার্তা নেই। এই সংমিশ্রণগুলি এটি গ্রহণ করে:

  • TopicA এবং TopicB
  • TopicA এবং TopicC

আপনি আপনার শর্তাধীন অভিব্যক্তিতে পাঁচটি বিষয় অন্তর্ভুক্ত করতে পারেন।

একটি শর্তে পাঠাতে:

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

জাভা

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

পাইথন

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

যাওয়া

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

সি#

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

বিশ্রাম

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 কমান্ড:

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

মেসেজের একটি ব্যাচ পাঠান

REST API এবং প্রশাসক SDKs ব্যাচে বার্তা পাঠাতে সমর্থন করে। আপনি একটি একক ব্যাচে 500 টি পর্যন্ত বার্তা সংগ্রহ করতে পারেন এবং প্রতিটি বার্তার জন্য পৃথক HTTP অনুরোধ পাঠানোর ক্ষেত্রে উল্লেখযোগ্য কর্মক্ষমতা উন্নতি সহ একটি একক এপিআই কলে পাঠাতে পারেন।

এই বৈশিষ্ট্যটি বার্তাগুলির একটি কাস্টমাইজড সেট তৈরি করতে এবং বিভিন্ন প্রাপকদের কাছে পাঠাতে ব্যবহার করা যেতে পারে, যার মধ্যে বিষয় বা নির্দিষ্ট ডিভাইস নিবন্ধন টোকেন রয়েছে। এই বৈশিষ্ট্যটি ব্যবহার করুন যখন, উদাহরণস্বরূপ, আপনাকে একই সাথে বিভিন্ন শ্রোতাকে বার্তা পাঠাতে হবে যাতে বার্তার মূল অংশে কিছুটা ভিন্ন বিবরণ থাকে।

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

জাভা

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

পাইথন

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

যাওয়া

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

সি#

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

বিশ্রাম

উপ অনুরোধের একটি তালিকা একত্রিত করে একটি HTTP ব্যাচের অনুরোধ তৈরি করুন:

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

আপনি ফিরে খোঁজ করতে পারেন BatchResponse কিভাবে বার্তাগুলির অনেক সফলভাবে FCM বন্ধ হস্তান্তর করা হয়েছে বার করো। এটি প্রতিক্রিয়াগুলির একটি তালিকা প্রকাশ করে যা পৃথক বার্তার অবস্থা পরীক্ষা করতে ব্যবহার করা যেতে পারে। প্রতিক্রিয়াগুলির ক্রম ইনপুট তালিকার বার্তাগুলির ক্রমের সাথে মিলে যায়।

সরাসরি বুট-সক্ষম বার্তা পাঠান (শুধুমাত্র অ্যান্ড্রয়েড)

আপনি HTTP v1 বা লিগ্যাসি HTTP API ব্যবহার করে সরাসরি বুট মোডে ডিভাইসে বার্তা পাঠাতে পারেন। সরাসরি বুট মোডে ডিভাইস পাঠানোর আগে, নিশ্চিত করুন যে আপনি ক্লায়েন্ট ডিভাইস সক্ষম করার জন্য পদক্ষেপ সম্পন্ন করতে সরাসরি বুট মোডে FCM বার্তা গ্রহণ

FCM v1 HTTP API ব্যবহার করে পাঠান

বার্তা অনুরোধ চাবি অন্তর্ভুক্ত করা আবশ্যক "direct_boot_ok" : true মধ্যে AndroidConfig অনুরোধ শরীরের অপশন। উদাহরণ স্বরূপ:

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 লিগ্যাসি HTTP API ব্যবহার করে পাঠান

বার্তা অনুরোধ চাবি অন্তর্ভুক্ত করা আবশ্যক "direct_boot_ok" : true অনুরোধের মূল উপরের স্তরে। উদাহরণ স্বরূপ:

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
}

রিকোয়েস্ট বডিতে এই কী দিয়ে প্রেরিত বার্তাগুলি বর্তমানে সরাসরি বুট মোডে থাকা ডিভাইসে অ্যাপস দ্বারা পরিচালিত হতে পারে (এবং সেই মোডে না থাকলেও)।

প্ল্যাটফর্ম জুড়ে বার্তাগুলি কাস্টমাইজ করুন

Firebase এডমিন SDK এর এবং FCM v1 এ HTTP প্রোটোকলের উভয় আপনার বার্তা অনুরোধ সব ক্ষেত্র পাওয়া সেট করার অনুমতি message অবজেক্ট। এটা অন্তর্ভুক্ত:

  • ক্ষেত্র একটি সাধারণ সেট সব অ্যাপ্লিকেশান দৃষ্টান্ত যে বার্তা ব্যাখ্যা করতে হবে।
  • যেমন ক্ষেত্র, প্ল্যাটফর্ম-নির্দিষ্ট সেট AndroidConfig এবং WebpushConfig নির্দিষ্ট প্ল্যাটফর্মে চলমান অ্যাপ্লিকেশান দৃষ্টান্ত কেবল বুঝিয়ে দিলেন।

প্ল্যাটফর্ম-নির্দিষ্ট ব্লকগুলি আপনাকে বিভিন্ন প্ল্যাটফর্মের জন্য বার্তাগুলি কাস্টমাইজ করার জন্য নমনীয়তা দেয় যাতে নিশ্চিত হয় যে সেগুলি সঠিকভাবে পরিচালিত হয়। এফসিএম ব্যাকএন্ড সমস্ত নির্দিষ্ট প্যারামিটারগুলি বিবেচনায় নেবে এবং প্রতিটি প্ল্যাটফর্মের জন্য বার্তাটি কাস্টমাইজ করবে।

সাধারণ ক্ষেত্রগুলি কখন ব্যবহার করবেন

সাধারণ ক্ষেত্রগুলি ব্যবহার করুন যখন আপনি:

  • সব প্ল্যাটফর্মে অ্যাপ্লিকেশন দৃষ্টান্ত টার্গেটিং - প্রয়োজন iOS, অ্যান্ড্রয়েড, এবং ওয়েব
  • বিষয়গুলিতে বার্তা প্রেরণ

সমস্ত অ্যাপ্লিকেশন উদাহরণ, প্ল্যাটফর্ম নির্বিশেষে, নিম্নলিখিত সাধারণ ক্ষেত্রগুলি ব্যাখ্যা করতে পারে:

প্ল্যাটফর্ম-নির্দিষ্ট ক্ষেত্রগুলি কখন ব্যবহার করবেন

যখন আপনি চান তখন প্ল্যাটফর্ম-নির্দিষ্ট ক্ষেত্রগুলি ব্যবহার করুন:

  • শুধুমাত্র নির্দিষ্ট প্ল্যাটফর্মে ক্ষেত্র পাঠান
  • সাধারণ ক্ষেত্র ছাড়াও প্ল্যাটফর্ম-নির্দিষ্ট ক্ষেত্র পাঠান

যখনই আপনি শুধুমাত্র নির্দিষ্ট প্ল্যাটফর্মে মান পাঠাতে, সাধারণ ক্ষেত্র ব্যবহার করতে চাই না; প্ল্যাটফর্ম-নির্দিষ্ট ক্ষেত্রগুলি ব্যবহার করুন। উদাহরণস্বরূপ, শুধুমাত্র আইওএস এবং ওয়েবে একটি বিজ্ঞপ্তি পাঠানোর জন্য কিন্তু অ্যান্ড্রয়েডে নয়, আপনাকে অবশ্যই দুটি পৃথক সেট ফিল্ড ব্যবহার করতে হবে, একটি আইওএসের জন্য এবং একটি ওয়েবের জন্য।

আপনি নির্দিষ্ট বার্তাগুলি প্রেরণ করছেন যখন প্রদান বিকল্প , ব্যবহার প্ল্যাটফর্ম-নির্দিষ্ট ক্ষেত্র তাদের সেট করতে। আপনি চাইলে প্রতি প্ল্যাটফর্মে বিভিন্ন মান নির্দিষ্ট করতে পারেন। যাইহোক, এমনকি যখন আপনি প্ল্যাটফর্ম জুড়ে অপরিহার্যভাবে একই মান সেট করতে চান, আপনাকে অবশ্যই প্ল্যাটফর্ম-নির্দিষ্ট ক্ষেত্রগুলি ব্যবহার করতে হবে। এই যখন iOS এ এটি একটি মেয়াদ শেষের তারিখ হিসাবে সেট করা হয়, কারণ প্রতিটি প্ল্যাটফর্ম মান সামান্য ভিন্নভাবে-উদাহরণস্বরূপ, সময় টু লাইভ Android এর উপর সেকেন্ডের মধ্যে একটি মেয়াদ শেষ হওয়ার সময় যেমন সেট করা হয় ব্যাখ্যা করা হতে পারে।

উদাহরণ: রঙ এবং আইকন বিকল্প সহ বিজ্ঞপ্তি বার্তা

এই উদাহরণ পাঠানোর অনুরোধ সমস্ত প্ল্যাটফর্মে একটি সাধারণ বিজ্ঞপ্তি শিরোনাম এবং সামগ্রী প্রেরণ করে, তবে এটি অ্যান্ড্রয়েড ডিভাইসগুলিতে কিছু প্ল্যাটফর্ম-নির্দিষ্ট ওভাররাইড পাঠায়।

অ্যান্ড্রয়েডের জন্য, অনুরোধটি অ্যান্ড্রয়েড ডিভাইসে প্রদর্শনের জন্য একটি বিশেষ আইকন এবং রঙ সেট করে। হিসাবে রেফারেন্স উল্লেখ AndroidNotification , রঙ #rrggbb বিন্যাস উল্লেখ করা হয়, এবং ইমেজ একটি অঙ্কনযোগ্য আইকন রিসোর্স Android অ্যাপ্লিকেশান স্থানীয় হওয়া আবশ্যক।

এখানে একটি ব্যবহারকারীর ডিভাইসে চাক্ষুষ প্রভাব একটি আনুমানিক:

দুটি ডিভাইসের সহজ অঙ্কন, একটি কাস্টম আইকন এবং রঙ প্রদর্শন করে

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

জাভা

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

পাইথন

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',
)

যাওয়া

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

সি#

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

বিশ্রাম

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

দেখুন HTTP- র v1 এ রেফারেন্স ডকুমেন্টেশন বার্তার মূল অংশে কী প্ল্যাটফর্ম-নির্দিষ্ট ব্লক পাওয়া সম্পূর্ণ বিবরণের জন্য।

উদাহরণ: একটি কাস্টম ইমেজ সহ বিজ্ঞপ্তি বার্তা

নিচের উদাহরণ পাঠানোর অনুরোধ সব প্ল্যাটফর্মে একটি সাধারণ বিজ্ঞপ্তি শিরোনাম পাঠায়, কিন্তু এটি একটি ছবিও পাঠায়। এখানে একটি ব্যবহারকারীর ডিভাইসে চাক্ষুষ প্রভাব একটি আনুমানিক:

একটি ডিসপ্লে বিজ্ঞপ্তিতে একটি ছবির সহজ অঙ্কন

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

বিশ্রাম

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

দেখুন HTTP- র v1 এ রেফারেন্স ডকুমেন্টেশন বার্তার মূল অংশে কী প্ল্যাটফর্ম-নির্দিষ্ট ব্লক পাওয়া সম্পূর্ণ বিবরণের জন্য।

উদাহরণ: একটি যুক্ত ক্লিক অ্যাকশন সহ বিজ্ঞপ্তি বার্তা

নিম্নোক্ত উদাহরণ পাঠানোর অনুরোধ সমস্ত প্ল্যাটফর্মে একটি সাধারণ বিজ্ঞপ্তি শিরোনাম পাঠায়, তবে এটি বিজ্ঞপ্তির সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহারকারীর প্রতিক্রিয়ায় অ্যাপ্লিকেশনের জন্য একটি কর্মও পাঠায়। এখানে একটি ব্যবহারকারীর ডিভাইসে চাক্ষুষ প্রভাব একটি আনুমানিক:

একটি ওয়েব পেজ খোলার একটি ব্যবহারকারীর সহজ অঙ্কন

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

বিশ্রাম

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

দেখুন HTTP- র v1 এ রেফারেন্স ডকুমেন্টেশন বার্তার মূল অংশে কী প্ল্যাটফর্ম-নির্দিষ্ট ব্লক পাওয়া সম্পূর্ণ বিবরণের জন্য।

উদাহরণ: স্থানীয়করণ বিকল্প সহ বিজ্ঞপ্তি বার্তা

নিম্নোক্ত উদাহরণ পাঠান অনুরোধ পাঠান স্থানীয়করণের বার্তা প্রদর্শন করার জন্য ক্লায়েন্টের জন্য স্থানীয়করণ বিকল্প পাঠায়। এখানে একটি ব্যবহারকারীর ডিভাইসে চাক্ষুষ প্রভাব একটি আনুমানিক:

ইংরেজি এবং স্প্যানিশ ভাষায় পাঠ্য প্রদর্শনকারী দুটি ডিভাইসের সহজ অঙ্কন

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

বিশ্রাম

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

দেখুন HTTP- র v1 এ রেফারেন্স ডকুমেন্টেশন বার্তার মূল অংশে কী প্ল্যাটফর্ম-নির্দিষ্ট ব্লক পাওয়া সম্পূর্ণ বিবরণের জন্য।

প্রশাসক ত্রুটি কোড

নিচের টেবিলে ফায়ারবেস অ্যাডমিন FCM API ত্রুটি কোড এবং তাদের বর্ণনা সহ প্রস্তাবিত রেজোলিউশন ধাপগুলি তালিকাভুক্ত করা হয়েছে।

ভুল সংকেত বর্ণনা এবং রেজল্যুশন ধাপ
messaging/invalid-argument একটি FCM পদ্ধতিতে একটি অবৈধ যুক্তি প্রদান করা হয়েছিল। ত্রুটি বার্তায় অতিরিক্ত তথ্য থাকা উচিত।
messaging/invalid-recipient উদ্দেশ্যপ্রাপ্ত বার্তা প্রাপক অবৈধ ত্রুটি বার্তায় অতিরিক্ত তথ্য থাকা উচিত।
messaging/invalid-payload একটি অবৈধ বার্তা পেলোড বস্তু প্রদান করা হয়েছিল। ত্রুটি বার্তায় অতিরিক্ত তথ্য থাকা উচিত।
messaging/invalid-data-payload-key ডেটা বার্তার প্লেলোডে একটি অবৈধ কী রয়েছে। জন্য রেফারেন্স ডকুমেন্টেশন দেখুন DataMessagePayload সীমাবদ্ধ কী জন্য।
messaging/payload-size-limit-exceeded প্রদত্ত বার্তা পেলোড FCM আকার সীমা অতিক্রম করেছে। সর্বাধিক বার্তার জন্য সীমা 4096 বাইট। বিষয়গুলিতে পাঠানো বার্তার জন্য, সীমা 2048 বাইট। মোট পেলোড আকারে কী এবং মান উভয়ই অন্তর্ভুক্ত রয়েছে।
messaging/invalid-options একটি অবৈধ বার্তা বিকল্প বস্তু প্রদান করা হয়েছিল। ত্রুটি বার্তায় অতিরিক্ত তথ্য থাকা উচিত।
messaging/invalid-registration-token অবৈধ নিবন্ধন টোকেন প্রদান করা হয়েছে। নিশ্চিত করুন যে এটি ক্লায়েন্ট অ্যাপটি এফসিএম -এ নিবন্ধন করার সময় প্রাপ্ত রেজিস্ট্রেশন টোকেনের সাথে মেলে। এতে কাটবেন না বা এতে অতিরিক্ত অক্ষর যুক্ত করবেন না।
messaging/registration-token-not-registered প্রদত্ত নিবন্ধন টোকেন নিবন্ধিত নয়। পূর্বে বৈধ নিবন্ধন টোকেন বিভিন্ন কারণে অনিবন্ধিত হতে পারে, যার মধ্যে রয়েছে:
  • ক্লায়েন্ট অ্যাপটি FCM থেকে নিজেকে অনিবন্ধিত করেছে।
  • ক্লায়েন্ট অ্যাপটি স্বয়ংক্রিয়ভাবে অনিবন্ধিত ছিল। এটি ঘটতে পারে যদি ব্যবহারকারী অ্যাপ্লিকেশনটি আনইনস্টল করে অথবা iOS এ, যদি APNs ফিডব্যাক সার্ভিস APNs টোকেনটিকে অবৈধ বলে রিপোর্ট করে।
  • রেজিস্ট্রেশন টোকেনের মেয়াদ শেষ হয়ে গেছে। উদাহরণস্বরূপ, Google রেজিস্ট্রেশন টোকেন রিফ্রেশ করার সিদ্ধান্ত নিতে পারে অথবা iOS ডিভাইসের জন্য APNs টোকেনের মেয়াদ শেষ হয়ে যেতে পারে।
  • ক্লায়েন্ট অ্যাপটি আপডেট করা হয়েছিল, কিন্তু নতুন সংস্করণটি বার্তা পাওয়ার জন্য কনফিগার করা হয়নি।
এই সমস্ত ক্ষেত্রে, এই নিবন্ধন টোকেনটি সরান এবং বার্তা পাঠানোর জন্য এটি ব্যবহার বন্ধ করুন।
messaging/invalid-package-name বার্তাটি একটি নিবন্ধন টোকেন যার প্যাকেজের নাম এটি মেলে না ঠিকানায় এসেছিল restrictedPackageName বিকল্প।
messaging/message-rate-exceeded একটি নির্দিষ্ট লক্ষ্যে বার্তার হার খুব বেশি। এই ডিভাইস বা বিষয়ে পাঠানো বার্তার সংখ্যা হ্রাস করুন এবং অবিলম্বে এই লক্ষ্যে পাঠানোর চেষ্টা করবেন না।
messaging/device-message-rate-exceeded একটি নির্দিষ্ট ডিভাইসে বার্তার হার খুব বেশি। এই ডিভাইসে পাঠানো বার্তার সংখ্যা হ্রাস করুন এবং অবিলম্বে এই ডিভাইসে পাঠানোর চেষ্টা করবেন না।
messaging/topics-message-rate-exceeded একটি নির্দিষ্ট বিষয়ে গ্রাহকদের কাছে বার্তার হার খুব বেশি। এই বিষয়ের জন্য পাঠানো বার্তার সংখ্যা হ্রাস করুন এবং অবিলম্বে এই বিষয়ে পাঠানোর চেষ্টা করবেন না।
messaging/too-many-topics একটি নিবন্ধন টোকেন সর্বাধিক সংখ্যক বিষয়গুলিতে সাবস্ক্রাইব করা হয়েছে এবং এর বেশি সাবস্ক্রাইব করা যাবে না।
messaging/invalid-apns-credentials একটি iOS ডিভাইস লক্ষ্য করে একটি বার্তা পাঠানো যায়নি কারণ প্রয়োজনীয় APNs SSL সার্টিফিকেট আপলোড করা হয়নি বা মেয়াদ শেষ হয়ে গেছে। আপনার বিকাশ এবং উত্পাদন শংসাপত্রগুলির বৈধতা পরীক্ষা করুন।
messaging/mismatched-credential এই এসডিকে প্রমাণীকরণের জন্য ব্যবহৃত শংসাপত্রটি প্রদত্ত নিবন্ধন টোকেনের সাথে সংশ্লিষ্ট ডিভাইসে বার্তা পাঠানোর অনুমতি নেই। নিশ্চিত করুন যে শংসাপত্র এবং নিবন্ধন টোকেন উভয়ই একই ফায়ারবেস প্রকল্পের অন্তর্গত। দেখুন আপনার অ্যাপ্লিকেশানে Firebase যোগ করুন কিভাবে Firebase এডমিন SDK আছে প্রমাণীকৃত করতে উপর ডকুমেন্টেশন জন্য।
messaging/authentication-error SDK FCM সার্ভারে প্রমাণীকরণ করতে পারেনি। নিশ্চিত করুন যে আপনি ফায়ারবেস অ্যাডমিন এসডিকে একটি শংসাপত্রের সাথে প্রমাণ করেছেন যা FCM বার্তা পাঠানোর যথাযথ অনুমতি রয়েছে। দেখুন আপনার অ্যাপ্লিকেশানে Firebase যোগ করুন কিভাবে Firebase এডমিন SDK আছে প্রমাণীকৃত করতে উপর ডকুমেন্টেশন জন্য।
messaging/server-unavailable FCM সার্ভার সময়মত অনুরোধ প্রক্রিয়া করতে পারেনি। আপনি একই অনুরোধ পুনরায় চেষ্টা করা উচিত, কিন্তু আপনি অবশ্যই:
  • অনার Retry-After হেডার এটা FCM সংযোগ সার্ভারের প্রতিক্রিয়াতে মধ্যে অন্তর্ভুক্ত করা হয় পারেন।
  • আপনার পুনরায় চেষ্টা করার পদ্ধতিতে সূচকীয় ব্যাক-অফ প্রয়োগ করুন। উদাহরণস্বরূপ, যদি আপনি প্রথম পুনরায় চেষ্টা করার আগে এক সেকেন্ড অপেক্ষা করেন, তাহলে পরেরটির অন্তত দুই সেকেন্ড অপেক্ষা করুন, তারপর চার সেকেন্ড, ইত্যাদি। আপনি যদি একাধিক বার্তা পাঠাচ্ছেন, তবে একই সাথে সমস্ত বার্তার জন্য একটি নতুন অনুরোধ জারি করা এড়াতে অতিরিক্ত র্যান্ডম পরিমাণে প্রতিটিকে স্বাধীনভাবে বিলম্ব করুন।
যেসব প্রেরক সমস্যা সৃষ্টি করে তাদের কালো তালিকাভুক্ত হওয়ার ঝুঁকি থাকে।
messaging/internal-error অনুরোধ প্রক্রিয়া করার সময় FCM সার্ভার একটি ত্রুটির সম্মুখীন হয়েছে। আপনি তালিকাভুক্ত প্রয়োজনীয়তা নিম্নলিখিত একই অনুরোধ পুনরায় চেষ্টা করতে পারে messaging/server-unavailable উপরে সারি। যদি ত্রুটি থেকে যায়, আমাদের সমস্যা রিপোর্ট করুন বাগ রিপোর্ট সমর্থন চ্যানেল।
messaging/unknown-error একটি অজানা সার্ভার ত্রুটি ফেরত দেওয়া হয়েছে। আরো বিস্তারিত জানার জন্য ত্রুটি বার্তায় কাঁচা সার্ভারের প্রতিক্রিয়া দেখুন। আপনি এই ত্রুটিটি পান, আমাদের পূর্ণ ত্রুটি বার্তা রিপোর্ট করুন বাগ রিপোর্ট সমর্থন চ্যানেল।

লিগ্যাসি অ্যাপ সার্ভার প্রোটোকল ব্যবহার করে বার্তা পাঠান

আপনি যদি লিগ্যাসি প্রোটোকল ব্যবহার করতে পছন্দ করেন, তাহলে এই বিভাগে দেখানো বার্তা অনুরোধগুলি তৈরি করুন। মনে রাখবেন, যদি আপনি HTTP এর মাধ্যমে একাধিক প্ল্যাটফর্মে পাঠাচ্ছেন, v1 প্রোটোকল আপনার বার্তা অনুরোধগুলি সহজ করতে পারে।

নির্দিষ্ট ডিভাইসে বার্তা পাঠান

নির্দিষ্ট ডিভাইস বার্তা পাঠাতে, সেট to নিবন্ধন নির্দিষ্ট অ্যাপ্লিকেশন উদাহরণস্বরূপ টোকেনটি কী। নিবন্ধন টোকেন সম্পর্কে আরো জানতে আপনার প্ল্যাটফর্মের জন্য ক্লায়েন্ট সেটআপ তথ্য দেখুন।

HTTP পোস্ট অনুরোধ

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 প্রতিক্রিয়া

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

XMPP বার্তা

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

XMPP প্রতিক্রিয়া

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

XMPP সংযোগ সার্ভার প্রতিক্রিয়াগুলির জন্য কিছু অন্যান্য বিকল্প প্রদান করে। দেখুন সার্ভার প্রতিক্রিয়া বিন্যাস

উপলব্ধ ক্লায়েন্ট অ্যাপ্লিকেশানে স্রোতবরাবর বার্তা পাঠানোর বার্তা অপশনের পূর্ণ তালিকার জন্য, আপনার নির্বাচিত সংযোগ সার্ভার প্রোটোকল, জন্য রেফারেন্স তথ্য দেখতে HTTP- র বা পাওয়া XMPP

বিষয়গুলিতে বার্তা পাঠান

একটি Firebase ক্লাউড মেসেজিং বিষয়ের কাছে বার্তা প্রেরণ একটি পৃথক ডিভাইস বা একটি ব্যবহারকারী গোষ্ঠীতে বার্তা পাঠানোর অনুরূপ। অ্যাপ্লিকেশন সার্ভার সেট to মত একটি মান কী /topics/yourTopic । : ডেভেলপারগণ যেকোনো বিষয়ের নাম রেগুলার এক্সপ্রেশনের সাথে মেলে নির্বাচন করতে পারবেন "/topics/[a-zA-Z0-9-_.~%]+"

একাধিক বিষয় সমন্বয় পাঠাতে, অ্যাপ্লিকেশন সার্ভার সেট করতে হবে condition কী (পরিবর্তে to একটি বুলিয়ান শর্তে যে নির্দিষ্ট করে লক্ষ্য বিষয় চাবিকাঠি)। উদাহরণস্বরূপ, ডিভাইস এ সদস্যতা বার্তা পাঠাবে TopicA এবং হয় TopicB বা TopicC :

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

FCM প্রথমে বন্ধনীতে কোন শর্ত মূল্যায়ন করে, এবং তারপর বাম থেকে ডানে অভিব্যক্তি মূল্যায়ন করে। উপরের অভিব্যক্তিতে, কোনও ব্যবহারকারী যে কোনও একক বিষয়ে সাবস্ক্রাইব করেছেন তিনি বার্তাটি পান না। অনুরূপভাবে, যে ব্যবহারকারী TopicA- এ সাবস্ক্রাইব করে না সে বার্তা পায় না। এই সংমিশ্রণগুলি এটি গ্রহণ করে:

  • টপিকএ এবং টপিক বি
  • টপিকএ এবং টপিক সি

আপনি আপনার শর্তাধীন অভিব্যক্তিতে পাঁচটি বিষয় অন্তর্ভুক্ত করতে পারেন এবং বন্ধনী সমর্থিত। সমর্থিত অপারেটরদের: && , ||

বিষয় HTTP POST অনুরোধ

একটি একক বিষয়ে পাঠান:

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


"কুকুর" বা "বিড়াল" বিষয়গুলিতে সাবস্ক্রাইব করা ডিভাইসগুলিতে পাঠান:

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


বিষয় HTTP প্রতিক্রিয়া

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

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

বিষয় XMPP বার্তা

একটি একক বিষয়ে পাঠান:

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


  </gcm>
</message>

"কুকুর" বা "বিড়াল" বিষয়গুলিতে সাবস্ক্রাইব করা ডিভাইসগুলিতে পাঠান:

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


  </gcm>
</message>

বিষয় XMPP প্রতিক্রিয়া

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

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

এফসিএম সার্ভার অনুরোধ পাঠানোর বিষয়ে সাফল্য বা ব্যর্থতার উত্তর দেওয়ার আগে 30 সেকেন্ড পর্যন্ত বিলম্ব আশা করুন। অনুরোধ অনুসারে অ্যাপ সার্ভারের সময়সীমা মান সেট করতে ভুলবেন না।

ডিভাইস গ্রুপে বার্তা পাঠান

একটি ডিভাইস গ্রুপে বার্তা প্রেরণ একটি পৃথক ডিভাইসে বার্তা পাঠানোর অনুরূপ। সেট to ডিভাইস দলের জন্য অনন্য প্রজ্ঞাপন চাবি প্যারামিটার। দেখুন বার্তা ধরনের পে লোড সাপোর্টে বিস্তারিত জানার জন্য। এই পৃষ্ঠার উদাহরণগুলি দেখায় কিভাবে HTTP এবং XMPP প্রোটোকলে ডিভাইস গোষ্ঠীতে ডেটা বার্তা পাঠানো যায়।

ডিভাইস গ্রুপ HTTP পোস্ট অনুরোধ

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

ডিভাইস গ্রুপ HTTP রেসপন্স

এখানে "সফল" একটি উদাহরণ - notification_key এর সাথে জড়িত 2 নিবন্ধন টোকেন আছে, এবং বার্তাটি সফলভাবে তাদের উভয়ের পাঠিয়েছে:

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

এখানে "আংশিক সাফল্য" একটি উদাহরণ - notification_key 3 নিবন্ধন এটির সাথে সম্পর্কযুক্ত টোকেন হয়েছে। বার্তাটি সফলভাবে শুধুমাত্র নিবন্ধন টোকেনের 1 টিতে পাঠানো হয়েছিল। উত্তরের বার্তা তালিকা নিবন্ধন টোকেন ( registration_ids ) যে বার্তা পেতে ব্যর্থ হয়েছে:

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

কে একটি বার্তা এক বা রেজিস্ট্রেশনের আরো একটি সঙ্গে যুক্ত টোকেন সরবরাহ করা ব্যর্থ হলে notification_key , অ্যাপ্লিকেশন সার্ভার চেষ্টার মধ্যে backoff সঙ্গে পুনরায় চেষ্টা করা উচিত নয়।

যদি সার্ভার কোন ডিভাইস গ্রুপে কোন মেসেজ পাঠানোর চেষ্টা করে যার কোন সদস্য নেই, সাড়া সাফল্য এবং 0 ব্যর্থতার সাথে নিম্নলিখিত মত দেখাচ্ছে:

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

ডিভাইস গ্রুপ XMPP বার্তা

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

ডিভাইস গ্রুপ XMPP প্রতিক্রিয়া

যখন গ্রুপের যেকোনো একটি ডিভাইসে বার্তাটি সফলভাবে পাঠানো হয়, তখন XMPP সংযোগ সার্ভার একটি ACK দিয়ে সাড়া দেয়। যদি গ্রুপের সমস্ত ডিভাইসে পাঠানো সমস্ত বার্তা ব্যর্থ হয়, XMPP সংযোগ সার্ভার একটি NACK দিয়ে সাড়া দেয়।

এখানে "সফল" একটি উদাহরণ - notification_key 3 নিবন্ধন এটির সাথে সম্পর্কযুক্ত টোকেন আছে, এবং বার্তাটি সফলভাবে তাদের সব পাঠানো হয়েছিল:

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

এখানে "আংশিক সাফল্য" একটি উদাহরণ - notification_key 3 নিবন্ধন এটির সাথে সম্পর্কযুক্ত টোকেন হয়েছে। বার্তাটি সফলভাবে শুধুমাত্র নিবন্ধন টোকেনের 1 টিতে পাঠানো হয়েছিল। প্রতিক্রিয়া বার্তা নিবন্ধন টোকেনগুলির তালিকা দেয় যা বার্তাটি পেতে ব্যর্থ হয়েছে:

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

যখন FCM কানেকশন সার্ভার গ্রুপের সকল ডিভাইসে ডেলিভারি দিতে ব্যর্থ হয়। অ্যাপ সার্ভার একটি ন্যাক রেসপন্স পাবে।

বার্তা অপশনের পূর্ণ তালিকার জন্য, আপনার নির্বাচিত সংযোগ সার্ভার প্রোটোকল, জন্য রেফারেন্স তথ্য দেখতে HTTP- র বা পাওয়া XMPP

Firebase অ্যাডমিন SDK উত্তরাধিকার পাঠানোর পদ্ধতি

Firebase এডমিন Node.js SDK এর (FCM) উপর ভিত্তি করে বার্তা পাঠানোর জন্য পদ্ধতি সমর্থন উত্তরাধিকার FCM সার্ভার API । এই পদ্ধতির তুলনায় বিভিন্ন আর্গুমেন্ট গ্রহণ send() পদ্ধতি। আপনি ব্যবহার করা উচিত send() পদ্ধতি যখনই সম্ভব, এবং শুধুমাত্র পদ্ধতি এই পৃষ্ঠার বর্ণিত যখন পৃথক ডিভাইস বা যন্ত্র গোষ্ঠীতে বার্তা পাঠানোর ব্যবহার করুন।

পৃথক ডিভাইসে পাঠান

আপনি একটি রেজিস্ট্রেশন টোকেন প্রেরণ করতে পারেন sendToDevice() ডিভাইসে একটি বার্তা পাঠাতে পদ্ধতি:

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() পদ্ধতি এছাড়াও (যে, একাধিক ডিভাইসে একটি বার্তা) একটি মাল্টিকাস্ট বার্তা পাঠাতে পারি ক্ষণস্থায়ী রেজিস্ট্রেশনের একটি অ্যারের পরিবর্তে কেবলমাত্র একটি নিবন্ধন টোকেন প্রতিক দ্বারা:

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() পদ্ধতি একটি প্রতিশ্রুতি যে একটি সঙ্গে সমাধান করা ফেরৎ MessagingDevicesResponse FCM প্রতিক্রিয়াতে ধারণকারী অবজেক্ট। একটি একক নিবন্ধন টোকেন বা নিবন্ধন টোকেনের একটি অ্যারে পাস করার সময় রিটার্ন টাইপের একই বিন্যাস রয়েছে।

কিছু ক্ষেত্রে যেমন একটি প্রমাণীকরণ ত্রুটি বা হার সীমাবদ্ধ করার ফলে বার্তাটির সম্পূর্ণতা প্রক্রিয়া করতে ব্যর্থ হয়। এইসব ক্ষেত্রে, প্রতিশ্রুতি দ্বারা ফিরে sendToDevice() একটি ত্রুটির কথা প্রত্যাখ্যাত হয়। বিবরণ এবং রেজল্যুশন পদক্ষেপ সহ ত্রুটি কোড, একটি পূর্ণ তালিকার জন্য, দেখুন এডমিন FCM এপিআই ত্রুটি

একটি ডিভাইস গ্রুপে পাঠান

ডিভাইস গ্রুপ মেসেজিং আপনাকে একক গ্রুপে একাধিক ডিভাইস যুক্ত করতে দেয়। এটি টপিক মেসেজিং এর অনুরূপ, কিন্তু গ্রুপ মেম্বারশিপ শুধুমাত্র আপনার সার্ভার দ্বারা পরিচালিত হয় তা নিশ্চিত করার জন্য প্রমাণীকরণ অন্তর্ভুক্ত। উদাহরণস্বরূপ, যদি আপনি বিভিন্ন ফোন মডেলগুলিতে বিভিন্ন বার্তা পাঠাতে চান, আপনার সার্ভারগুলি উপযুক্ত গোষ্ঠীতে নিবন্ধন যোগ/অপসারণ করতে পারে এবং প্রতিটি গোষ্ঠীতে উপযুক্ত বার্তা পাঠাতে পারে। ডিভাইস গ্রুপ মেসেজিং টপিক মেসেজিং থেকে আলাদা যে এতে সরাসরি আপনার অ্যাপ্লিকেশনের মধ্যে পরিবর্তে আপনার সার্ভার থেকে ডিভাইস গ্রুপ পরিচালনা করা জড়িত।

আপনি উত্তরাধিকার মাধ্যমে ডিভাইস গ্রুপ মেসেজিং ব্যবহার করতে পারেন পাওয়া XMPP বা HTTP- র প্রোটোকল আপনার অ্যাপ সার্ভারে। Node.js জন্য Firebase এডমিন SDK এর উত্তরাধিকার প্রোটোকল এছাড়াও ডিভাইস গ্রুপ বার্তার সক্ষমতা প্রদান উপর ভিত্তি করে। একটি বিজ্ঞপ্তি কী -এর জন্য অনুমোদিত সর্বোচ্চ সদস্য সংখ্যা 20।

আপনি একটি অ্যাপ সার্ভার বা একটি অ্যান্ড্রয়েড ক্লায়েন্টের মাধ্যমে ডিভাইস গ্রুপ তৈরি করতে এবং বিজ্ঞপ্তি কী তৈরি করতে পারেন। দেখুন ডিভাইস গোষ্ঠীগুলি ম্যানেজিং বিস্তারিত জানার জন্য।

sendToDeviceGroup() পদ্ধতি আপনি যে ডিভাইসটি দলের জন্য প্রজ্ঞাপন কী নির্দিষ্ট করে একটি ডিভাইস গ্রুপে একটি বার্তা পাঠাতে অনুমতি দেয়:

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() পদ্ধতি একটি প্রতিশ্রুতি যে একটি সঙ্গে সমাধান করা ফেরৎ MessagingDeviceGroupResponse FCM প্রতিক্রিয়াতে ধারণকারী অবজেক্ট।

কিছু ক্ষেত্রে যেমন একটি প্রমাণীকরণ ত্রুটি বা হার সীমাবদ্ধ করার ফলে বার্তাটির সম্পূর্ণতা প্রক্রিয়া করতে ব্যর্থ হয়। এইসব ক্ষেত্রে, প্রতিশ্রুতি দ্বারা ফিরে sendToDeviceGroup() একটি ত্রুটির কথা প্রত্যাখ্যাত হয়। বিবরণ এবং রেজল্যুশন পদক্ষেপ সহ ত্রুটি কোড, একটি পূর্ণ তালিকার জন্য, দেখুন এডমিন FCM এপিআই ত্রুটি

বার্তা পেলোড সংজ্ঞায়িত করা

উপরে FCM উত্তরাধিকার প্রোটোকল ভিত্তিক পদ্ধতিসমূহ তাদের দ্বিতীয় আর্গুমেন্ট হিসাবে একটি বার্তা পে লোড গ্রহণ এবং উভয় সমর্থন বিজ্ঞপ্তি এবং ডেটা বার্তা । আপনার সাথে একটি বস্তুর তৈরি করে এক বা উভয় বার্তা ধরনের নির্দিষ্ট করতে পারেন data এবং / অথবা notification কি। উদাহরণস্বরূপ, এখানে কিভাবে বিভিন্ন ধরনের বার্তা পেলোড সংজ্ঞায়িত করা যায়:

বিজ্ঞপ্তি বার্তা

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.'
  }
};

ডেটা বার্তা

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

সম্মিলিত বার্তা

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'
  }
};

বিজ্ঞপ্তি বার্তা পেলোডগুলিতে বৈধ বৈশিষ্ট্যগুলির একটি পূর্বনির্ধারিত উপসেট রয়েছে এবং আপনি কোন মোবাইল অপারেটিং সিস্টেমকে লক্ষ্য করছেন তার উপর নির্ভর করে কিছুটা ভিন্ন। জন্য রেফারেন্স ডক্স দেখুন NotificationMessagePayload সম্পূর্ণ তালিকা জন্য।

ডেটা মেসেজ পেলোডগুলি কাস্টম কী-ভ্যালু জোড়া দিয়ে গঠিত যা কিছু সীমাবদ্ধতা সহ, সমস্ত মান স্ট্রিং হওয়া আবশ্যক। জন্য রেফারেন্স ডক্স দেখুন DataMessagePayload বিধিনিষেধ একটি পূর্ণ তালিকার জন্য।

বার্তার বিকল্পগুলি সংজ্ঞায়িত করা

FCM উত্তরাধিকার প্রোটোকলের উপর ভিত্তি করে উপরের পদ্ধতিগুলি বার্তার জন্য কিছু বিকল্প নির্দিষ্ট করে একটি alচ্ছিক তৃতীয় যুক্তি গ্রহণ করে। উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি একটি ডিভাইসে একটি উচ্চ অগ্রাধিকার বার্তা পাঠায় যা 24 ঘন্টা পরে মেয়াদ শেষ হয়ে যায়:

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

জন্য রেফারেন্স ডক্স দেখুন MessagingOptions উপলব্ধ অপশন সম্পূর্ণ তালিকা জন্য।