Firebase क्लाउड से मैसेज के साथ XMPP प्रोटोकॉल

इस दस्तावेज़ में, XMPP सिंटैक्स का रेफ़रंस दिया गया है. इसका इस्तेमाल, आपके ऐप्लिकेशन सर्वर, क्लाइंट ऐप्लिकेशन, और Firebase Cloud Messaging (FCM) के बीच मैसेज भेजने के लिए किया जाता है. आपका ऐप्लिकेशन सर्वर, इन एंडपॉइंट से कनेक्ट होना चाहिए:

// Production
fcm-xmpp.googleapis.com:5235

// Testing
fcm-xmpp.googleapis.com:5236

उपलब्ध पैरामीटर और विकल्प इन कैटगरी में आते हैं:

डाउनस्ट्रीम मैसेज का सिंटैक्स

इस सेक्शन में, डाउनस्ट्रीम मैसेज भेजने के लिए सिंटैक्स दिया गया है.

डाउनस्ट्रीम XMPP मैसेज (JSON)

नीचे दी गई टेबल में, XMPP JSON मैसेज के लिए टारगेट, विकल्प, और पेलोड की सूची दी गई है.

टेबल 1 डाउनस्ट्रीम XMPP मैसेज (JSON) के लिए टारगेट, विकल्प, और पेलोड.

पैरामीटर इस्तेमाल ब्यौरा
टारगेट
to ज़रूरी नहीं, स्ट्रिंग

यह पैरामीटर, मैसेज पाने वाले व्यक्ति की जानकारी देता है.

वैल्यू, डिवाइस का रजिस्ट्रेशन टोकन, डिवाइस ग्रुप की सूचना कुंजी या एक विषय (/topics/ के साथ प्रीफ़िक्स) हो सकती है. एक से ज़्यादा विषयों पर भेजने के लिए, condition पैरामीटर का इस्तेमाल करें.

condition ज़रूरी नहीं, स्ट्रिंग

यह पैरामीटर, शर्तों के लॉजिकल एक्सप्रेशन के बारे में बताता है. इससे मैसेज के टारगेट का पता चलता है.

काम करने वाली शर्त: विषय, जिसे "विषयों में 'yourTopic'" के तौर पर फ़ॉर्मैट किया गया हो. यह वैल्यू, केस-इनसेंसिटिव होती है.

इस्तेमाल किए जा सकने वाले ऑपरेटर: &&, ||. हर विषय के मैसेज में, ज़्यादा से ज़्यादा दो ऑपरेटर इस्तेमाल किए जा सकते हैं.

विकल्प
message_id ज़रूरी है, स्ट्रिंग

यह पैरामीटर, XMPP कनेक्शन में किसी मैसेज की खास पहचान करता है.

collapse_key ज़रूरी नहीं, स्ट्रिंग

यह पैरामीटर, मैसेज के ऐसे ग्रुप की पहचान करता है (जैसे, collapse_key: "Updates Available" के साथ) जिन्हें छोटा किया जा सकता है, ताकि डिलीवरी फिर से शुरू होने पर सिर्फ़ आखिरी मैसेज भेजा जाए. ऐसा इसलिए किया जाता है, ताकि डिवाइस के ऑनलाइन आने या डॉज़ मोड से बाहर आने पर, एक जैसे कई मैसेज न भेजे जाएं.

इस बात की कोई गारंटी नहीं है कि मैसेज किस क्रम में भेजे जाएंगे.

ध्यान दें: किसी भी समय, ज़्यादा से ज़्यादा चार अलग-अलग कॉलप्स बटन इस्तेमाल किए जा सकते हैं. इसका मतलब है कि FCM, हर क्लाइंट ऐप्लिकेशन के लिए एक साथ चार अलग-अलग मैसेज सेव कर सकता है. अगर इस संख्या से ज़्यादा मैसेज सेव किए जाते हैं, तो इस बात की कोई गारंटी नहीं है कि FCM कौनसी चार कॉलप्स बटन की जानकारी सेव करेगा.

priority ज़रूरी नहीं, स्ट्रिंग

मैसेज की प्राथमिकता सेट करता है. मान्य वैल्यू "सामान्य" और "ज़्यादा" हैं. Apple के प्लैटफ़ॉर्म पर, ये APNs की प्राथमिकताओं 5 और 10 से मेल खाते हैं.

डिफ़ॉल्ट रूप से, सूचना वाले मैसेज ज़्यादा प्राथमिकता के साथ भेजे जाते हैं और डेटा मैसेज सामान्य प्राथमिकता के साथ भेजे जाते हैं. सामान्य प्राथमिकता से, क्लाइंट ऐप्लिकेशन की बैटरी खपत को ऑप्टिमाइज़ किया जाता है. इसका इस्तेमाल तब तक किया जाना चाहिए, जब तक कि डेटा को तुरंत डिलीवर करने की ज़रूरत न हो. सामान्य प्राथमिकता वाले मैसेज के लिए, ऐप्लिकेशन को मैसेज मिलने में तय समय से ज़्यादा समय लग सकता है.

जब कोई मैसेज ज़्यादा प्राथमिकता के साथ भेजा जाता है, तो उसे तुरंत भेज दिया जाता है. साथ ही, ऐप्लिकेशन पर इसकी सूचना भी दिख सकती है.

content_available ज़रूरी नहीं, बूलियन

Apple के प्लैटफ़ॉर्म पर, APNs पेलोड में content-available को दिखाने के लिए इस फ़ील्ड का इस्तेमाल करें. जब कोई सूचना या मैसेज भेजा जाता है और इसे true पर सेट किया जाता है, तो ऐक्टिव नहीं रहने वाला क्लाइंट ऐप्लिकेशन चालू हो जाता है. साथ ही, मैसेज को FCM के ज़रिए नहीं, बल्कि APNs के ज़रिए साइलेंट सूचना के तौर पर भेजा जाता है. ध्यान दें कि एपीएन में साइलेंट सूचनाएं डिलीवर होने की कोई गारंटी नहीं है. यह कई बातों पर निर्भर करता है. जैसे, उपयोगकर्ता ने कम बैटरी मोड चालू किया है या ऐप्लिकेशन को जबरन बंद किया है वगैरह. Android पर, डेटा मैसेज डिफ़ॉल्ट रूप से ऐप्लिकेशन को चालू कर देते हैं. फ़िलहाल, Chrome पर यह सुविधा उपलब्ध नहीं है.

mutable_content ज़रूरी नहीं, JSON बूलियन

Apple के प्लैटफ़ॉर्म पर, APNs पेलोड में mutable-content को दिखाने के लिए, इस फ़ील्ड का इस्तेमाल करें. जब कोई सूचना भेजी जाती है और इसे true पर सेट किया जाता है, तो सूचना दिखने से पहले, सूचना सेवा ऐप्लिकेशन एक्सटेंशन का इस्तेमाल करके, सूचना के कॉन्टेंट में बदलाव किया जा सकता है. Android और वेब के लिए, इस पैरामीटर को अनदेखा कर दिया जाएगा.

time_to_live ज़रूरी नहीं, संख्या

इस पैरामीटर से पता चलता है कि डिवाइस के ऑफ़लाइन होने पर, मैसेज को FCM के स्टोरेज में कितने समय (सेकंड में) तक रखा जाना चाहिए. ज़्यादा से ज़्यादा चार हफ़्ते तक टिकने की सुविधा उपलब्ध है. इसकी डिफ़ॉल्ट वैल्यू चार हफ़्ते है. ज़्यादा जानकारी के लिए, मैसेज के दिखने की अवधि सेट करना लेख पढ़ें.

dry_run ज़रूरी नहीं, बूलियन

इस पैरामीटर को true पर सेट करने पर, डेवलपर किसी मैसेज को भेजे बिना ही अनुरोध की जांच कर सकते हैं.

डिफ़ॉल्ट वैल्यू false है.

पेलोड
data ज़रूरी नहीं, ऑब्जेक्ट

यह पैरामीटर, मैसेज के पेलोड के की-वैल्यू पेयर की जानकारी देता है.

उदाहरण के लिए, data:{"score":"3x1"}:

Apple प्लैटफ़ॉर्म पर, अगर मैसेज APNs से डिलीवर किया जाता है, तो यह कस्टम डेटा फ़ील्ड दिखाता है. अगर इसे FCM डिलीवर करता है, तो इसे AppDelegate application:didReceiveRemoteNotification: में कीवर्ड वैल्यू डिक्शनरी के तौर पर दिखाया जाता है.

Android पर, इससे score नाम का एक इंटेंट एक्सट्रा बनता है, जिसमें स्ट्रिंग वैल्यू 3x1 होती है.

यह ज़रूरी है कि कुंजी कोई रिज़र्व शब्द न हो ("from", "message_type" या "google" या "gcm" से शुरू होने वाला कोई भी शब्द). इस टेबल में बताए गए किसी भी शब्द का इस्तेमाल न करें (जैसे, collapse_key).

हमारा सुझाव है कि स्ट्रिंग टाइप की वैल्यू दें. आपको ऑब्जेक्ट या स्ट्रिंग के अलावा किसी दूसरे डेटा टाइप (जैसे, इंटेजर या बूलियन) की वैल्यू को स्ट्रिंग में बदलना होगा.

notification ज़रूरी नहीं, ऑब्जेक्ट यह पैरामीटर, सूचना के पैल्यऑड के लिए पहले से तय किए गए, उपयोगकर्ता को दिखने वाले की-वैल्यू पेयर की जानकारी देता है. ज़्यादा जानकारी के लिए, सूचना पेलोड से जुड़ी सहायता देखें. सूचना मैसेज और डेटा मैसेज के विकल्पों के बारे में ज़्यादा जानने के लिए, मैसेज के टाइप देखें. अगर सूचना का पेलोड दिया गया है या किसी Apple डिवाइस पर मैसेज भेजने के लिए, content_available विकल्प को true पर सेट किया गया है, तो मैसेज एपीएन के ज़रिए भेजा जाता है. ऐसा न होने पर, मैसेज FCM के ज़रिए भेजा जाता है.

सूचना पेलोड के लिए सहायता

यहां दी गई टेबल में, Apple प्लैटफ़ॉर्म और Android के लिए सूचना मैसेज बनाने के लिए, पहले से तय की गई कुंजियों की सूची दी गई है.

टेबल 2a. Apple — सूचना मैसेज के लिए कुंजियां

पैरामीटर इस्तेमाल ब्यौरा
title ज़रूरी नहीं, स्ट्रिंग

सूचना का शीर्षक.

यह फ़ील्ड, फ़ोन और टैबलेट पर नहीं दिखता.

body ज़रूरी नहीं, स्ट्रिंग

सूचना के मुख्य हिस्से का टेक्स्ट.

sound ज़रूरी नहीं, स्ट्रिंग

डिवाइस पर सूचना मिलने पर बजने वाली आवाज़.

क्लाइंट ऐप्लिकेशन के मुख्य बंडल या ऐप्लिकेशन के डेटा कंटेनर के Library/Sounds फ़ोल्डर में मौजूद साउंड फ़ाइलों की जानकारी देने वाली स्ट्रिंग. ज़्यादा जानकारी के लिए, iOS डेवलपर लाइब्रेरी देखें.

badge ज़रूरी नहीं, स्ट्रिंग

होम स्क्रीन पर ऐप्लिकेशन आइकॉन पर मौजूद बैज की वैल्यू.

अगर कोई वैल्यू नहीं दी जाती है, तो बैज नहीं बदलता.

अगर इसकी वैल्यू 0 पर सेट की जाती है, तो बैज हट जाता है.

click_action ज़रूरी नहीं, स्ट्रिंग

सूचना पर उपयोगकर्ता के क्लिक से जुड़ी कार्रवाई.

यह APNs पेलोड में category से मेल खाता है.

subtitle ज़रूरी नहीं, स्ट्रिंग

सूचना का सबटाइटल.

body_loc_key ज़रूरी नहीं, स्ट्रिंग

ऐप्लिकेशन के स्ट्रिंग संसाधनों में मौजूद मुख्य स्ट्रिंग, जिसका इस्तेमाल मुख्य टेक्स्ट को उपयोगकर्ता की मौजूदा स्थानीय भाषा में अनुवाद करने के लिए किया जाता है.

यह APNs पेलोड में loc-key से मेल खाता है.

ज़्यादा जानकारी के लिए, पेलोड कुंजी का रेफ़रंस और रिमोट सूचनाओं के कॉन्टेंट को स्थानीय भाषा में उपलब्ध कराना देखें.

body_loc_args ज़रूरी नहीं, JSON कलेक्शन को स्ट्रिंग के तौर पर

वैरिएबल स्ट्रिंग की वैल्यू, body_loc_key में फ़ॉर्मैट के लिए इस्तेमाल होने वाले निर्देशों के बजाय इस्तेमाल की जाती हैं. इनका इस्तेमाल, मुख्य टेक्स्ट को उपयोगकर्ता के मौजूदा स्थानीय भाषा में बदलने के लिए किया जाता है.

यह APNs पेलोड में loc-args से मेल खाता है.

ज़्यादा जानकारी के लिए, पेलोड कुंजी का रेफ़रंस और रिमोट सूचनाओं के कॉन्टेंट को स्थानीय भाषा में उपलब्ध कराना देखें.

title_loc_key ज़रूरी नहीं, स्ट्रिंग

ऐप्लिकेशन के स्ट्रिंग संसाधनों में मौजूद टाइटल स्ट्रिंग की कुंजी, जिसका इस्तेमाल करके टाइटल टेक्स्ट को उपयोगकर्ता के मौजूदा स्थानीय भाषा में बदला जा सकता है.

यह APNs पेलोड में title-loc-key से मेल खाता है.

ज़्यादा जानकारी के लिए, पेलोड कुंजी का रेफ़रंस और रिमोट सूचनाओं के कॉन्टेंट को स्थानीय भाषा में उपलब्ध कराना देखें.

title_loc_args ज़रूरी नहीं, JSON कलेक्शन को स्ट्रिंग के तौर पर

title_loc_key में फ़ॉर्मैट के लिए इस्तेमाल होने वाले निर्देशों के बजाय, वैरिएबल स्ट्रिंग की वैल्यू का इस्तेमाल किया जाएगा. इससे, टाइटल टेक्स्ट को उपयोगकर्ता के मौजूदा स्थानीय भाषा के हिसाब से बदला जा सकेगा.

यह APNs पेलोड में title-loc-args से मेल खाता है.

ज़्यादा जानकारी के लिए, पेलोड कुंजी का रेफ़रंस और रिमोट सूचनाओं के कॉन्टेंट को स्थानीय भाषा में उपलब्ध कराना देखें.

टेबल 2b. Android — सूचना मैसेज के लिए कुंजियां

पैरामीटर इस्तेमाल ब्यौरा
title ज़रूरी नहीं, स्ट्रिंग

सूचना का शीर्षक.

body ज़रूरी नहीं, स्ट्रिंग

सूचना के मुख्य हिस्से का टेक्स्ट.

android_channel_id ज़रूरी नहीं, स्ट्रिंग

सूचना का चैनल आईडी (Android O में नया).

इस चैनल आईडी से कोई भी सूचना पाने से पहले, ऐप्लिकेशन को इस चैनल आईडी से एक चैनल बनाना होगा.

अगर अनुरोध में यह चैनल आईडी नहीं भेजा जाता है या दिए गए चैनल आईडी को ऐप्लिकेशन ने अब तक नहीं बनाया है, तो FCM, ऐप्लिकेशन मेनिफ़ेस्ट में बताए गए चैनल आईडी का इस्तेमाल करता है.

icon ज़रूरी नहीं, स्ट्रिंग

सूचना का आइकॉन.

ड्रॉबल संसाधन के लिए, सूचना आइकॉन को myicon पर सेट करता है myicon. अगर अनुरोध में यह कुंजी नहीं भेजी जाती है, तो FCM आपके ऐप्लिकेशन मेनिफ़ेस्ट में बताए गए लॉन्चर आइकॉन को दिखाता है.

sound ज़रूरी नहीं, स्ट्रिंग

डिवाइस पर सूचना मिलने पर बजने वाली आवाज़.

"default" या ऐप्लिकेशन में बंडल किए गए साउंड रिसॉर्स का फ़ाइल नाम इस्तेमाल किया जा सकता है. साउंड फ़ाइलें /res/raw/ में होनी चाहिए.

tag ज़रूरी नहीं, स्ट्रिंग

आइडेंटिफ़ायर, जिसका इस्तेमाल नोटिफ़िकेशन पैनल में मौजूदा सूचनाओं को बदलने के लिए किया जाता है.

अगर यह जानकारी नहीं दी जाती है, तो हर अनुरोध से एक नई सूचना बनती है.

अगर टैग तय किया गया है और उसी टैग वाली सूचना पहले से दिख रही है, तो नई सूचना, सूचनाओं के ड्रॉअर में मौजूद मौजूदा सूचना की जगह ले लेगी.

color ज़रूरी नहीं, स्ट्रिंग

सूचना के आइकॉन का रंग, जिसे #rrggbb फ़ॉर्मैट में दिखाया गया है.

click_action ज़रूरी नहीं, स्ट्रिंग

सूचना पर उपयोगकर्ता के क्लिक से जुड़ी कार्रवाई.

अगर कोई इंटेंट फ़िल्टर तय किया गया है, तो उपयोगकर्ता के सूचना पर क्लिक करने पर, मैच करने वाला इंटेंट फ़िल्टर वाली गतिविधि शुरू हो जाती है.

body_loc_key ज़रूरी नहीं, स्ट्रिंग

ऐप्लिकेशन के स्ट्रिंग संसाधनों में मौजूद मुख्य स्ट्रिंग, जिसका इस्तेमाल मुख्य टेक्स्ट को उपयोगकर्ता की मौजूदा स्थानीय भाषा में अनुवाद करने के लिए किया जाता है.

ज़्यादा जानकारी के लिए, स्ट्रिंग संसाधन देखें.

body_loc_args ज़रूरी नहीं, JSON कलेक्शन को स्ट्रिंग के तौर पर

वैरिएबल स्ट्रिंग की वैल्यू, body_loc_key में फ़ॉर्मैट के लिए इस्तेमाल होने वाले निर्देशों के बजाय इस्तेमाल की जाती हैं. इनका इस्तेमाल, मुख्य टेक्स्ट को उपयोगकर्ता के मौजूदा स्थानीय भाषा में बदलने के लिए किया जाता है.

ज़्यादा जानकारी के लिए, फ़ॉर्मैट और स्टाइल देखें.

title_loc_key ज़रूरी नहीं, स्ट्रिंग

ऐप्लिकेशन के स्ट्रिंग संसाधनों में मौजूद टाइटल स्ट्रिंग की कुंजी, जिसका इस्तेमाल करके टाइटल टेक्स्ट को उपयोगकर्ता के मौजूदा स्थानीय भाषा में बदला जा सकता है.

ज़्यादा जानकारी के लिए, स्ट्रिंग संसाधन देखें.

title_loc_args ज़रूरी नहीं, JSON कलेक्शन को स्ट्रिंग के तौर पर

title_loc_key में फ़ॉर्मैट के लिए इस्तेमाल होने वाले निर्देशों के बजाय, वैरिएबल स्ट्रिंग की वैल्यू का इस्तेमाल किया जाएगा. इससे, टाइटल टेक्स्ट को उपयोगकर्ता के मौजूदा स्थानीय भाषा के हिसाब से बदला जा सकेगा.

ज़्यादा जानकारी के लिए, फ़ॉर्मैट और स्टाइल देखें.

टेबल 2c. वेब (JavaScript) — सूचना मैसेज के लिए कुंजियां

पैरामीटर इस्तेमाल ब्यौरा
title ज़रूरी नहीं, स्ट्रिंग

सूचना का शीर्षक.

body ज़रूरी नहीं, स्ट्रिंग

सूचना के मुख्य हिस्से का टेक्स्ट.

icon ज़रूरी नहीं, स्ट्रिंग

सूचना के आइकॉन के लिए इस्तेमाल किया जाने वाला यूआरएल.

click_action ज़रूरी नहीं, स्ट्रिंग

सूचना पर उपयोगकर्ता के क्लिक से जुड़ी कार्रवाई.

सभी यूआरएल वैल्यू के लिए, एचटीटीपीएस होना ज़रूरी है.

डाउनस्ट्रीम XMPP मैसेज के जवाब को समझना

यहां दी गई टेबल में, डाउनस्ट्रीम XMPP मैसेज के जवाब में दिखने वाले फ़ील्ड की सूची दी गई है.

टेबल 3 डाउनस्ट्रीम मैसेज का XMPP रिस्पॉन्स बॉडी.

पैरामीटर इस्तेमाल ब्यौरा
from ज़रूरी है, स्ट्रिंग

इस पैरामीटर से पता चलता है कि यह जवाब किसने भेजा है.

इसकी वैल्यू, क्लाइंट ऐप्लिकेशन का रजिस्ट्रेशन टोकन होता है.

message_id ज़रूरी है, स्ट्रिंग यह पैरामीटर, XMPP कनेक्शन में किसी मैसेज की खास पहचान करता है. वैल्यू एक स्ट्रिंग होती है, जो उससे जुड़े मैसेज की खास पहचान करती है.
message_type ज़रूरी है, स्ट्रिंग

यह पैरामीटर, FCM से ऐप्लिकेशन सर्वर पर भेजे गए ack या nack मैसेज के बारे में बताता है.

अगर वैल्यू nack पर सेट है, तो ऐप्लिकेशन सर्वर को गड़बड़ी की जानकारी पाने के लिए, error और error_description को देखना चाहिए.

error ज़रूरी नहीं, स्ट्रिंग यह पैरामीटर, डाउनस्ट्रीम मैसेज से जुड़ी गड़बड़ी के बारे में बताता है. यह तब सेट होता है, जब message_type nack हो. ज़्यादा जानकारी के लिए, टेबल 4 देखें.
error_description ज़रूरी नहीं, स्ट्रिंग यह पैरामीटर, गड़बड़ी के बारे में जानकारी देता है. यह तब सेट होता है, जब message_type nack हो.

डाउनस्ट्रीम मैसेज से जुड़ी गड़बड़ी के रिस्पॉन्स कोड

नीचे दी गई टेबल में, डाउनस्ट्रीम मैसेज के लिए गड़बड़ी के रिस्पॉन्स कोड की सूची दी गई है.

टेबल 4 डाउनस्ट्रीम मैसेज से जुड़ी गड़बड़ी के रिस्पॉन्स कोड.

गड़बड़ी XMPP कोड सुझाई गई कार्रवाई
रजिस्ट्रेशन टोकन मौजूद नहीं है INVALID_JSON देखें कि अनुरोध में रजिस्ट्रेशन टोकन मौजूद है या नहीं. यह टोकन, सादे टेक्स्ट मैसेज में registration_id में या JSON में to या registration_ids फ़ील्ड में मौजूद होता है.
अमान्य APNs रजिस्ट्रेशन INVALID_JSON iOS रजिस्ट्रेशन के लिए, देखें कि क्लाइंट के रजिस्ट्रेशन अनुरोध में एक मान्य APNs टोकन और ऐप्लिकेशन आईडी हो.
रजिस्ट्रेशन टोकन अमान्य है BAD_REGISTRATION सर्वर को भेजे गए रजिस्ट्रेशन टोकन का फ़ॉर्मैट देखें. पक्का करें कि यह FCM के साथ रजिस्टर करने पर, क्लाइंट ऐप्लिकेशन को मिले रजिस्ट्रेशन टोकन से मैच करता हो. स्ट्रिंग को छोटा न करें या उसमें अतिरिक्त वर्ण न जोड़ें.
बिना रजिस्टर किए इस्तेमाल किया जा रहा डिवाइस DEVICE_UNREGISTERED कई मामलों में, मौजूदा रजिस्ट्रेशन टोकन अमान्य हो सकता है. इनमें ये भी शामिल हैं:
  • अगर क्लाइंट ऐप्लिकेशन, FCM के साथ अनरजिस्टर हो जाता है.
  • अगर क्लाइंट ऐप्लिकेशन अपने-आप अनरजिस्टर हो जाता है, तो ऐसा तब हो सकता है, जब उपयोगकर्ता ऐप्लिकेशन को अनइंस्टॉल कर दे. उदाहरण के लिए, iOS पर, अगर APNs ने APNs टोकन को अमान्य बताया है.
  • रजिस्ट्रेशन टोकन की समयसीमा खत्म होने पर (उदाहरण के लिए, Google, रजिस्ट्रेशन टोकन को रीफ़्रेश करने का फ़ैसला कर सकता है या डिवाइसों के लिए APNs टोकन की समयसीमा खत्म हो गई हो).
  • अगर क्लाइंट ऐप्लिकेशन अपडेट हो गया है, लेकिन नया वर्शन मैसेज पाने के लिए कॉन्फ़िगर नहीं किया गया है.
इन सभी मामलों में, ऐप्लिकेशन सर्वर से इस रजिस्ट्रेशन टोकन को हटाएं और मैसेज भेजने के लिए इसका इस्तेमाल बंद करें.
ईमेल भेजने वाले का नाम मेल न खाना SENDER_ID_MISMATCH रजिस्ट्रेशन टोकन, ईमेल भेजने वाले लोगों के किसी ग्रुप से जुड़ा होता है. जब कोई क्लाइंट ऐप्लिकेशन FCM के लिए रजिस्टर करता है, तो उसे यह बताना होगा कि किन लोगों को मैसेज भेजने की अनुमति है. क्लाइंट ऐप्लिकेशन पर मैसेज भेजते समय, आपको उनमें से किसी एक आईडी का इस्तेमाल करना चाहिए. किसी दूसरे आईडी पर स्विच करने पर, मौजूदा रजिस्ट्रेशन टोकन काम नहीं करेंगे.
अमान्य JSON INVALID_JSON देखें कि JSON मैसेज सही फ़ॉर्मैट में है या नहीं. साथ ही, यह भी देखें कि उसमें मान्य फ़ील्ड शामिल हैं या नहीं. उदाहरण के लिए, यह पक्का करना कि सही डेटा टाइप पास किया गया हो.
मैसेज का साइज़ बहुत बड़ा है INVALID_JSON देखें कि किसी मैसेज में शामिल पेलोड डेटा का कुल साइज़, FCM की सीमाओं से ज़्यादा न हो: ज़्यादातर मैसेज के लिए 4096 बाइट या विषयों के लिए मैसेज के मामले में 2048 बाइट. इसमें, की और वैल्यू, दोनों शामिल हैं.
डेटा कुंजी अमान्य है INVALID_JSON देखें कि पेलोड डेटा में ऐसी कोई कुंजी (जैसे, from, gcm या google से शुरू होने वाली कोई वैल्यू) शामिल न हो जिसका इस्तेमाल FCM अंदरूनी तौर पर करता है. ध्यान दें कि कुछ शब्दों (जैसे, collapse_key) का इस्तेमाल FCM भी करता है. हालांकि, इन्हें पेलोड में इस्तेमाल करने की अनुमति है. ऐसे में, पेलोड की वैल्यू को FCM की वैल्यू से बदल दिया जाता है.
टाइम टू लाइव अमान्य है INVALID_JSON पक्का करें कि time_to_live में इस्तेमाल की गई वैल्यू, सेकंड में कुल समय को दिखाने वाला पूर्णांक हो. यह समय 0 से 2,419,200 (चार हफ़्ते) के बीच होना चाहिए.
गलत ACK मैसेज BAD_ACK फिर से कोशिश करने से पहले, देख लें कि ack मैसेज का फ़ॉर्मैट सही है या नहीं. ज़्यादा जानकारी के लिए, टेबल 6 देखें.
समय खत्म हो गया (टाइम आउट) SERVICE_UNAVAILABLE

सर्वर, अनुरोध को समय पर प्रोसेस नहीं कर सका. उसी अनुरोध को फिर से भेजें. हालांकि, इसके लिए आपको:

  • फिर से कोशिश करने की सुविधा में एक्सपोनेंशियल बैकऑफ़ लागू करें. उदाहरण के लिए, अगर पहली बार फिर से कोशिश करने से पहले एक सेकंड इंतज़ार किया गया है, तो अगली बार कम से कम दो सेकंड इंतज़ार करें. इसके बाद, चार सेकंड इंतज़ार करें और इसी तरह आगे भी करें. अगर एक से ज़्यादा मैसेज भेजे जा रहे हैं, तो हर मैसेज को अलग-अलग समय पर भेजें. ऐसा करने से, एक ही समय पर सभी मैसेज के लिए नया अनुरोध करने से बचा जा सकता है.
  • फिर से कोशिश करने में लगने वाला शुरुआती समय एक सेकंड पर सेट होना चाहिए.

ध्यान दें: समस्याएं पैदा करने वाले ईमेल भेजने वालों को ब्लैकलिस्ट किया जा सकता है.

सर्वर में गड़बड़ी INTERNAL_SERVER_
ERROR
अनुरोध को प्रोसेस करते समय सर्वर में गड़बड़ी हुई. "समयसीमा" में बताई गई ज़रूरी शर्तों का पालन करके, उसी अनुरोध को फिर से आज़माया जा सकता है. इसके लिए, ऊपर दी गई लाइन देखें.
डिवाइस पर मैसेज भेजने की दर तय सीमा से ज़्यादा हो गई DEVICE_MESSAGE_RATE
_EXCEEDED
किसी डिवाइस पर मैसेज भेजने की दर बहुत ज़्यादा है. इस डिवाइस पर भेजे जाने वाले मैसेज की संख्या कम करें और इस डिवाइस पर तुरंत मैसेज भेजने की कोशिश न करें.
Topics पर मैसेज भेजने की दर तय सीमा से ज़्यादा हो गई है TOPICS_MESSAGE_RATE
_EXCEEDED
किसी खास विषय के लिए सदस्यों को भेजे जाने वाले मैसेज की दर बहुत ज़्यादा है. इस विषय के लिए भेजे गए मैसेज की संख्या कम करें और तुरंत फिर से मैसेज भेजने की कोशिश न करें.
कनेक्‍शन ड्रेनिंग CONNECTION_DRAINING कनेक्शन खराब होने की वजह से, मैसेज प्रोसेस नहीं किया जा सका. ऐसा इसलिए होता है, क्योंकि FCM को समय-समय पर लोड बैलेंस करने के लिए, कनेक्शन बंद करना पड़ता है. मैसेज को किसी दूसरे XMPP कनेक्शन से भेजने की कोशिश करें.
APNs के अमान्य क्रेडेंशियल INVALID_APNS_CREDENTIAL iOS डिवाइस को टारगेट किया गया मैसेज नहीं भेजा जा सका, क्योंकि ज़रूरी APNs पुष्टि करने वाली कुंजी अपलोड नहीं की गई थी या उसकी समयसीमा खत्म हो गई है. देखें कि आपके डेवलपमेंट और प्रोडक्शन क्रेडेंशियल मान्य हैं या नहीं.
पुष्टि नहीं हो सकी AUTHENTICATION_FAILED बाहरी पुश सेवाओं से पुष्टि नहीं की जा सकी. देखें कि क्या आपने सही वेब पुश सर्टिफ़िकेट का इस्तेमाल किया है.

अपस्ट्रीम मैसेज का सिंटैक्स

अपस्ट्रीम मैसेज वह मैसेज होता है जिसे क्लाइंट ऐप्लिकेशन, ऐप्लिकेशन सर्वर को भेजता है. फ़िलहाल, सिर्फ़ XMPP में अपस्ट्रीम मैसेजिंग की सुविधा काम करती है. क्लाइंट ऐप्लिकेशन से मैसेज भेजने के बारे में ज़्यादा जानकारी के लिए, अपने प्लैटफ़ॉर्म का दस्तावेज़ देखें.

अपस्ट्रीम XMPP मैसेज को समझना

नीचे दी गई टेबल में, क्लाइंट ऐप्लिकेशन से मैसेज के अनुरोधों के जवाब में, FCM से जनरेट किए गए XMPP स्टैंश में मौजूद फ़ील्ड के बारे में बताया गया है.

टेबल 5 अपस्ट्रीम XMPP मैसेज.

पैरामीटर इस्तेमाल ब्यौरा
from ज़रूरी है, स्ट्रिंग

इस पैरामीटर से पता चलता है कि मैसेज किसने भेजा है.

इसकी वैल्यू, क्लाइंट ऐप्लिकेशन का रजिस्ट्रेशन टोकन होता है.

category ज़रूरी है, स्ट्रिंग इस पैरामीटर से, मैसेज भेजने वाले क्लाइंट ऐप्लिकेशन के ऐप्लिकेशन पैकेज का नाम पता चलता है.
message_id ज़रूरी है, स्ट्रिंग यह पैरामीटर, मैसेज का यूनीक आईडी बताता है.
data ज़रूरी नहीं, स्ट्रिंग यह पैरामीटर, मैसेज के पेलोड के की-वैल्यू पेयर की जानकारी देता है.

ACK मैसेज भेजना

नीचे दी गई टेबल में, ऐप्लिकेशन सर्वर को मिले अपस्ट्रीम मैसेज के जवाब में, FCM को भेजे जाने वाले ACK रिस्पॉन्स के बारे में बताया गया है.

टेबल 6 अपस्ट्रीम XMPP मैसेज का जवाब.

पैरामीटर इस्तेमाल ब्यौरा
to ज़रूरी है, स्ट्रिंग

यह पैरामीटर, जवाब वाले मैसेज पाने वाले व्यक्ति की जानकारी देता है.

वैल्यू, अपस्ट्रीम मैसेज भेजने वाले क्लाइंट ऐप्लिकेशन का रजिस्ट्रेशन टोकन होना चाहिए.

message_id ज़रूरी है, स्ट्रिंग इस पैरामीटर से पता चलता है कि जवाब किस मैसेज के लिए है. यह वैल्यू, अपस्ट्रीम मैसेज की message_id वैल्यू होनी चाहिए.
message_type ज़रूरी है, स्ट्रिंग यह पैरामीटर, ऐप्लिकेशन सर्वर से सीसीएस को भेजे गए ack मैसेज के बारे में बताता है. अपस्ट्रीम मैसेज के लिए, इसे हमेशा ack पर सेट किया जाना चाहिए.

FCM सर्वर मैसेज (XMPP)

यह FCM से ऐप्लिकेशन सर्वर पर भेजा गया मैसेज है. यहां मुख्य तौर पर उन मैसेज के बारे में बताया गया है जिन्हें FCM ऐप्लिकेशन सर्वर को भेजता है:

  • कंट्रोल: सीएसएस से जनरेट किए गए ये मैसेज बताते हैं कि ऐप्लिकेशन सर्वर को कार्रवाई करनी होगी.

नीचे दी गई टेबल में, उन फ़ील्ड के बारे में बताया गया है जो CCS किसी ऐप्लिकेशन सर्वर को भेजता है.

टेबल 7 FCM कंट्रोल मैसेज (XMPP).

पैरामीटर इस्तेमाल ब्यौरा
सामान्य फ़ील्ड
message_type ज़रूरी है, स्ट्रिंग

इस पैरामीटर से मैसेज का टाइप पता चलता है: कंट्रोल.

अगर यह control पर सेट है, तो मैसेज में control_type शामिल होता है, ताकि कंट्रोल मैसेज के टाइप का पता चल सके.

control_type ज़रूरी नहीं, स्ट्रिंग

यह पैरामीटर, FCM से भेजे गए कंट्रोल मैसेज के टाइप की जानकारी देता है.

फ़िलहाल, सिर्फ़ CONNECTION_DRAINING का इस्तेमाल किया जा सकता है. FCM, लोड बैलेंस करने के लिए कनेक्शन बंद करने से पहले, यह कंट्रोल मैसेज भेजता है. कनेक्शन खत्म होने पर, उस पर कोई और मैसेज भेजा नहीं जा सकता. हालांकि, पाइपलाइन में मौजूद मौजूदा मैसेज प्रोसेस होते रहेंगे.