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

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

,

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 -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} এ আইডি স্ট্রিংটি ফেরত দেয়} এইচটিটিপি প্রোটোকল প্রতিক্রিয়া একটি একক জেএসএন কী:

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

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

আপনি কোনও বিষয় তৈরি করার পরে, ক্লায়েন্টের পাশের বিষয়টিতে বা সার্ভার এপিআইয়ের মাধ্যমে ক্লায়েন্ট অ্যাপের উদাহরণগুলি সাবস্ক্রাইব করে, আপনি বিষয়টিতে বার্তা প্রেরণ করতে পারেন। যদি এটি আপনার প্রথমবারের বিল্ডিং 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 -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 -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 ভি 1 এপিআই ব্যবহার করুন। আপনি যদি বর্তমানে অবমূল্যায়িত উত্তরাধিকার ব্যবহার করে ডিভাইস গ্রুপগুলিতে প্রেরণ করছেন তবে এইচটিটিপি বা এক্সএমপিপি -র জন্য এপিআই প্রেরণ করুন, বা লিগ্যাসি প্রোটোকলের উপর ভিত্তি করে নোড.জেএসের জন্য Firebase Admin SDK কোনও পুরানো সংস্করণ প্রেরণ করছেন, আমরা আপনাকে দৃ strongly ়ভাবে সুপারিশ করছি যে আপনাকে এইচটিটিপি ভি 1 এ স্থানান্তরিত করুন প্রথম সুযোগে এপিআই । উত্তরাধিকার প্রেরণ এপিআইগুলি 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 -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

বার্তাগুলির একটি ব্যাচ প্রেরণ করুন

অ্যাডমিন এসডিকে ব্যাচে বার্তা প্রেরণ সমর্থন করে। আপনি প্রতিটি বার্তার জন্য পৃথক এইচটিটিপি অনুরোধ প্রেরণের চেয়ে উল্লেখযোগ্য পারফরম্যান্সের উন্নতি সহ একটি একক ব্যাচে 500 টি পর্যন্ত বার্তাগুলি গ্রুপ করতে পারেন এবং সেগুলি সমস্ত একক এপিআই কলটিতে প্রেরণ করতে পারেন।

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

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

সরাসরি বুট-সক্ষম করা বার্তাগুলি প্রেরণ করুন (কেবলমাত্র অ্যান্ড্রয়েড)

আপনি এইচটিটিপি ভি 1 বা লিগ্যাসি এইচটিটিপি এপিআই ব্যবহার করে সরাসরি বুট মোডে ডিভাইসে বার্তা প্রেরণ করতে পারেন। ডাইরেক্ট বুট মোডে ডিভাইসগুলিতে প্রেরণের আগে, নিশ্চিত হয়ে নিন যে আপনি ক্লায়েন্ট ডিভাইসগুলিকে সরাসরি বুট মোডে এফসিএম বার্তাগুলি গ্রহণ করতে সক্ষম করার পদক্ষেপগুলি সম্পন্ন করেছেন।

এফসিএম ভি 1 এইচটিটিপি এপিআই ব্যবহার করে প্রেরণ করুন

বার্তার অনুরোধে অবশ্যই "ডাইরেক্ট_বুট_ক" কী অন্তর্ভুক্ত থাকতে হবে: অনুরোধ বডিটির 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,
    },
}

এফসিএম লিগ্যাসি http এপিআই ব্যবহার করে প্রেরণ করুন

বার্তার অনুরোধে অবশ্যই "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 এবং এফসিএম ভি 1 এইচটিটিপি প্রোটোকল উভয়ই আপনার বার্তার অনুরোধগুলিকে message অবজেক্টে উপলব্ধ সমস্ত ক্ষেত্র সেট করার অনুমতি দেয়। এর মধ্যে রয়েছে:

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

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

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

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

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

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

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

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

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

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

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

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

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

অ্যান্ড্রয়েডের জন্য, অনুরোধটি অ্যান্ড্রয়েড ডিভাইসে প্রদর্শনের জন্য একটি বিশেষ আইকন এবং রঙ সেট করে। অ্যান্ড্রয়েডনোটিফিকেশনটির জন্য রেফারেন্সে উল্লিখিত হিসাবে, রঙটি #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"
       }
     }
   }
 }

বার্তা বডিটিতে প্ল্যাটফর্ম-নির্দিষ্ট ব্লকগুলিতে উপলব্ধ কীগুলিতে সম্পূর্ণ বিশদ জন্য এইচটিটিপি ভি 1 রেফারেন্স ডকুমেন্টেশন দেখুন।

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

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

একটি প্রদর্শন বিজ্ঞপ্তিতে একটি চিত্রের সহজ অঙ্কন

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

বার্তা বডিটিতে প্ল্যাটফর্ম-নির্দিষ্ট ব্লকগুলিতে উপলব্ধ কীগুলিতে সম্পূর্ণ বিশদ জন্য এইচটিটিপি ভি 1 রেফারেন্স ডকুমেন্টেশন দেখুন।

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

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

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

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

বার্তা বডিটিতে প্ল্যাটফর্ম-নির্দিষ্ট ব্লকগুলিতে উপলব্ধ কীগুলিতে সম্পূর্ণ বিশদ জন্য এইচটিটিপি ভি 1 রেফারেন্স ডকুমেন্টেশন দেখুন।

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

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

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

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

বার্তা বডিটিতে প্ল্যাটফর্ম-নির্দিষ্ট ব্লকগুলিতে উপলব্ধ কীগুলিতে সম্পূর্ণ বিশদ জন্য এইচটিটিপি ভি 1 রেফারেন্স ডকুমেন্টেশন দেখুন।

এইচটিটিপি ভি 1 এপিআইয়ের জন্য বিশ্রাম ত্রুটি কোডগুলি

এইচটিটিপি ভি 1 এপিআইয়ের জন্য এইচটিটিপি ত্রুটি প্রতিক্রিয়াগুলিতে একটি ত্রুটি কোড, একটি ত্রুটি বার্তা এবং ত্রুটির স্থিতি রয়েছে। এগুলিতে ত্রুটির বিষয়ে আরও বিশদ সহ details অ্যারেও থাকতে পারে।

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

উদাহরণ 1: একটি ডেটা বার্তায় একটি অবৈধ মান সহ এইচটিটিপি ভি 1 এপিআই অনুরোধ থেকে ত্রুটি প্রতিক্রিয়া

{
  "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: একটি অবৈধ নিবন্ধকরণ টোকেন সহ এইচটিটিপি ভি 1 এপিআই অনুরোধ থেকে ত্রুটি প্রতিক্রিয়া

{
  "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 সাথে দ্বিতীয় উদাহরণ। অনেক ত্রুটির জন্য, বিশদ অ্যারেতে আপনাকে ডিবাগ করতে এবং একটি রেজোলিউশন খুঁজে পেতে হবে এমন তথ্য রয়েছে।

নিম্নলিখিত টেবিলটি এফসিএম ভি 1 আরইএসটি এপিআই ত্রুটি কোড এবং তাদের বিবরণ তালিকাভুক্ত করে।

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

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

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

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

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

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

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

নির্দিষ্ট ডিভাইসে বার্তা প্রেরণ করতে, নির্দিষ্ট অ্যাপ্লিকেশন উদাহরণের জন্য নিবন্ধকরণ টোকেনের 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" }
  ]
}

এক্সএমপিপি বার্তা

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

এক্সএমপিপি প্রতিক্রিয়া

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

এক্সএমপিপি সংযোগ সার্ভার প্রতিক্রিয়াগুলির জন্য আরও কিছু বিকল্প সরবরাহ করে। সার্ভার প্রতিক্রিয়া ফর্ম্যাট দেখুন।

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

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

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

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

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

বিষয় এইচটিটিপি পোস্ট অনুরোধ

একটি একক বিষয়ে প্রেরণ করুন:

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

বিষয় এইচটিটিপি প্রতিক্রিয়া

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

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

বিষয় এক্সএমপিপি বার্তা

একটি একক বিষয়ে প্রেরণ করুন:

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


  </gcm>
</message>

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

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


  </gcm>
</message>

বিষয় এক্সএমপিপি প্রতিক্রিয়া

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

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

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

ডিভাইস গ্রুপগুলিতে বার্তা প্রেরণ করুন

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

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

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
}

ডিভাইস গ্রুপ এক্সএমপিপি বার্তা

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

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

যখন গ্রুপের যে কোনও একটি ডিভাইসে বার্তাটি প্রেরণ করা হয়, তখন এক্সএমপিপি সংযোগ সার্ভার একটি এসিকে দিয়ে প্রতিক্রিয়া জানায়। যদি গোষ্ঠীর সমস্ত ডিভাইসে প্রেরিত সমস্ত বার্তা ব্যর্থ হয় তবে এক্সএমপিপি সংযোগ সার্ভার একটি ন্যাকের সাথে প্রতিক্রিয়া জানায়।

এখানে "সাফল্য" এর একটি উদাহরণ রয়েছে - 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 সংযোগ সার্ভার গ্রুপের সমস্ত ডিভাইসে সরবরাহ করতে ব্যর্থ হয়। অ্যাপ সার্ভার একটি ন্যাক প্রতিক্রিয়া পাবেন।

বার্তা বিকল্পগুলির সম্পূর্ণ তালিকার জন্য, আপনার নির্বাচিত সংযোগ সার্ভার প্রোটোকল, এইচটিটিপি বা এক্সএমপিপি -র জন্য রেফারেন্স তথ্য দেখুন।

Firebase Admin SDK উত্তরাধিকার প্রেরণ পদ্ধতি

ফায়ারবেস অ্যাডমিন নোড.জেএস এসডিকে উত্তরাধিকার এফসিএম সার্ভার এপিআইয়ের উপর ভিত্তি করে ( 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 এপিআই ত্রুটিগুলি দেখুন।

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

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 এপিআই ত্রুটিগুলি দেখুন।

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

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

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

const payload = {
  notification: {
    title: '$FooCorp up 1.43% on the day',
    body: '$FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
  }
};

ডেটা বার্তা

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

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

const payload = {
  notification: {
    title: '$FooCorp up 1.43% on the day',
    body: '$FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
  },
  data: {
    stock: 'GOOG',
    open: '829.62',
    close: '635.67'
  }
};

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

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

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

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

Node.js

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

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

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

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

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