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 कनेक्शन सर्वर रेफ़रंस देखें.