Firebase is back at Google I/O on May 10! Register now

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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

यदि आपका ऐप सर्वर 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>

एसीके संदेश भेजा जा रहा है

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

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

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