Android पर अपस्ट्रीम संदेश भेजना

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

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

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

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

आपका Android ऐप FirebaseMessaging.send का उपयोग करके अपस्ट्रीम संदेश भेज सकता है:

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

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

अपस्ट्रीम संदेश कॉलबैक संभालें

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

ऐसे मामलों में जहां डिवाइस ऑफ़लाइन है या एफसीएम सेवा आपके सर्वर पर अपस्ट्रीम संदेशों को अग्रेषित करने के लिए अनुपलब्ध है, एंड्रॉइड क्लाइंट ऐप इंस्टेंस अधिकतम 20 लंबित संदेशों को जमा कर सकता है। यदि ऐसे संदेश FCM द्वारा सफलतापूर्वक भेजने से पहले समाप्त हो जाते हैं, तो onSendError SendException#ERROR_TTL_EXCEEDED onSendError

नेटवर्क उपयोग को अनुकूलित करने के लिए, FCM प्रतिक्रियाओं को onMessageSent और onSendError पर बैच करता है, इसलिए प्रत्येक संदेश के लिए पावती तत्काल नहीं हो सकती है।

ऐप सर्वर पर एक्सएमपीपी संदेश प्राप्त करें

जब 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>

एक एसीके संदेश भेजना

ऊपर की तरह एक अपस्ट्रीम संदेश के जवाब में, ऐप सर्वर को एक ही कनेक्शन का उपयोग करके एक अद्वितीय संदेश आईडी युक्त एसीके संदेश भेजना चाहिए। यदि FCM को ACK प्राप्त नहीं होता है, तो वह ऐप सर्वर पर संदेश भेजने का पुनः प्रयास कर सकता है।

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

अपस्ट्रीम संदेश सिंटैक्स के बारे में अधिक जानकारी के लिए एक्सएमपीपी कनेक्शन सर्वर संदर्भ देखें।