यदि आपका ऐप सर्वर एक्सएमपीपी कनेक्शन सर्वर प्रोटोकॉल लागू करता है, तो यह उपयोगकर्ता के डिवाइस से क्लाउड पर अपस्ट्रीम संदेश प्राप्त कर सकता है। एक अपस्ट्रीम संदेश आरंभ करने के लिए, क्लाइंट ऐप निम्नलिखित युक्त एक अनुरोध भेजता है:
- प्राप्तकर्ता ऐप सर्वर का पता
SENDER_ID@fcm.googleapis.com
प्रारूप में है। - एक संदेश आईडी जो प्रत्येक प्रेषक आईडी के लिए अद्वितीय होनी चाहिए।
- संदेश डेटा में संदेश के पेलोड के कुंजी-मूल्य जोड़े शामिल होते हैं।
जब यह डेटा प्राप्त होता है, तो एफसीएम ऐप सर्वर को भेजने के लिए एक एक्सएमपीपी श्लोक बनाता है, जिसमें भेजने वाले डिवाइस और ऐप के बारे में कुछ अतिरिक्त जानकारी शामिल होती है।
एंड्रॉइड क्लाइंट ऐप से एक अपस्ट्रीम संदेश भेजें
आपका एंड्रॉइड ऐप FirebaseMessageing.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
लौटाता है।
ऐसे मामलों में जहां डिवाइस ऑफ़लाइन है या आपके सर्वर पर अपस्ट्रीम संदेशों को अग्रेषित करने के लिए एफसीएम सेवा अनुपलब्ध है, एंड्रॉइड क्लाइंट ऐप इंस्टेंस अधिकतम 20 लंबित संदेशों को जमा कर सकता है। यदि ऐसे संदेश FCM द्वारा सफलतापूर्वक भेजे जाने से पहले समाप्त हो जाते हैं, तो onSendError
SendException#ERROR_TTL_EXCEEDED
लौटाता है।
नेटवर्क उपयोग को अनुकूलित करने के लिए, FCM onMessageSent
और onSendError
पर प्रतिक्रियाओं को बैच करता है, इसलिए प्रत्येक संदेश के लिए पावती तत्काल नहीं हो सकती है।
ऐप सर्वर पर एक्सएमपीपी संदेश प्राप्त करें
जब एफसीएम को क्लाइंट ऐप से अपस्ट्रीम मैसेजिंग कॉल प्राप्त होती है, तो यह अपस्ट्रीम संदेश भेजने के लिए आवश्यक एक्सएमपीपी श्लोक उत्पन्न करता है। एफसीएम 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>
अपस्ट्रीम संदेश सिंटैक्स के बारे में अधिक जानकारी के लिए एक्सएमपीपी कनेक्शन सर्वर संदर्भ देखें।