Android पर अपस्ट्रीम मैसेज भेजना

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

  • [email protected] फ़ॉर्मैट में, ऐक्सेस पाने वाले ऐप्लिकेशन सर्वर का पता.
  • एक मैसेज आईडी, जो हर भेजने वाले का आईडी के लिए अलग होना चाहिए.
  • मैसेज डेटा में मैसेज के पेलोड के की-वैल्यू पेयर शामिल होते हैं.

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

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

आपका Android ऐप्लिकेशन, इसका इस्तेमाल करके अपस्ट्रीम मैसेज भेज सकता है FirebaseMessaging.send:

Kotlin KTX

val fm = Firebase.messaging
fm.send(
    remoteMessage("[email protected]") {
        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 कनेक्शन सर्वर संदर्भ देखें देखें.