अलग-अलग प्लैटफ़ॉर्म पर मैसेज को पसंद के मुताबिक बनाना

The Firebase Admin SDK और FCM v1 HTTP API की मदद से, मैसेज के अनुरोधों में message ऑब्जेक्ट में मौजूद सभी फ़ील्ड सेट किए जा सकते हैं. इनमें ये शामिल हैं:

  • फ़ील्ड का एक सामान्य सेट, जिसे मैसेज पाने वाले सभी ऐप्लिकेशन इंस्टेंस के लिए इंटरप्रेट किया जाना चाहिए.
  • प्लैटफ़ॉर्म के हिसाब से फ़ील्ड के सेट, जैसे कि AndroidConfig और WebpushConfig. इन्हें सिर्फ़ बताए गए प्लैटफ़ॉर्म पर चलने वाले ऐप्लिकेशन इंस्टेंस ही इंटरप्रेट करते हैं.

प्लैटफ़ॉर्म के हिसाब से ब्लॉक की मदद से, अलग-अलग प्लैटफ़ॉर्म के लिए मैसेज को पसंद के मुताबिक बनाया जा सकता है. इससे यह पक्का किया जा सकता है कि मैसेज मिलने पर, उन्हें सही तरीके से हैंडल किया जाए. FCM बैकएंड, बताए गए सभी पैरामीटर को ध्यान में रखेगा और हर प्लैटफ़ॉर्म के लिए मैसेज को पसंद के मुताबिक बनाएगा.

सामान्य फ़ील्ड का इस्तेमाल कब करें

सामान्य फ़ील्ड का इस्तेमाल तब करें, जब आपको:

  • किसी भी प्लैटफ़ॉर्म पर फ़ील्ड भेजने हों
  • विषयों को मैसेज भेजने हों

प्लैटफ़ॉर्म के हिसाब से, सभी ऐप्लिकेशन इंस्टेंस इन सामान्य फ़ील्ड को इंटरप्रेट कर सकते हैं:

प्लैटफ़ॉर्म के हिसाब से फ़ील्ड का इस्तेमाल कब करें

प्लैटफ़ॉर्म के हिसाब से फ़ील्ड का इस्तेमाल तब करें, जब आपको:

  • सिर्फ़ चुनिंदा प्लैटफ़ॉर्म पर फ़ील्ड भेजने हों
  • सामान्य फ़ील्ड के अलावा, प्लैटफ़ॉर्म के हिसाब से फ़ील्ड भेजने हों

जब भी आपको सिर्फ़ चुनिंदा प्लैटफ़ॉर्म पर वैल्यू भेजनी हों, तो प्लैटफ़ॉर्म के हिसाब से फ़ील्ड का इस्तेमाल करें. उदाहरण के लिए, अगर आपको सिर्फ़ Apple और वेब प्लैटफ़ॉर्म पर कोई सूचना भेजनी है, लेकिन Android पर नहीं, तो आपको फ़ील्ड के दो अलग-अलग सेट इस्तेमाल करने होंगे. एक Apple के लिए और दूसरा वेब के लिए.

अगर आपको डिलीवरी के खास विकल्पों के साथ मैसेज भेजने हैं, तो उन्हें सेट करने के लिए प्लैटफ़ॉर्म के हिसाब से फ़ील्ड का इस्तेमाल करें. अगर चाहें, तो हर प्लैटफ़ॉर्म के लिए अलग-अलग वैल्यू तय की जा सकती हैं. हालांकि, अगर आपको सभी प्लैटफ़ॉर्म पर एक ही वैल्यू सेट करनी है, तब भी प्लैटफ़ॉर्म के हिसाब से फ़ील्ड का इस्तेमाल करना होगा. ऐसा इसलिए, क्योंकि हर प्लैटफ़ॉर्म वैल्यू को थोड़ा अलग तरीके से इंटरप्रेट कर सकता है. उदाहरण के लिए, Android पर 'लाइफ़टाइम' को सेकंड में खत्म होने के समय के तौर पर सेट किया जाता है. वहीं, Apple पर इसे खत्म होने की तारीख के तौर पर सेट किया जाता है.

प्लैटफ़ॉर्म के हिसाब से डिलीवरी के विकल्पों के साथ सूचना वाला मैसेज

एचटीटीपी v1 एपीआई का यह 'भेजें' अनुरोध, सभी प्लैटफ़ॉर्म पर सूचना का सामान्य टाइटल और कॉन्टेंट भेजता है. साथ ही, प्लैटफ़ॉर्म के हिसाब से कुछ ओवरराइड भी भेजता है. खास तौर पर, अनुरोध:

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

ज़्यादा जानने के लिए, मैसेज के मुख्य हिस्से में प्लैटफ़ॉर्म के हिसाब से ब्लॉक में उपलब्ध कुंजियों के बारे में ज़्यादा जानकारी पाने के लिए, एचटीटीपी 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);
  });

Java

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

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

ज़्यादा जानने के लिए, मैसेज के मुख्य हिस्से में प्लैटफ़ॉर्म के हिसाब से ब्लॉक में उपलब्ध कुंजियों के बारे में ज़्यादा जानकारी पाने के लिए, एचटीटीपी v1 रेफ़रंस पेज देखें.

पसंद के मुताबिक इमेज के साथ सूचना वाला मैसेज

ध्यान रखें:

  • सूचनाओं के लिए इमेज का साइज़ एक एमबी से ज़्यादा नहीं होना चाहिए. इसके अलावा, Android में इमेज के लिए मौजूद बिल्ट-इन इमेज सहायता से जुड़ी पाबंदियां भी लागू होती हैं.
  • Apple ऐप्लिकेशन में सूचनाओं की इमेज पाने और उन्हें हैंडल करने के लिए, आपको सूचना सेवा एक्सटेंशन जोड़ना होगा. सूचना सेवा एक्सटेंशन की मदद से, आपका ऐप्लिकेशन, FCM पेलोड में डिलीवर की गई इमेज को एंड यूज़र को सूचना दिखाने से पहले हैंडल कर सकता है. कोड के सैंपल के लिए, सूचना सेवा एक्सटेंशन सेट अप करना लेख पढ़ें.
  • सूचनाएं कंपोज़र का इस्तेमाल करके अपलोड की गई इमेज का साइज़ 300 केबी से ज़्यादा नहीं होना चाहिए.
  • Cloud Storage में सेव या वहां से दिखाई जाने वाली इमेज पर, कोटा की सामान्य सीमाएं लागू होती हैं.

सूचना भेजने के अनुरोध में, ये विकल्प सेट करें, ताकि सूचना पाने वाला क्लाइंट, पेलोड में डिलीवर की गई इमेज को हैंडल कर सके:

  • Android के लिए, निम्नलिखित AndroidConfig विकल्प सेट करें:
    • notification.image, जिसमें इमेज का यूआरएल शामिल हो
  • iOS के लिए, निम्न ApnsConfig विकल्प सेट करें:
    • fcm_options.image, जिसमें इमेज का यूआरएल शामिल हो. Apple के लिए ज़रूरी है कि इमेज के यूआरएल में, मान्य फ़ाइल एक्सटेंशन शामिल हो, ताकि रिसॉर्स के टाइप की सही पहचान की जा सके.
    • 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"
       }
     }
   }
 }

ज़्यादा जानने के लिए, मैसेज के मुख्य हिस्से में प्लैटफ़ॉर्म के हिसाब से ब्लॉक में उपलब्ध कुंजियों के बारे में ज़्यादा जानकारी पाने के लिए, एचटीटीपी 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