अगर आपका ऐप्लिकेशन सर्वर, 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 को एसीके नहीं मिलता है, तो हो सकता है कि ऐप्लिकेशन सर्वर को मैसेज भेजने की फिर से कोशिश की जाए.
<message id=""> <gcm xmlns="google:mobile:data"> { "to":"REGID", "message_id":"m-123" "message_type":"ack" } </gcm> </message>
अपस्ट्रीम मैसेज के सिंटैक्स के बारे में ज़्यादा जानकारी के लिए, XMPP कनेक्शन सर्वर रेफ़रंस देखें.