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

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

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

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

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

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

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

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

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

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

पैरामीटर इस्तेमाल किए जाने से जुड़ी जानकारी जानकारी
टारगेट
to ज़रूरी नहीं, स्ट्रिंग

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

content_available वैकल्पिक, बूलियन

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

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

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

time_to_live ज़रूरी नहीं है, नंबर

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

dry_run वैकल्पिक, बूलियन

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

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

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

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

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

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

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

कुंजी कोई रिज़र्व शब्द ("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 ज़रूरी नहीं, स्ट्रिंग

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

एपीएन पेलोड में मौजूद category से मेल खाता है.

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

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

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

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

एपीएन पेलोड में मौजूद loc-key से मेल खाता है.

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

body_loc_args ज़रूरी नहीं है. JSON फ़ॉर्मैट में अरे को स्ट्रिंग के तौर पर दिखाया गया है

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

एपीएन पेलोड में मौजूद loc-args से मेल खाता है.

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

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

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

एपीएन पेलोड में मौजूद title-loc-key से मेल खाता है.

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

title_loc_args ज़रूरी नहीं है. JSON फ़ॉर्मैट में अरे को स्ट्रिंग के तौर पर दिखाया गया है

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

एपीएन पेलोड में मौजूद 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 मैसेज के जवाब में दिखते हैं.

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

सर्वर समय पर अनुरोध को प्रोसेस नहीं कर सका. उसी अनुरोध को फिर से करने की कोशिश करें, लेकिन आपको ये काम ज़रूर करने होंगे:

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

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

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

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

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

किसी अपस्ट्रीम XMPP मैसेज की व्याख्या करना

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

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

पैरामीटर इस्तेमाल किए जाने से जुड़ी जानकारी जानकारी
from ज़रूरी स्ट्रिंग

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

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

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

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

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

टेबल 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 यह कंट्रोल मैसेज, लोड बैलेंसिंग के लिए कनेक्शन बंद करने से पहले भेजता है. कनेक्शन खत्म होने पर, कनेक्शन पर और मैसेज भेजने की अनुमति नहीं दी जाती. हालांकि, पाइपलाइन में मौजूद मैसेज प्रोसेस होते रहते हैं.