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

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

  • বিষয়ের নাম
  • অবস্থা
  • ডিভাইস নিবন্ধন টোকেন
  • ডিভাইস গ্রুপের নাম (শুধুমাত্র প্রোটোকল)

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

Firebase Admin 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 Admin SDK projects/{project_id}/messages/{message_id} ফর্ম্যাটে আইডি স্ট্রিং প্রদান করে। HTTP প্রোটোকল প্রতিক্রিয়া একটি একক JSON কী:

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

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

অ্যাডমিন FCM এপিআই আপনাকে ডিভাইস রেজিস্ট্রেশন টোকেনগুলির একটি তালিকায় একটি বার্তা মাল্টিকাস্ট করার অনুমতি দেয়। আপনি প্রতি আহ্বানের জন্য 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.SendEachForMulticastAsync(message);
// See the BatchResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} messages were sent successfully");

রিটার্ন মান হল টোকেনগুলির একটি তালিকা যা ইনপুট টোকেনের ক্রম অনুসারে। আপনি কোন টোকেনগুলির কারণে ত্রুটি হয়েছে তা পরীক্ষা করতে চাইলে এটি কার্যকর।

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.SendEachForMulticastAsync(message);
if (response.FailureCount > 0)
{
    var failedTokens = new List<string>();
    for (var i = 0; i < response.Responses.Count; i++)
    {
        if (!response.Responses[i].IsSuccess)
        {
            // The order of responses corresponds to the order of the registration tokens.
            failedTokens.Add(registrationTokens[i]);
        }
    }

    Console.WriteLine($"List of tokens that caused failures: {failedTokens}");
}

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

আপনি একটি বিষয় তৈরি করার পরে, হয় ক্লায়েন্ট সাইডের বিষয়ে বা সার্ভার 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

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

ডিভাইস গ্রুপে বার্তা পাঠাতে, HTTP v1 API ব্যবহার করুন। আপনি যদি বর্তমানে HTTP বা XMPP-এর জন্য অপ্রচলিত লিগ্যাসি সেন্ড API ব্যবহার করে ডিভাইস গোষ্ঠীতে পাঠাচ্ছেন, বা লিগ্যাসি প্রোটোকলের উপর ভিত্তি করে Node.js-এর জন্য Firebase Admin SDK এর যে কোনও পুরানো সংস্করণ, আমরা দৃঢ়ভাবে সুপারিশ করছি যে আপনি HTTP v1-এ স্থানান্তর করুন। যত তাড়াতাড়ি সম্ভব এপিআই । 2024 সালের জুনে লিগ্যাসি সেন্ড এপিআই নিষ্ক্রিয় এবং সরানো হবে।

একটি ডিভাইস গ্রুপে বার্তা পাঠানো একটি পৃথক ডিভাইসে বার্তা পাঠানোর অনুরূপ, একই পদ্ধতি ব্যবহার করে প্রেরণের অনুরোধ অনুমোদন করে ৷ গ্রুপ বিজ্ঞপ্তি কী token ক্ষেত্র সেট করুন:

বিশ্রাম

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":"APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ",
      "data":{
        "hello": "This is a Firebase Cloud Messaging device group message!"
      }
   }
}

cURL কমান্ড

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
   "data":{
     "hello": "This is a Firebase Cloud Messaging device group message!"
   },
   "token":"APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

বার্তা একটি ব্যাচ পাঠান

অ্যাডমিন 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.SendEachAsync(messages);
// See the BatchResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} messages were sent successfully");

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

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

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

বার্তার অনুরোধে অবশ্যই "direct_boot_ok" কী অন্তর্ভুক্ত করতে হবে : অনুরোধের অংশের AndroidConfig বিকল্পগুলিতে "direct_boot_ok" : true । যেমন:

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

HTTP v1 API-এর জন্য REST ত্রুটি কোড

HTTP v1 API-এর জন্য HTTP ত্রুটি প্রতিক্রিয়াগুলিতে একটি ত্রুটি কোড, একটি ত্রুটি বার্তা এবং ত্রুটির স্থিতি রয়েছে৷ এগুলিতে ত্রুটির আরও বিশদ বিবরণ সহ একটি details অ্যারে থাকতে পারে।

এখানে দুটি নমুনা ত্রুটি প্রতিক্রিয়া আছে:

উদাহরণ 1: একটি ডেটা বার্তায় একটি অবৈধ মান সহ HTTP v1 API অনুরোধ থেকে ত্রুটির প্রতিক্রিয়া৷

{
  "error": {
    "code": 400,
    "message": "Invalid value at 'message.data[0].value' (TYPE_STRING), 12",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "message.data[0].value",
            "description": "Invalid value at 'message.data[0].value' (TYPE_STRING), 12"
          }
        ]
      }
    ]
  }
}

উদাহরণ 2: একটি অবৈধ রেজিস্ট্রেশন টোকেন সহ HTTP v1 API অনুরোধ থেকে ত্রুটির প্রতিক্রিয়া

{
  "error": {
    "code": 400,
    "message": "The registration token is not a valid FCM registration token",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "INVALID_ARGUMENT"
      }
    ]
   }
}

মনে রাখবেন যে উভয় বার্তার কোড এবং স্থিতি একই, তবে বিবরণ অ্যারেতে বিভিন্ন ধরণের মান রয়েছে। প্রথম উদাহরণে type.googleapis.com/google.rpc.BadRequest টাইপ আছে যা অনুরোধের মানগুলিতে একটি ত্রুটি নির্দেশ করে৷ type.googleapis.com/google.firebase.fcm.v1.FcmError টাইপের দ্বিতীয় উদাহরণে একটি FCM নির্দিষ্ট ত্রুটি রয়েছে। অনেক ত্রুটির জন্য, বিশদ অ্যারেতে এমন তথ্য রয়েছে যা আপনাকে ডিবাগ করতে এবং একটি রেজোলিউশন খুঁজতে হবে।

নিম্নলিখিত সারণী FCM v1 REST API ত্রুটি কোড এবং তাদের বিবরণ তালিকাভুক্ত করে।

ত্রুটি কোড বর্ণনা এবং সমাধান পদক্ষেপ
UNSPECIFIED_ERROR এই ত্রুটি সম্পর্কে আর কোন তথ্য উপলব্ধ নেই৷ কোনোটিই নয়।
INVALID_ARGUMENT (HTTP ত্রুটি কোড = 400) অনুরোধের প্যারামিটারগুলি অবৈধ ছিল৷ কোন ক্ষেত্রটি অবৈধ ছিল তা নির্দিষ্ট করতে google.rpc.BadRequest টাইপের একটি এক্সটেনশন ফেরত দেওয়া হয়৷ সম্ভাব্য কারণগুলির মধ্যে রয়েছে অবৈধ নিবন্ধন, অবৈধ প্যাকেজের নাম, বার্তাটি খুব বড়, অবৈধ ডেটা কী, অবৈধ TTL বা অন্যান্য অবৈধ প্যারামিটার৷
অবৈধ রেজিস্ট্রেশন : আপনি সার্ভারে যে রেজিস্ট্রেশন টোকেন পাস করবেন তার ফরম্যাট চেক করুন। নিশ্চিত করুন যে এটি FCM এর সাথে নিবন্ধন করার সময় ক্লায়েন্ট অ্যাপটি প্রাপ্ত নিবন্ধন টোকেনের সাথে মেলে। টোকেন কাটবেন না বা অতিরিক্ত অক্ষর যোগ করবেন না।
অবৈধ প্যাকেজের নাম : নিশ্চিত করুন যে বার্তাটি একটি নিবন্ধন টোকেনে সম্বোধন করা হয়েছে যার প্যাকেজের নাম অনুরোধে পাস করা মানের সাথে মেলে।
বার্তাটি খুব বড় : একটি বার্তায় অন্তর্ভুক্ত পেলোড ডেটার মোট আকার FCM সীমা অতিক্রম না করে তা পরীক্ষা করুন: বেশিরভাগ বার্তার জন্য 4096 বাইট, বা বিষয়গুলিতে বার্তাগুলির ক্ষেত্রে 2048 বাইট৷ এটি কী এবং মান উভয়ই অন্তর্ভুক্ত করে।
অবৈধ ডেটা কী : চেক করুন যে পেলোড ডেটাতে কোনও কী (যেমন থেকে, বা জিসিএম, বা google দ্বারা প্রিফিক্স করা কোনও মান) নেই যা FCM দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত হয়৷ মনে রাখবেন কিছু শব্দ (যেমন collapse_key) FCM দ্বারাও ব্যবহার করা হয় কিন্তু পেলোডে অনুমোদিত, এই ক্ষেত্রে পেলোড মান FCM মান দ্বারা ওভাররাইড করা হবে।
অবৈধ TTL : চেক করুন যে ttl-এ ব্যবহৃত মানটি 0 এবং 2,419,200 (4 সপ্তাহ) এর মধ্যে সেকেন্ডে একটি পূর্ণসংখ্যা উপস্থাপন করে।
অবৈধ প্যারামিটার : প্রদত্ত পরামিতিগুলির সঠিক নাম এবং প্রকার আছে কিনা তা পরীক্ষা করুন৷
UNREGISTERED (HTTP ত্রুটি কোড = 404) অ্যাপ ইনস্ট্যান্স FCM থেকে নিবন্ধনহীন ছিল। এর মানে সাধারণত ব্যবহৃত টোকেন আর বৈধ নয় এবং একটি নতুন ব্যবহার করতে হবে। এই ত্রুটি অনুপস্থিত নিবন্ধন টোকেন, বা অনিবন্ধিত টোকেন দ্বারা সৃষ্ট হতে পারে.
অনুপস্থিত নিবন্ধন : যদি বার্তার লক্ষ্য একটি token মান হয়, তবে অনুরোধটিতে একটি নিবন্ধন টোকেন রয়েছে কিনা তা পরীক্ষা করুন।
নিবন্ধিত নয় : একটি বিদ্যমান নিবন্ধন টোকেন বেশ কয়েকটি পরিস্থিতিতে বৈধ হতে পারে না, যার মধ্যে রয়েছে:
- যদি ক্লায়েন্ট অ্যাপটি FCM-এর সাথে নিবন্ধন না করে।
- যদি ক্লায়েন্ট অ্যাপটি স্বয়ংক্রিয়ভাবে অনিবন্ধিত হয়, যা ঘটতে পারে যদি ব্যবহারকারী অ্যাপ্লিকেশনটি আনইনস্টল করে। উদাহরণস্বরূপ, iOS-এ, যদি APNs ফিডব্যাক পরিষেবা APNs টোকেনটিকে অবৈধ বলে রিপোর্ট করে।
- যদি রেজিস্ট্রেশন টোকেনের মেয়াদ শেষ হয়ে যায় (উদাহরণস্বরূপ, Google রেজিস্ট্রেশন টোকেন রিফ্রেশ করার সিদ্ধান্ত নিতে পারে বা iOS ডিভাইসের জন্য APNs টোকেনের মেয়াদ শেষ হয়ে গেছে)।
- যদি ক্লায়েন্ট অ্যাপটি আপডেট করা হয় কিন্তু নতুন সংস্করণটি বার্তা গ্রহণের জন্য কনফিগার করা না থাকে।
এই সমস্ত ক্ষেত্রে, অ্যাপ সার্ভার থেকে এই নিবন্ধন টোকেনটি সরান এবং বার্তা পাঠানোর জন্য এটি ব্যবহার করা বন্ধ করুন৷
SENDER_ID_MISMATCH (HTTP ত্রুটি কোড = 403) প্রমাণীকৃত প্রেরক আইডি নিবন্ধন টোকেনের জন্য প্রেরক আইডি থেকে আলাদা। একটি নিবন্ধন টোকেন প্রেরকদের একটি নির্দিষ্ট গোষ্ঠীর সাথে আবদ্ধ। যখন একটি ক্লায়েন্ট অ্যাপ FCM-এর জন্য নিবন্ধন করে, তখন এটি অবশ্যই উল্লেখ করবে যে কোন প্রেরকদের বার্তা পাঠানোর অনুমতি দেওয়া হয়েছে। ক্লায়েন্ট অ্যাপে বার্তা পাঠানোর সময় আপনার সেই প্রেরক আইডিগুলির মধ্যে একটি ব্যবহার করা উচিত। আপনি যদি অন্য প্রেরকের কাছে যান, বিদ্যমান নিবন্ধন টোকেনগুলি কাজ করবে না৷
QUOTA_EXCEEDED (HTTP ত্রুটি কোড = 429) বার্তা লক্ষ্যের জন্য প্রেরণের সীমা অতিক্রম করেছে৷ কোন কোটা অতিক্রম করেছে তা নির্দিষ্ট করতে google.rpc.QuotaFailure টাইপের একটি এক্সটেনশন ফেরত দেওয়া হয়। এই ত্রুটিটি বার্তা হারের কোটা অতিক্রম করে, ডিভাইসের বার্তা হারের কোটা অতিক্রম করে বা বিষয় বার্তা হারের কোটা অতিক্রম করার কারণে হতে পারে৷
বার্তার হার অতিক্রম করেছে : বার্তা পাঠানোর হার খুব বেশি। আপনি যে সামগ্রিক হারে বার্তা পাঠান তা আপনাকে অবশ্যই কমাতে হবে। প্রত্যাখ্যান করা বার্তাগুলি পুনরায় চেষ্টা করতে 1 মিনিটের ন্যূনতম প্রাথমিক বিলম্বের সাথে সূচকীয় ব্যাকঅফ ব্যবহার করুন৷
ডিভাইসের বার্তা হার অতিক্রম করেছে : একটি নির্দিষ্ট ডিভাইসে বার্তার হার খুব বেশি। একটি একক ডিভাইসে বার্তা হারের সীমা দেখুন । এই ডিভাইসে প্রেরিত বার্তার সংখ্যা হ্রাস করুন এবং পুনরায় পাঠানোর চেষ্টা করতে সূচকীয় ব্যাকঅফ ব্যবহার করুন৷
বিষয় বার্তার হার অতিক্রম করেছে : একটি নির্দিষ্ট বিষয়ের সদস্যদের কাছে বার্তার হার খুব বেশি৷ এই বিষয়ের জন্য প্রেরিত বার্তার সংখ্যা হ্রাস করুন এবং পুনরায় পাঠানোর চেষ্টা করতে 1 মিনিটের ন্যূনতম প্রাথমিক বিলম্বের সাথে সূচকীয় ব্যাকঅফ ব্যবহার করুন।
UNAVAILABLE (HTTP ত্রুটি কোড = 503) সার্ভারটি ওভারলোড হয়েছে৷ সার্ভার সময়মত অনুরোধ প্রক্রিয়া করতে পারেনি. একই অনুরোধ পুনরায় চেষ্টা করুন, কিন্তু আপনি অবশ্যই:
- Retry-After হেডারকে সম্মান করুন যদি এটি FCM সংযোগ সার্ভারের প্রতিক্রিয়াতে অন্তর্ভুক্ত থাকে।
- আপনার পুনরায় চেষ্টা করার পদ্ধতিতে সূচকীয় ব্যাক-অফ প্রয়োগ করুন। (যেমন আপনি যদি প্রথম পুনঃপ্রচেষ্টার আগে এক সেকেন্ড অপেক্ষা করেন, তাহলে পরেরটির আগে কমপক্ষে দুই সেকেন্ড অপেক্ষা করুন, তারপরে 4 সেকেন্ড এবং আরও অনেক কিছু)। আপনি যদি একাধিক বার্তা পাঠান, তাহলে ঝাঁকুনি প্রয়োগ করার কথা বিবেচনা করুন। আরও তথ্যের জন্য, হ্যান্ডলিং পুনরায় চেষ্টা দেখুন । যেসব প্রেরক সমস্যা সৃষ্টি করে তাদের অস্বীকৃত হওয়ার ঝুঁকি থাকে।
INTERNAL (HTTP ত্রুটি কোড = 500) একটি অজানা অভ্যন্তরীণ ত্রুটি ঘটেছে৷ অনুরোধটি প্রক্রিয়া করার চেষ্টা করার সময় সার্ভার একটি ত্রুটির সম্মুখীন হয়েছে৷ হ্যান্ডলিং পুনঃপ্রচারে পরামর্শ অনুসরণ করে আপনি একই অনুরোধটি পুনরায় চেষ্টা করতে পারেন । যদি ত্রুটি অব্যাহত থাকে, অনুগ্রহ করে Firebase সহায়তার সাথে যোগাযোগ করুন।
THIRD_PARTY_AUTH_ERROR (HTTP ত্রুটি কোড = 401) APNs শংসাপত্র বা ওয়েব পুশ প্রমাণ কী অবৈধ বা অনুপস্থিত ছিল৷ একটি iOS ডিভাইস বা একটি ওয়েব পুশ নিবন্ধন লক্ষ্য করে একটি বার্তা পাঠানো যাবে না. আপনার উন্নয়ন এবং উত্পাদন শংসাপত্রের বৈধতা পরীক্ষা করুন.

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

নিম্নলিখিত সারণীতে 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 Admin SDK গুলিকে প্রমাণীকরণ করতে হয় তার ডকুমেন্টেশনের জন্য আপনার অ্যাপে Firebase যোগ করুন দেখুন।
messaging/authentication-error SDK FCM সার্ভারে প্রমাণীকরণ করতে পারেনি৷ নিশ্চিত করুন যে আপনি একটি শংসাপত্র সহ Firebase Admin SDK প্রমাণীকরণ করেছেন যাতে FCM বার্তা পাঠানোর উপযুক্ত অনুমতি রয়েছে৷ কিভাবে Firebase Admin 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- এর জন্য রেফারেন্স তথ্য দেখুন।

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

একটি Firebase Cloud Messaging বিষয়ে বার্তা পাঠানো একটি পৃথক ডিভাইসে বা একটি ব্যবহারকারী গ্রুপে বার্তা পাঠানোর অনুরূপ। অ্যাপ সার্ভার /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 সার্ভার একটি সাফল্য বা ব্যর্থতার প্রতিক্রিয়া প্রদান করে। সেই অনুযায়ী অনুরোধে অ্যাপ সার্ভারের টাইমআউট মান সেট করা নিশ্চিত করুন।

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

অবহেলিত লিগ্যাসি API ব্যবহার করে একটি ডিভাইস গ্রুপে বার্তা পাঠানো একটি পৃথক ডিভাইসে বার্তা পাঠানোর অনুরূপ। ডিভাইস গ্রুপের জন্য অনন্য বিজ্ঞপ্তি কী-তে 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 Admin 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 ত্রুটিগুলি দেখুন৷

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

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