Firebase क्लाउड से मैसेज वाला एचटीटीपी प्रोटोकॉल

इस दस्तावेज़ में, एचटीटीपी सिंटैक्स का रेफ़रंस दिया गया है. इसका इस्तेमाल, Firebase Cloud Messaging के ज़रिए आपके ऐप्लिकेशन सर्वर से क्लाइंट ऐप्लिकेशन पर मैसेज भेजने के लिए किया जाता है.

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

https://fcm.googleapis.com/fcm/send

उपलब्ध पैरामीटर और विकल्पों को इन बड़ी कैटगरी में बांटा गया है:

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

इस सेक्शन में, डाउनस्ट्रीम मैसेज भेजने और Firebase Cloud Messaging से मिले एचटीटीपी रिस्पॉन्स को समझने के लिए सिंटैक्स दिया गया है.

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

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

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

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

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

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

registration_ids
ज़रूरी नहीं, स्ट्रिंग का कलेक्शन

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

वैल्यू, रजिस्ट्रेशन टोकन का कलेक्शन होना चाहिए, जिस पर मल्टीकास्ट मैसेज भेजना है. ऐरे में कम से कम एक और ज़्यादा से ज़्यादा 1,000 रजिस्ट्रेशन टोकन होने चाहिए. किसी एक डिवाइस पर मैसेज भेजने के लिए, to पैरामीटर का इस्तेमाल करें.

मल्टीकास्ट मैसेज भेजने के लिए, सिर्फ़ एचटीटीपी JSON फ़ॉर्मैट का इस्तेमाल किया जा सकता है.

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

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

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

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

notification_key
अब काम नहीं करता
ज़रूरी नहीं, स्ट्रिंग

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

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

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

ध्यान दें कि मैसेज किस क्रम में भेजे जाएंगे, इसकी कोई गारंटी नहीं है.

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

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

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

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

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

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

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

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

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

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

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

restricted_package_
name
(सिर्फ़ Android वर्शन पर)
ज़रूरी नहीं, स्ट्रिंग यह पैरामीटर, उस ऐप्लिकेशन के पैकेज के नाम की जानकारी देता है जहां मैसेज पाने के लिए, रजिस्टरेशन टोकन मैच होने चाहिए.
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 के ज़रिए भेजा जाता है.

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

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

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

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

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

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

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

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

एपीएन पेलोड में मौजूद 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 ज़रूरी नहीं, स्ट्रिंग

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

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

डाउनस्ट्रीम एचटीटीपी मैसेज (सामान्य टेक्स्ट)

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

टेबल 3. डाउनस्ट्रीम के सादे टेक्स्ट वाले एचटीटीपी मैसेज के लिए टारगेट, विकल्प, और पेलोड.

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

इस पैरामीटर से उन क्लाइंट ऐप्लिकेशन (रजिस्ट्रेशन टोकन) के बारे में पता चलता है जिन्हें मैसेज मिल रहा है.

मल्टीकास्ट मैसेजिंग (एक से ज़्यादा रजिस्ट्रेशन टोकन पर भेजना) की अनुमति सिर्फ़ एचटीटीपी JSON फ़ॉर्मैट का इस्तेमाल करके दी जाती है.

विकल्प
collapse_key ज़रूरी नहीं, स्ट्रिंग ज़्यादा जानकारी के लिए, टेबल 1 देखें.
time_to_live ज़रूरी नहीं है, नंबर ज़्यादा जानकारी के लिए, टेबल 1 देखें.
restricted_package_name ज़रूरी नहीं, स्ट्रिंग ज़्यादा जानकारी के लिए, टेबल 1 देखें.
dry_run ज़रूरी नहीं, बूलियन ज़्यादा जानकारी के लिए, टेबल 1 देखें.
पेलोड
data.<key> ज़रूरी नहीं, स्ट्रिंग

यह पैरामीटर, मैसेज के पेलोड के की-वैल्यू पेयर की जानकारी देता है. की-वैल्यू पैरामीटर की संख्या पर कोई सीमा नहीं है, हालांकि, मैसेज के साइज़ की कुल सीमा 4096 बाइट है.

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

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

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

FCM से भेजे गए मैसेज के जवाब का विश्लेषण करने के लिए, ऐप्लिकेशन सर्वर को मैसेज के रिस्पॉन्स हेडर और मुख्य हिस्से, दोनों का आकलन करना चाहिए. इस टेबल में, संभावित जवाबों के बारे में बताया गया है.

टेबल 4. डाउनस्ट्रीम एचटीटीपी मैसेज रिस्पॉन्स हेडर.

जवाब ब्यौरा
200 मैसेज को प्रोसेस कर दिया गया. रिस्पॉन्स बॉडी में मैसेज के स्टेटस के बारे में ज़्यादा जानकारी होगी. हालांकि, इसका फ़ॉर्मैट इस बात पर निर्भर करेगा कि अनुरोध JSON में किया गया था या सादे टेक्स्ट में. ज़्यादा जानकारी के लिए, टेबल 5 देखें.
400 यह सिर्फ़ JSON अनुरोधों पर लागू होता है. इससे पता चलता है कि अनुरोध को JSON के तौर पर पार्स नहीं किया जा सका या फिर उसमें अमान्य फ़ील्ड मौजूद थे. उदाहरण के लिए, ऐसी स्ट्रिंग पास करना जिसमें कोई संख्या होनी चाहिए थी. जवाब में, अनुरोध पूरा न हो पाने की सटीक वजह बताई गई है. अनुरोध फिर से करने से पहले, इस समस्या को ठीक कर लेना चाहिए.
401 ईमेल भेजने वाले खाते की पुष्टि करने में कोई गड़बड़ी हुई.
5xx 500 से 599 के बीच की गड़बड़ियां (जैसे, 500 या 503) बताती हैं कि अनुरोध को प्रोसेस करने के दौरान, FCM बैकएंड में कोई अंदरूनी गड़बड़ी हुई थी या सर्वर कुछ समय के लिए उपलब्ध नहीं है. उदाहरण के लिए, टाइम आउट की वजह से. ईमेल भेजने वाले को बाद में फिर से कोशिश करनी होगी. साथ ही, जवाब में शामिल किसी भी Retry-After हेडर का पालन करना होगा. ऐप्लिकेशन सर्वर को एक्स्पोनेंशियल बैक-ऑफ़ लागू करना होगा.

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

टेबल 5. डाउनस्ट्रीम एचटीटीपी मैसेज का रिस्पॉन्स बॉडी (JSON).

पैरामीटर इस्तेमाल ब्यौरा
multicast_id ज़रूरी है, नंबर मल्टीकास्ट मैसेज की पहचान करने वाला यूनीक आईडी (नंबर).
success ज़रूरी है, नंबर उन मैसेज की संख्या जिन्हें बिना किसी गड़बड़ी के प्रोसेस किया गया.
failure ज़रूरी है, नंबर ऐसे मैसेज की संख्या जिन्हें प्रोसेस नहीं किया जा सका.
results ज़रूरी है, ऑब्जेक्ट का कलेक्शन प्रोसेस किए गए मैसेज की स्थिति दिखाने वाले ऑब्जेक्ट का कलेक्शन. ऑब्जेक्ट, अनुरोध के उसी क्रम में सूची में होते हैं जिस क्रम में अनुरोध किया गया था. इसका मतलब है कि अनुरोध में मौजूद हर रजिस्ट्रेशन आईडी के लिए, उसका नतीजा रिस्पॉन्स में उसी इंडेक्स में दिखता है.
  • message_id: प्रोसेस किए गए हर मैसेज के लिए यूनीक आईडी बताने वाली स्ट्रिंग.
  • error: इस स्ट्रिंग में, मैसेज पाने वाले व्यक्ति के लिए मैसेज को प्रोसेस करते समय हुई गड़बड़ी के बारे में जानकारी होती है. संभावित वैल्यू, टेबल 9 में देखी जा सकती हैं.

टेबल 6. विषय से जुड़े मैसेज एचटीटीपी रिस्पॉन्स का मुख्य हिस्सा (JSON).

पैरामीटर इस्तेमाल ब्यौरा
message_id ज़रूरी नहीं, संख्या जब FCM को अनुरोध मिल जाता है, तब विषय का मैसेज आईडी, सदस्यता वाले सभी डिवाइसों पर डिलीवर करने की कोशिश की जाएगी.
error ज़रूरी नहीं, स्ट्रिंग मैसेज को प्रोसेस करते समय हुई गड़बड़ी. संभावित वैल्यू, टेबल 9 में देखी जा सकती हैं.

टेबल 7. डाउनस्ट्रीम एचटीटीपी मैसेज के रिस्पॉन्स बॉडी (सादा टेक्स्ट) के लिए, सफलता का रिस्पॉन्स.

पैरामीटर इस्तेमाल ब्यौरा
id ज़रूरी है, स्ट्रिंग इस पैरामीटर से, प्रोसेस किए गए यूनीक मैसेज आईडी FCM की जानकारी मिलती है.
registration_id ज़रूरी नहीं, स्ट्रिंग यह पैरामीटर क्लाइंट ऐप्लिकेशन के लिए रजिस्ट्रेशन टोकन के बारे में बताता है, जिस पर मैसेज को प्रोसेस करके भेजा गया था.

टेबल 8. डाउनस्ट्रीम एचटीटीपी मैसेज के जवाब का मुख्य हिस्सा (सामान्य टेक्स्ट) के लिए गड़बड़ी का जवाब.

पैरामीटर इस्तेमाल ब्यौरा
Error ज़रूरी है, स्ट्रिंग यह पैरामीटर, मैसेज पाने वाले व्यक्ति के लिए मैसेज को प्रोसेस करते समय गड़बड़ी की वैल्यू बताता है. ज़्यादा जानकारी के लिए, टेबल 9 देखें.

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

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

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

गड़बड़ी एचटीटीपी कोड सुझाई गई कार्रवाई
रजिस्ट्रेशन टोकन मौजूद नहीं है 200 + error:MissingRegistration देख लें कि अनुरोध में रजिस्ट्रेशन टोकन मौजूद है या नहीं (सामान्य टेक्स्ट मैसेज के तौर पर registration_id में या JSON में to या registration_ids फ़ील्ड में).
रजिस्ट्रेशन टोकन अमान्य है 200 + error:InvalidRegistration उस रजिस्ट्रेशन टोकन के फ़ॉर्मैट की जांच करें जिसे आपने सर्वर को पास किया है. पक्का करें कि यह रजिस्ट्रेशन टोकन से मेल खाता हो. यह टोकन, क्लाइंट ऐप्लिकेशन को Firebase की सूचनाओं के साथ रजिस्टर करने पर मिला है. टेक्स्ट को छोटा न करें या उसमें अतिरिक्त वर्ण न जोड़ें.
बिना रजिस्टर किए इस्तेमाल किया जा रहा डिवाइस 200 + गड़बड़ी:रजिस्टर नहीं किया गया कई मामलों में, मौजूदा रजिस्ट्रेशन टोकन अमान्य हो सकता है. इनमें ये शामिल हैं:
  • अगर क्लाइंट ऐप्लिकेशन, FCM के साथ अनरजिस्टर हो जाता है.
  • अगर क्लाइंट ऐप्लिकेशन अपने-आप अनरजिस्टर हो जाता है, तो ऐसा तब हो सकता है, जब उपयोगकर्ता ऐप्लिकेशन को अनइंस्टॉल कर दे. उदाहरण के लिए, iOS पर, अगर APNs फ़ीडबैक सेवा ने APNs टोकन को अमान्य बताया है.
  • अगर रजिस्ट्रेशन टोकन की समयसीमा खत्म हो जाती है, तो (उदाहरण के लिए, Google रजिस्ट्रेशन टोकन रीफ़्रेश कर सकता है या iOS डिवाइसों के लिए एपीएन टोकन की समयसीमा खत्म हो गई है).
  • अगर क्लाइंट ऐप्लिकेशन अपडेट हो गया है, लेकिन नया वर्शन मैसेज पाने के लिए कॉन्फ़िगर नहीं किया गया है.
ऐसे सभी मामलों में, ऐप्लिकेशन के सर्वर से इस रजिस्ट्रेशन टोकन को हटा दें और मैसेज भेजने के लिए इसका इस्तेमाल करना बंद कर दें.
पैकेज का नाम अमान्य है 200 + error:InvalidPackageName पक्का करें कि मैसेज ऐसे रजिस्ट्रेशन टोकन पर भेजा गया हो जिसके पैकेज का नाम, अनुरोध में दी गई वैल्यू से मेल खाता हो.
प्रमाणीकरण गड़बड़ी 401 मैसेज भेजने के लिए इस्तेमाल किए गए ईमेल पते की पुष्टि नहीं की जा सकी. इसकी ये वजहें हो सकती हैं:
  • एचटीटीपी अनुरोध में, अनुमति वाला हेडर मौजूद नहीं है या उसका सिंटैक्स अमान्य है.
  • जिस Firebase प्रोजेक्ट से यह सर्वर पासकोड जुड़ा है वह गलत है.
  • सिर्फ़ लेगसी सर्वर कुंजियां—अनुरोध, ऐसे सर्वर से आया है जिसे सर्वर कुंजी के आईपी में शामिल नहीं किया गया है.
देखें कि पुष्टि करने वाले हेडर में जो टोकन भेजा जा रहा है वह आपके प्रोजेक्ट से जुड़ी सही सर्वर कुंजी है या नहीं. ज़्यादा जानकारी के लिए, सर्वर कुंजी की पुष्टि की जांच करना देखें. अगर लेगसी सर्वर पासकोड का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि आप किसी ऐसे नए पासकोड पर अपग्रेड करें जिस पर आईपी से जुड़ी कोई पाबंदी न हो. लेगसी सर्वर पासकोड माइग्रेट करना लेख पढ़ें.
ईमेल भेजने वाले व्यक्ति का नाम मेल नहीं खाता 200 + error:MismatchSenderId रजिस्ट्रेशन टोकन, ईमेल भेजने वाले लोगों के किसी ग्रुप से जुड़ा होता है. जब कोई क्लाइंट ऐप्लिकेशन, FCM के लिए रजिस्टर होता है, तो उसे यह बताना होगा कि भेजने वाले किन लोगों को मैसेज भेजने की अनुमति है. क्लाइंट ऐप्लिकेशन पर मैसेज भेजते समय, आपको उनमें से किसी एक आईडी का इस्तेमाल करना चाहिए. किसी दूसरे आईडी पर स्विच करने पर, मौजूदा रजिस्ट्रेशन टोकन काम नहीं करेंगे.
अमान्य JSON 400 देखें कि JSON मैसेज सही फ़ॉर्मैट में है या नहीं. साथ ही, यह भी देखें कि उसमें मान्य फ़ील्ड शामिल हैं या नहीं. उदाहरण के लिए, यह पक्का करना कि सही डेटा टाइप पास किया गया हो.
अमान्य पैरामीटर 400 + error:InvalidParameters देखें कि दिए गए पैरामीटर का नाम और टाइप सही हो.
मैसेज का साइज़ बहुत बड़ा है 200 + गड़बड़ी:MessageTooBig देख लें कि मैसेज में शामिल पेलोड डेटा का कुल साइज़, FCM की सीमा से ज़्यादा न हो: ज़्यादातर मैसेज के लिए 4096 बाइट या विषयों के मैसेज के मामले में 2048 बाइट. इसमें, की और वैल्यू, दोनों शामिल हैं.
अमान्य डेटा कुंजी 200 + गड़बड़ी:
अमान्यDataKey
देखें कि पेलोड डेटा में कोई ऐसी कुंजी (जैसे, from, gcm या google से शुरू होने वाली कोई वैल्यू) शामिल न हो जिसका इस्तेमाल FCM अंदरूनी तौर पर करता है. ध्यान दें कि कुछ शब्दों (जैसे, collapse_key) का इस्तेमाल FCM भी करता है, लेकिन इन्हें पेलोड में इस्तेमाल करने की अनुमति है. ऐसे में, पेलोड की वैल्यू को FCM की वैल्यू से बदल दिया जाएगा.
टाइम टू लाइव अमान्य है 200 + error:InvalidTtl पक्का करें कि time_to_live में इस्तेमाल की गई वैल्यू, सेकंड में कुल समय को दिखाने वाला पूर्णांक हो. यह समय 0 से 2,419,200 (4 हफ़्ते) के बीच होना चाहिए.
समय खत्म हो गया (टाइम आउट) 5xx या 200 + गड़बड़ी:उपलब्ध नहीं है

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

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

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

सर्वर में गड़बड़ी 500 या 200 + गड़बड़ी:InternalServerError अनुरोध को प्रोसेस करते समय सर्वर में गड़बड़ी हुई. "समयसीमा" में बताई गई ज़रूरी शर्तों का पालन करके, उसी अनुरोध को फिर से आज़माया जा सकता है. इसके लिए, ऊपर दी गई लाइन देखें. अगर गड़बड़ी बनी रहती है, तो कृपया Firebase की सहायता टीम से संपर्क करें.
डिवाइस पर मैसेज की दर पार हो गई 200 + गड़बड़ी:
DeviceMessageRate
तय सीमा से ज़्यादा

किसी खास डिवाइस पर मैसेज भेजने की दर बहुत ज़्यादा है. अगर कोई Apple ऐप्लिकेशन, APNs की तय सीमा से ज़्यादा दर से मैसेज भेजता है, तो उसे गड़बड़ी का यह मैसेज मिल सकता है

इस डिवाइस पर भेजे जाने वाले मैसेज की संख्या कम करें और मैसेज भेजने की कोशिश फिर से करने के लिए, एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करें.

Topics पर मैसेज भेजने की दर तय सीमा से ज़्यादा हो गई है 200 + गड़बड़ी:
TopicsMessageRate
तय सीमा से ज़्यादा
किसी खास विषय पर सदस्यों को भेजे जाने वाले मैसेज की दर बहुत ज़्यादा है. इस विषय के लिए भेजे गए मैसेज की संख्या कम करें और फिर से मैसेज भेजने के लिए, एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करें.
अमान्य एपीएन क्रेडेंशियल 200 से ज़्यादा वाली गड़बड़ी:
InvalidApnsCredential
किसी Apple डिवाइस को टारगेट करने वाला मैसेज नहीं भेजा जा सका, क्योंकि ज़रूरी एपीएन पुष्टि कुंजी अपलोड नहीं हुई या उसकी समयसीमा खत्म हो गई है. देखें कि आपके डेवलपमेंट और प्रोडक्शन क्रेडेंशियल मान्य हैं या नहीं.

डिवाइस ग्रुप मैनेजमेंट

नीचे दी गई टेबल में, डिवाइस ग्रुप बनाने, सदस्यों को जोड़ने, और हटाने के लिए कुंजियों की सूची दी गई है. ज़्यादा जानकारी के लिए, अपने प्लैटफ़ॉर्म के लिए बनी गाइड देखें. जैसे, iOS+ या Android.

टेबल 10. डिवाइस ग्रुप मैनेजमेंट पासकोड.

पैरामीटर इस्तेमाल ब्यौरा
operation ज़रूरी है, स्ट्रिंग चलाने के लिए मान्य वैल्यू.ये वैल्यू create, add, और remove हैं.
notification_key_name ज़रूरी स्ट्रिंग डिवाइस ग्रुप का वह नाम जो उपयोगकर्ता ने तय किया है. इसे बनाया या बदला जा सकता है.
notification_key ज़रूरी है (create ऑपरेशन, स्ट्रिंग डिवाइस ग्रुप का यूनीक आइडेंटिफ़ायर. यह वैल्यू, create ऑपरेशन के सही तरीके से होने पर रिस्पॉन्स में दिखती है. साथ ही, डिवाइस ग्रुप पर होने वाले सभी बाद के ऑपरेशन के लिए ज़रूरी है.
registration_ids ज़रूरी है, स्ट्रिंग का कलेक्शन जो डिवाइस टोकन जोड़ने या हटाने हैं. अगर किसी डिवाइस ग्रुप से सभी मौजूदा रजिस्ट्रेशन टोकन हटाए जाते हैं, तो FCM डिवाइस ग्रुप को मिटा देता है.