অ্যাপ সার্ভার তৈরি করুন অনুরোধ পাঠান

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

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

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

ফায়ারবেস অ্যাডমিন SDK (যেটিতে Node , Java , Python , C# , এবং Go এর জন্য সমর্থন রয়েছে) এবং 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.
getMessaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

জাভা

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

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

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

পাইথন

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

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

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

যাওয়া

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

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

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

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

সি#

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

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

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

বিশ্রাম

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

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

REST API এবং অ্যাডমিন FCM APIগুলি আপনাকে ডিভাইস রেজিস্ট্রেশন টোকেনগুলির একটি তালিকায় একটি বার্তা মাল্টিকাস্ট করার অনুমতি দেয়৷ আপনি প্রতি আহ্বানের জন্য 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,
};

getMessaging().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 500 registration tokens.
// This registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}
message := &messaging.MulticastMessage{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Tokens: registrationTokens,
}

br, err := client.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() API ব্যবহার করে, যেমন উদাহরণে দেখানো হয়েছে। রিটার্ন মান হল একটি 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,
};

getMessaging().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 500 registration tokens.
// This registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}
message := &messaging.MulticastMessage{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Tokens: registrationTokens,
}

br, err := client.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.
getMessaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

জাভা

// 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.
getMessaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

জাভা

// 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 এবং অ্যাডমিন SDK ব্যাচে বার্তা পাঠানো সমর্থন করে। আপনি একটি একক ব্যাচে 500টি বার্তা পর্যন্ত গোষ্ঠীবদ্ধ করতে পারেন এবং প্রতিটি বার্তার জন্য পৃথক HTTP অনুরোধ পাঠানোর তুলনায় উল্লেখযোগ্য কর্মক্ষমতা উন্নতি সহ একটি একক API কলে সেগুলি পাঠাতে পারেন।

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

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

getMessaging().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 500 messages.
messages := []*messaging.Message{
	{
		Notification: &messaging.Notification{
			Title: "Price drop",
			Body:  "5% off all electronics",
		},
		Token: registrationToken,
	},
	{
		Notification: &messaging.Notification{
			Title: "Price drop",
			Body:  "2% off all books",
		},
		Topic: "readers-club",
	},
}

br, err := client.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 -প্রতিক্রিয়াটি জিজ্ঞাসা করতে পারেন। এটি প্রতিক্রিয়াগুলির একটি তালিকাও প্রকাশ করে যা পৃথক বার্তাগুলির অবস্থা পরীক্ষা করতে ব্যবহার করা যেতে পারে। প্রতিক্রিয়াগুলির ক্রম ইনপুট তালিকার বার্তাগুলির ক্রম অনুসারে।

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

আপনি 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 , শুধুমাত্র নির্দিষ্ট প্ল্যাটফর্মে চলমান অ্যাপের উদাহরণ দ্বারা ব্যাখ্যা করা হয়।

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

কখন সাধারণ ক্ষেত্র ব্যবহার করবেন

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

  • অ্যাপল, অ্যান্ড্রয়েড, এবং ওয়েব - সমস্ত প্ল্যাটফর্মে লক্ষ্য করা অ্যাপের উদাহরণ
  • বিষয় বার্তা পাঠানো

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

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

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

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

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

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

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

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

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

এখানে একজন ব্যবহারকারীর ডিভাইসে ভিজ্যুয়াল এফেক্টের একটি আনুমানিক ধারণা রয়েছে:

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

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

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

জাভা

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

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

বিশ্রাম

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

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

বিশ্রাম

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

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

বিশ্রাম

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 রেফারেন্স ডকুমেন্টেশন দেখুন।

অ্যাডমিন ত্রুটি কোড

নিম্নলিখিত সারণীতে Firebase অ্যাডমিন 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 অবৈধ নিবন্ধন টোকেন প্রদান করা হয়েছে. নিশ্চিত করুন যে এটি FCM-এর সাথে নিবন্ধন করার সময় ক্লায়েন্ট অ্যাপটি প্রাপ্ত নিবন্ধন টোকেনের সাথে মেলে। ছেঁটে ফেলবেন না বা এতে অতিরিক্ত অক্ষর যোগ করবেন না।
messaging/registration-token-not-registered প্রদত্ত নিবন্ধন টোকেন নিবন্ধিত নয়। একটি পূর্বে বৈধ নিবন্ধন টোকেন বিভিন্ন কারণে অনিবন্ধিত হতে পারে, যার মধ্যে রয়েছে:
  • ক্লায়েন্ট অ্যাপটি FCM থেকে নিজেকে নিবন্ধনমুক্ত করেছে।
  • ক্লায়েন্ট অ্যাপটি স্বয়ংক্রিয়ভাবে নিবন্ধনমুক্ত ছিল। এটি ঘটতে পারে যদি ব্যবহারকারী অ্যাপ্লিকেশনটি আনইনস্টল করেন বা, Apple প্ল্যাটফর্মে, যদি APNs ফিডব্যাক পরিষেবা APNs টোকেনটিকে অবৈধ হিসাবে রিপোর্ট করে।
  • নিবন্ধন টোকেন মেয়াদ শেষ. উদাহরণস্বরূপ, Google রেজিস্ট্রেশন টোকেন রিফ্রেশ করার সিদ্ধান্ত নিতে পারে বা Apple ডিভাইসগুলির জন্য APN টোকেনের মেয়াদ শেষ হয়ে যেতে পারে।
  • ক্লায়েন্ট অ্যাপটি আপডেট করা হয়েছে, কিন্তু নতুন সংস্করণটি বার্তা পাওয়ার জন্য কনফিগার করা হয়নি।
এই সমস্ত ক্ষেত্রে, এই নিবন্ধন টোকেনটি সরান এবং বার্তা পাঠানোর জন্য এটি ব্যবহার করা বন্ধ করুন৷
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 একটি Apple ডিভাইসে লক্ষ্য করা একটি বার্তা পাঠানো যায়নি কারণ প্রয়োজনীয় APNs SSL শংসাপত্র আপলোড করা হয়নি বা মেয়াদ শেষ হয়ে গেছে৷ আপনার উন্নয়ন এবং উত্পাদন শংসাপত্রের বৈধতা পরীক্ষা করুন.
messaging/mismatched-credential এই SDK প্রমাণীকরণের জন্য ব্যবহৃত শংসাপত্রের প্রদত্ত রেজিস্ট্রেশন টোকেনের সাথে সংশ্লিষ্ট ডিভাইসে বার্তা পাঠানোর অনুমতি নেই। নিশ্চিত করুন যে শংসাপত্র এবং নিবন্ধন টোকেন উভয়ই একই Firebase প্রকল্পের অন্তর্গত। কিভাবে Firebase অ্যাডমিন SDK গুলিকে প্রমাণীকরণ করতে হয় তার ডকুমেন্টেশনের জন্য আপনার অ্যাপে Firebase যোগ করুন দেখুন।
messaging/authentication-error SDK FCM সার্ভারে প্রমাণীকরণ করতে পারেনি৷ নিশ্চিত করুন যে আপনি একটি শংসাপত্র সহ Firebase অ্যাডমিন SDK প্রমাণীকরণ করেছেন যাতে FCM বার্তা পাঠানোর উপযুক্ত অনুমতি রয়েছে৷ কিভাবে Firebase অ্যাডমিন SDK গুলিকে প্রমাণীকরণ করতে হয় তার ডকুমেন্টেশনের জন্য আপনার অ্যাপে Firebase যোগ করুন দেখুন।
messaging/server-unavailable FCM সার্ভার সময়মত অনুরোধ প্রক্রিয়া করতে পারেনি৷ আপনি একই অনুরোধ পুনরায় চেষ্টা করা উচিত, কিন্তু আপনি অবশ্যই:
  • Retry-After সম্মান করুন যদি এটি FCM সংযোগ সার্ভারের প্রতিক্রিয়াতে অন্তর্ভুক্ত থাকে।
  • আপনার পুনরায় চেষ্টা করার পদ্ধতিতে সূচকীয় ব্যাক-অফ প্রয়োগ করুন। উদাহরণস্বরূপ, আপনি যদি প্রথম পুনঃপ্রচেষ্টার আগে এক সেকেন্ড অপেক্ষা করেন, তাহলে পরেরটির আগে কমপক্ষে দুই সেকেন্ড অপেক্ষা করুন, তারপরে চার সেকেন্ড, ইত্যাদি। আপনি যদি একাধিক বার্তা পাঠান, একই সময়ে সমস্ত বার্তার জন্য একটি নতুন অনুরোধ জারি করা এড়াতে প্রতিটিকে একটি অতিরিক্ত র্যান্ডম পরিমাণে স্বাধীনভাবে বিলম্বিত করুন।
যেসব প্রেরক সমস্যা সৃষ্টি করে তাদের কালো তালিকাভুক্ত হওয়ার ঝুঁকি থাকে।
messaging/internal-error অনুরোধটি প্রক্রিয়া করার চেষ্টা করার সময় FCM সার্ভার একটি ত্রুটির সম্মুখীন হয়েছে৷ উপরের messaging/server-unavailable সারিতে তালিকাভুক্ত প্রয়োজনীয়তাগুলি অনুসরণ করে আপনি একই অনুরোধটি পুনরায় চেষ্টা করতে পারেন। ত্রুটি অব্যাহত থাকলে, আমাদের বাগ রিপোর্ট সমর্থন চ্যানেলে সমস্যাটি রিপোর্ট করুন।
messaging/unknown-error একটি অজানা সার্ভার ত্রুটি ফিরে এসেছে. আরও বিশদ বিবরণের জন্য ত্রুটি বার্তায় কাঁচা সার্ভার প্রতিক্রিয়া দেখুন। আপনি যদি এই ত্রুটিটি পান, দয়া করে সম্পূর্ণ ত্রুটি বার্তাটি আমাদের বাগ রিপোর্ট সমর্থন চ্যানেলে রিপোর্ট করুন৷

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

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

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

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

HTTP POST অনুরোধ

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- এর জন্য রেফারেন্স তথ্য দেখুন।

বিষয় বার্তা পাঠান

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

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

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

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

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

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

বিষয় 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"
}

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

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

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

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

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 এর সাথে যুক্ত এক বা একাধিক নিবন্ধন টোকেনে একটি বার্তা বিতরণ করতে ব্যর্থ হয়, তখন অ্যাপ সার্ভারের পুনরায় চেষ্টার মধ্যে ব্যাকঅফের সাথে পুনরায় চেষ্টা করা উচিত।

যদি সার্ভার কোনো সদস্য নেই এমন একটি ডিভাইস গ্রুপে একটি বার্তা পাঠানোর চেষ্টা করে, তাহলে প্রতিক্রিয়াটি 0 সাফল্য এবং 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 Admin Node.js SDK লিগ্যাসি FCM সার্ভার API- এর উপর ভিত্তি করে (FCM) বার্তা পাঠানোর পদ্ধতিগুলিকে সমর্থন করে৷ এই পদ্ধতিগুলি 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.
getMessaging().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.
getMessaging().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() পদ্ধতিটি একটি প্রতিশ্রুতি প্রদান করে যা FCM থেকে প্রতিক্রিয়া ধারণকারী একটি MessagingDevicesResponse অবজেক্টের সাথে সমাধান করা হয়। একটি একক রেজিস্ট্রেশন টোকেন বা রেজিস্ট্রেশন টোকেনগুলির একটি অ্যারে পাস করার সময় রিটার্ন টাইপের একই বিন্যাস থাকে।

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

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

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

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

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

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.
getMessaging().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() পদ্ধতি একটি প্রতিশ্রুতি প্রদান করে যা FCM থেকে প্রতিক্রিয়া ধারণকারী একটি MessagingDevicesResponse অবজেক্টের সাথে সমাধান করা হয়।

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

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

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 লিগ্যাসি প্রোটোকলের উপর ভিত্তি করে উপরের পদ্ধতিগুলি বার্তার জন্য কিছু বিকল্প নির্দিষ্ট করে একটি ঐচ্ছিক তৃতীয় আর্গুমেন্ট গ্রহণ করে। উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি একটি ডিভাইসে একটি উচ্চ অগ্রাধিকার বার্তা পাঠায় যা 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.
getMessaging().sendToDevice(registrationToken, payload, options)
  .then((response) => {
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

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