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

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

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

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

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

আপনি যখন নিম্নলিখিত কাজগুলি করছেন তখন সাধারণ ফিল্ড ব্যবহার করুন:

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

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

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

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

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

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