Android पर अपस्ट्रीम मैसेज भेजना

अगर आपका ऐप्लिकेशन सर्वर XMPP कनेक्शन सर्वर प्रोटोकॉल लागू करता है, तो उसे उपयोगकर्ता के डिवाइस से क्लाउड पर अपस्ट्रीम मैसेज मिल सकते हैं. अपस्ट्रीम मैसेज शुरू करने के लिए, क्लाइंट ऐप्लिकेशन एक अनुरोध भेजता है. इस अनुरोध में ये चीज़ें शामिल होती हैं:

  • SENDER_ID@fcm.googleapis.com फ़ॉर्मैट में, ऐक्सेस पाने वाले ऐप्लिकेशन सर्वर का पता.
  • एक मैसेज आईडी जो हर भेजने वाले का आईडी के लिए अलग होना चाहिए.
  • मैसेज डेटा में मैसेज के पेलोड के की-वैल्यू पेयर शामिल होते हैं.

जब FCM को यह डेटा मिलता है, तो वह ऐप्लिकेशन सर्वर पर भेजने के लिए एक XMPP छंद बनाता है. साथ ही, भेजने वाले डिवाइस और ऐप्लिकेशन के बारे में कुछ और जानकारी देता है.

Android क्लाइंट ऐप्लिकेशन से अपस्ट्रीम मैसेज भेजना

आपका Android ऐप्लिकेशन FirebaseMessaging.send का इस्तेमाल करके अपस्ट्रीम मैसेज भेज सकता है:

Kotlin+KTX

val fm = Firebase.messaging
fm.send(
    remoteMessage("$SENDER_ID@fcm.googleapis.com") {
        setMessageId(messageId.toString())
        addData("my_message", "Hello World")
        addData("my_action", "SAY_HELLO")
    },
)

Java

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@fcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action","SAY_HELLO")
        .build());

अपस्ट्रीम मैसेज कॉलबैक मैनेज करना

FirebaseMessaging की मदद से, अपस्ट्रीम मैसेज की स्थिति देखने के लिए, onMessageSent और onSendError कॉलबैक लागू किए जा सकते हैं. गड़बड़ी के मामलों में, onSendError गड़बड़ी कोड के साथ SendException दिखाता है. उदाहरण के लिए, अगर क्लाइंट 20 मैसेज की सीमा पूरी होने के बाद, ज़्यादा मैसेज भेजने की कोशिश करता है, तो वह SendException#ERROR_TOO_MANY_MESSAGES दिखाता है.

अगर डिवाइस ऑफ़लाइन है या FCM सेवा उपलब्ध नहीं है, तो अपस्ट्रीम मैसेज को आपके सर्वर पर भेजा नहीं जा सकता. ऐसे में, Android क्लाइंट ऐप्लिकेशन के इंस्टेंस में ज़्यादा से ज़्यादा 20 मैसेज इकट्ठा हो सकते हैं. अगर FCM ऐसे मैसेज भेजने से पहले ही उनकी समयसीमा खत्म हो जाती है, तो onSendError SendException#ERROR_TTL_EXCEEDED दिखाता है.

नेटवर्क के इस्तेमाल को ऑप्टिमाइज़ करने के लिए, FCM onMessageSent और onSendError के जवाबों को एक साथ भेजता है. इसलिए, हो सकता है कि हर मैसेज के लिए, तुरंत जवाब न मिले.

ऐप्लिकेशन सर्वर पर XMPP मैसेज पाना

जब FCM को किसी क्लाइंट ऐप्लिकेशन से अपस्ट्रीम मैसेजिंग कॉल मिलता है, तो वह अपस्ट्रीम मैसेज भेजने के लिए ज़रूरी XMPP छंद जनरेट करता है. FCM, category और from फ़ील्ड को जोड़ता है और फिर ऐप्लिकेशन सर्वर को इस तरह का एक छंद भेजता है:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "category":"com.example.yourapp", // to know which app sent it
      "data":
      {
          "hello":"world",
      },
      "message_id":"m-123",
      "from":"REGID"
  }
  </gcm>
</message>

ACK मैसेज भेजना

ऊपर दिए गए अपस्ट्रीम मैसेज के जवाब में, ऐप्लिकेशन सर्वर को एक ही कनेक्शन का इस्तेमाल करके, यूनीक मैसेज आईडी वाला एक ACK मैसेज भेजना होगा. अगर FCM को ACK नहीं मिलता है, तो वह ऐप्लिकेशन सर्वर को मैसेज भेजने की कोशिश फिर से कर सकता है.

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

अपस्ट्रीम मैसेज सिंटैक्स के बारे में ज़्यादा जानकारी के लिए, XMPP कनेक्शन सर्वर रेफ़रंस देखें.