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

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

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

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

কখন সাধারণ ফিল্ড ব্যবহার করতে হয়

আপনি যখন:

  • যেকোনও প্ল্যাটফর্মে ফিল্ড পাঠানো
  • বিষয়ভিত্তিক মেসেজ পাঠানো

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

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

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

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

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

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

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

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

  • Android ও ওয়েব প্ল্যাটফর্মের জন্য দীর্ঘ সময়সীমা সেট করে, পাশাপাশি APNs (Apple প্ল্যাটফর্ম) মেসেজের অগ্রাধিকার কম সেটিংয়ে সেট করে
  • Android ও Apple-এ বিজ্ঞপ্তি ট্যাপ করার ফলে কী হবে তা নির্ধারণ করার জন্য উপযুক্ত কী সেট করে — click_action ও category, যথাক্রমে।
{
  "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 ব্যবহার করে মেসেজ পাঠান লিঙ্কটি দেখুন।

রঙ ও আইকনের বিকল্প সহ বিজ্ঞপ্তি মেসেজ

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

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

ব্যবহারকারীর ডিভাইসে ভিজ্যুয়াল এফেক্টের একটি উদাহরণ এখানে দেওয়া হল:

দুটি ডিভাইসের সাধারণ ড্রয়িং, একটিতে কাস্টম আইকন ও রঙ দেখানো হচ্ছে

Node.js

const topicName = 'industry-tech';

const message = {
  notification: {
    title: '`$FooCorp` up 1.43% on the day',
    body: 'FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
  },
  android: {
    notification: {
      icon: 'stock_ticker_update',
      color: '#7e55c3'
    }
  },
  topic: topicName,
};

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")
            .setTitle("$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();

Python

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

Go

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

C#

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

REST

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 রেফারেন্স পৃষ্ঠা দেখুন। এখানে মেসেজ বডিতে প্ল্যাটফর্ম-নির্দিষ্ট ব্লকে উপলভ্য কী সম্পর্কে আরও বিবরণ দেওয়া আছে।

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

মনে রাখবেন:

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

আপনার বিজ্ঞপ্তি পাঠানোর অনুরোধে, পেলোডে ডেলিভার করা ছবি ম্যানেজ করার জন্য রিসিভিং ক্লায়েন্টকে চালু করতে নিম্নলিখিত বিকল্প সেট করুন:

  • Android-এর জন্য, নিম্নলিখিত AndroidConfig বিকল্প সেট করুন:
    • notification.image যাতে ছবির URL আছে
  • iOS-এর জন্য, নিম্নলিখিত ApnsConfig বিকল্প সেট করুন:
    • fcm_options.image যাতে ছবির URL আছে। Apple-এর প্রয়োজন যে ইমেজ URL-এ সঠিক ফাইল এক্সটেনশন থাকতে হবে, যাতে রিসোর্সের ধরন সঠিকভাবে শনাক্ত করা যায়।
    • headers({ "mutable-content": 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);
  });

REST

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

REST

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1