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

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

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

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

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

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

  • যেকোনো প্ল্যাটফর্মে ফিল্ড পাঠান
  • বিষয়গুলিতে বার্তা পাঠান

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

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

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

  • শুধুমাত্র নির্দিষ্ট প্ল্যাটফর্মগুলিতে ফিল্ডগুলি পাঠান
  • Send platform-specific fields in addition to the common fields

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

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

প্ল্যাটফর্ম-নির্দিষ্ট ডেলিভারি বিকল্প সহ বিজ্ঞপ্তি বার্তা

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

  • অ্যান্ড্রয়েড এবং ওয়েব প্ল্যাটফর্মের জন্য দীর্ঘ সময় ধরে লাইভ টাইম সেট করে, অন্যদিকে APNs (অ্যাপল প্ল্যাটফর্ম) মেসেজের অগ্রাধিকার কম সেটিং-এ সেট করে।
  • sets the appropriate keys to define the result of a user tap on the notification on Android and Apple — click_action , and category , respectively.
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

আরও জানতে, মেসেজ বডিতে প্ল্যাটফর্ম-নির্দিষ্ট ব্লকগুলিতে উপলব্ধ কী-গুলি সম্পর্কে বিশদ তথ্যের জন্য HTTP v1 রেফারেন্স পৃষ্ঠাটি দেখুন। মেসেজ বডি সম্বলিত সেন্ড রিকোয়েস্ট তৈরি করার বিষয়ে আরও তথ্যের জন্য, "FCM HTTP v1 API ব্যবহার করে একটি মেসেজ পাঠান" দেখুন।

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

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

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

ব্যবহারকারীর ডিভাইসে এর দৃশ্যমান প্রভাবের একটি উদাহরণ এখানে দেওয়া হলো:

দুটি ডিভাইসের সাধারণ অঙ্কন, যার মধ্যে একটিতে একটি কাস্টম আইকন এবং রঙ প্রদর্শিত হচ্ছে।

নোড.জেএস

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 রেফারেন্স পৃষ্ঠাটি দেখুন।

কাস্টম ছবি সহ বিজ্ঞপ্তি বার্তা

মনে রাখবেন:

  • নোটিফিকেশনের জন্য ছবির আকার ১ মেগাবাইটে সীমাবদ্ধ, এবং এ ছাড়া বাকি ছবি অ্যান্ড্রয়েডের অন্তর্নির্মিত ছবি সমর্থন দ্বারা নিয়ন্ত্রিত হয়।
  • একটি অ্যাপল অ্যাপে নোটিফিকেশন ইমেজ গ্রহণ ও পরিচালনা করতে হলে, আপনাকে অবশ্যই একটি নোটিফিকেশন সার্ভিস এক্সটেনশন যোগ করতে হবে। এই নোটিফিকেশন সার্ভিস এক্সটেনশনটি আপনার অ্যাপকে, ব্যবহারকারীকে নোটিফিকেশন দেখানোর আগে, FCM পেলোডে পাঠানো ইমেজটি পরিচালনা করার সুযোগ দেয়। কোড স্যাম্পলের জন্য ‘নোটিফিকেশন সার্ভিস এক্সটেনশন সেট আপ করুন ’ দেখুন।
  • নোটিফিকেশন কম্পোজার ব্যবহার করে আপলোড করা ছবির আকার ৩০০ কিলোবাইটের মধ্যে সীমাবদ্ধ।
  • Cloud Storage সংরক্ষিত বা সেখান থেকে পরিবেশিত ছবিগুলো সাধারণ কোটা সীমার অধীন।

আপনার নোটিফিকেশন পাঠানোর অনুরোধে, পেলোডে পাঠানো ছবিটি গ্রহণকারী ক্লায়েন্টকে পরিচালনা করতে সক্ষম করার জন্য নিম্নলিখিত অপশনগুলো সেট করুন:

  • অ্যান্ড্রয়েডের জন্য, নিম্নলিখিত AndroidConfig অপশনটি সেট করুন:
    • notification.image যাতে ছবির URL রয়েছে
  • iOS-এর জন্য, নিম্নলিখিত ApnsConfig অপশনগুলো সেট করুন:
    • fcm_options.image এ ছবির URL থাকে। রিসোর্স টাইপটি সঠিকভাবে শনাক্ত করার জন্য অ্যাপলের শর্তানুযায়ী ছবির URL-এ একটি বৈধ ফাইল এক্সটেনশন থাকা আবশ্যক।
    • headers({ "mutable-content": 1})

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

ডিসপ্লে নোটিফিকেশনে একটি ছবির সাধারণ অঙ্কন।

নোড.জেএস

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 রেফারেন্স পৃষ্ঠাটি দেখুন।

সংশ্লিষ্ট ক্লিক অ্যাকশন সহ বিজ্ঞপ্তি বার্তা

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

ব্যবহারকারীর ট্যাপের মাধ্যমে একটি ওয়েব পেজ খোলার একটি সাধারণ চিত্র।

নোড.জেএস

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