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

2 और और और

अगर आपका ऐप्लिकेशन सर्वर 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 कनेक्शन सर्वर रेफ़रंस देखें.