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