FCM से जुड़ी गड़बड़ी के कोड

HTTP v1 API के लिए REST गड़बड़ी के कोड

HTTP v1 API के लिए, एचटीटीपी गड़बड़ी के जवाबों में गड़बड़ी का कोड, गड़बड़ी का मैसेज, और गड़बड़ी का स्टेटस शामिल होता है. इनमें, गड़बड़ी के बारे में ज़्यादा जानकारी देने वाली details कलेक्शन भी शामिल हो सकती है.

गड़बड़ी के जवाबों के दो सैंपल यहां दिए गए हैं:

पहला उदाहरण: डेटा मैसेज में अमान्य वैल्यू वाले, एचटीटीपी v1 API के अनुरोध से मिला गड़बड़ी का जवाब

{
  "error": {
    "code": 400,
    "message": "Invalid value at 'message.data[0].value' (TYPE_STRING), 12",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "message.data[0].value",
            "description": "Invalid value at 'message.data[0].value' (TYPE_STRING), 12"
          }
        ]
      }
    ]
  }
}

दूसरा उदाहरण: अमान्य रजिस्ट्रेशन टोकन वाले, एचटीटीपी v1 API के अनुरोध से मिला गड़बड़ी का जवाब

{
  "error": {
    "code": 400,
    "message": "The registration token is not a valid FCM registration token",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "INVALID_ARGUMENT"
      }
    ]
   }
}

ध्यान दें कि दोनों मैसेज में एक ही कोड और स्टेटस है. हालांकि, details कलेक्शन में अलग-अलग टाइप की वैल्यू शामिल हैं. पहले उदाहरण में, type.googleapis.com/google.rpc.BadRequest टाइप है. इससे पता चलता है कि अनुरोध की वैल्यू में गड़बड़ी है. दूसरे उदाहरण में, type.googleapis.com/google.firebase.fcm.v1.FcmError टाइप है. इसमें, FCM से जुड़ी गड़बड़ी है. कई गड़बड़ियों के लिए, details कलेक्शन में वह जानकारी शामिल होती है जिसकी मदद से डीबग किया जा सकता है और समस्या का समाधान ढूंढा जा सकता है.

यहां दी गई टेबल में, FCM v1 REST API की गड़बड़ी के कोड और उनके ब्यौरे दिए गए हैं.

गड़बड़ी का कोड ब्यौरा और समस्या हल करने के तरीके
UNSPECIFIED_ERROR इस गड़बड़ी के बारे में ज़्यादा जानकारी उपलब्ध नहीं है. कोई नहीं.
INVALID_ARGUMENT (एचटीटीपी गड़बड़ी का कोड = 400) अनुरोध के पैरामीटर अमान्य थे. यह बताने के लिए कि कौनसे फ़ील्ड अमान्य थे, google.rpc.BadRequest टाइप का एक्सटेंशन दिखाया जाता है. इसकी संभावित वजहों में, अमान्य रजिस्ट्रेशन, पैकेज का अमान्य नाम, मैसेज का साइज़ बहुत बड़ा होना, डेटा की अमान्य कुंजी, अमान्य टीटीएल या अन्य अमान्य पैरामीटर शामिल हैं.
अमान्य रजिस्ट्रेशन: सर्वर को भेजे जाने वाले रजिस्ट्रेशन टोकन का फ़ॉर्मैट देखें. पक्का करें कि यह उस रजिस्ट्रेशन टोकन से मेल खाता हो जो क्लाइंट ऐप्लिकेशन को FCM के साथ रजिस्टर करने पर मिलता है. टोकन को छोटा न करें या उसमें अतिरिक्त वर्ण न जोड़ें.
पैकेज का अमान्य नाम: पक्का करें कि मैसेज, उस रजिस्ट्रेशन टोकन के लिए भेजा गया हो जिसका पैकेज का नाम, अनुरोध में पास की गई वैल्यू से मेल खाता हो.
मैसेज का साइज़ बहुत बड़ा होना: पक्का करें कि किसी मैसेज में शामिल पेलोड डेटा का कुल साइज़, FCM की सीमाओं से ज़्यादा न हो. ज़्यादातर मैसेज के लिए, यह सीमा 4,096 बाइट है. वहीं, विषयों को भेजे जाने वाले मैसेज के लिए, यह सीमा 2,048 बाइट है. इसमें कुंजियां और वैल्यू, दोनों शामिल हैं.
डेटा की अमान्य कुंजी: पक्का करें कि पेलोड डेटा में कोई ऐसी कुंजी (जैसे, from, gcm या google से शुरू होने वाली कोई वैल्यू) शामिल न हो जिसका इस्तेमाल, FCM अंदरूनी तौर पर करता है. ध्यान दें कि कुछ शब्दों (जैसे, collapse_key) का इस्तेमाल FCM भी करता है, लेकिन इन्हें पेलोड में इस्तेमाल किया जा सकता है. ऐसे में, पेलोड की वैल्यू को FCM की वैल्यू से बदल दिया जाएगा.
अमान्य टीटीएल: पक्का करें कि ttl में इस्तेमाल की गई वैल्यू, 0 से 24,19,200 (चार हफ़्ते) के बीच की अवधि को सेकंड में दिखाने वाला कोई पूर्णांक हो.
अमान्य पैरामीटर: पक्का करें कि दिए गए पैरामीटर का नाम और टाइप सही हो.
UNREGISTERED (एचटीटीपी गड़बड़ी का कोड = 404) ऐप्लिकेशन इंस्टेंस को FCM से अनरजिस्टर कर दिया गया है. आम तौर पर, इसका मतलब है कि इस्तेमाल किया गया टोकन अब मान्य नहीं है और किसी नए टोकन का इस्तेमाल करना होगा. यह गड़बड़ी, रजिस्ट्रेशन टोकन मौजूद न होने या अनरजिस्टर किए गए टोकन की वजह से हो सकती है.
रजिस्ट्रेशन मौजूद नहीं है: अगर मैसेज का टारगेट कोई token वैल्यू है, तो पक्का करें कि अनुरोध में कोई रजिस्ट्रेशन टोकन शामिल हो.
रजिस्टर नहीं किया गया: मौजूदा रजिस्ट्रेशन टोकन, कई स्थितियों में अमान्य हो सकता है. इनमें ये स्थितियां शामिल हैं:
- अगर क्लाइंट ऐप्लिकेशन, FCM से अनरजिस्टर हो जाता है.
- अगर क्लाइंट ऐप्लिकेशन अपने-आप अनरजिस्टर हो जाता है. ऐसा तब हो सकता है, जब उपयोगकर्ता ऐप्लिकेशन को अनइंस्टॉल कर देता है. उदाहरण के लिए, iOS पर, अगर APNs की फ़ीडबैक सेवा ने APNs टोकन को अमान्य बताया है.
- अगर रजिस्ट्रेशन टोकन की समयसीमा खत्म हो जाती है. उदाहरण के लिए, ऐसा हो सकता है कि Google, रजिस्ट्रेशन टोकन को रीफ़्रेश करने का फ़ैसला ले या iOS डिवाइसों के लिए APNs टोकन की समयसीमा खत्म हो गई हो.
- अगर क्लाइंट ऐप्लिकेशन को अपडेट किया गया है, लेकिन नए वर्शन को मैसेज पाने के लिए कॉन्फ़िगर नहीं किया गया है.
इन सभी मामलों में, ऐप्लिकेशन सर्वर से इस रजिस्ट्रेशन टोकन को हटाएं और मैसेज भेजने के लिए इसका इस्तेमाल न करें.
SENDER_ID_MISMATCH (एचटीटीपी गड़बड़ी का कोड = 403) पुष्टि किए गए भेजने वाले का आईडी, रजिस्ट्रेशन टोकन के लिए भेजने वाले के आईडी से अलग है. रजिस्ट्रेशन टोकन, भेजने वालों के किसी खास ग्रुप से जुड़ा होता है. जब कोई क्लाइंट ऐप्लिकेशन, FCM के लिए रजिस्टर करता है, तो उसे यह बताना होगा कि किन भेजने वालों को मैसेज भेजने की अनुमति है. क्लाइंट ऐप्लिकेशन को मैसेज भेजते समय, आपको उन भेजने वालों के आईडी में से किसी एक का इस्तेमाल करना चाहिए. अगर किसी दूसरे भेजने वाले के आईडी का इस्तेमाल किया जाता है, तो मौजूदा रजिस्ट्रेशन टोकन काम नहीं करेंगे.
QUOTA_EXCEEDED (एचटीटीपी गड़बड़ी का कोड = 429) मैसेज के टारगेट के लिए, भेजने की सीमा पार हो गई है. यह बताने के लिए कि कौनसे कोटा की सीमा पार हो गई है, google.rpc.QuotaFailure टाइप का एक्सटेंशन दिखाया जाता है. यह गड़बड़ी, मैसेज की दर के कोटा की सीमा पार हो जाने, डिवाइस के लिए मैसेज की दर के कोटा की सीमा पार हो जाने या विषय के लिए मैसेज की दर के कोटा की सीमा पार हो जाने की वजह से हो सकती है.
मैसेज की दर की सीमा पार हो गई है: मैसेज भेजने की दर बहुत ज़्यादा है. आपको मैसेज भेजने की कुल दर कम करनी होगी. अस्वीकार किए गए मैसेज को फिर से भेजने के लिए, एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल करें. इसमें, पहली बार में कम से कम एक मिनट का इंतज़ार करना होगा.
डिवाइस के लिए मैसेज की दर की सीमा पार हो गई है: किसी खास डिवाइस को मैसेज भेजने की दर बहुत ज़्यादा है. किसी एक डिवाइस को मैसेज भेजने की दर की सीमा देखें. इस डिवाइस को भेजे जाने वाले मैसेज की संख्या कम करें और फिर से भेजने के लिए, एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल करें.
विषय के लिए मैसेज की दर की सीमा पार हो गई है: किसी खास विषय के सदस्यों को मैसेज भेजने की दर बहुत ज़्यादा है. इस विषय के लिए भेजे जाने वाले मैसेज की संख्या कम करें और फिर से भेजने के लिए, एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल करें. इसमें, पहली बार में कम से कम एक मिनट का इंतज़ार करना होगा.
UNAVAILABLE (एचटीटीपी गड़बड़ी का कोड = 503) सर्वर पर ज़्यादा लोड है. सर्वर, अनुरोध को समय पर प्रोसेस नहीं कर सका. उसी अनुरोध को फिर से भेजें. हालांकि, आपको यह पक्का करना होगा कि:
- अगर FCM कनेक्शन सर्वर के रिस्पॉन्स में Retry-After हेडर शामिल है, तो उसका पालन किया जाए.
- फिर से कोशिश करने के लिए, एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल किया जाए. उदाहरण के लिए, अगर आपने पहली बार फिर से कोशिश करने से पहले एक सेकंड इंतज़ार किया था, तो अगली बार कम से कम दो सेकंड इंतज़ार करें. इसके बाद, चार सेकंड और इसी तरह इंतज़ार का समय बढ़ाते जाएं. अगर एक से ज़्यादा मैसेज भेजे जा रहे हैं, तो जिटरिंग लागू करने पर विचार करें. ज़्यादा जानकारी के लिए, फिर से कोशिश करने की प्रोसेस को मैनेज करनादेखें. इसके अलावा, FCM के स्टेटस डैशबोर्ड पर जाकर यह भी देखें कि FCM को प्रभावित करने वाली, सेवा में कोई रुकावट तो नहीं है. समस्याएं पैदा करने वाले भेजने वालों को ब्लॉक किया जा सकता है.
INTERNAL (एचटीटीपी गड़बड़ी का कोड = 500) कोई अज्ञात तकनीकी गड़बड़ी हुई. अनुरोध को प्रोसेस करते समय, सर्वर में गड़बड़ी हुई. फिर से कोशिश करने की प्रोसेस को मैनेज करना में दिए गए सुझावों का पालन करके या FCM के स्टेटस डैशबोर्ड पर जाकर, उसी अनुरोध को फिर से भेजा जा सकता है. इससे यह पता चलेगा कि FCM को प्रभावित करने वाली, सेवा में कोई रुकावट तो नहीं है. अगर गड़बड़ी बनी रहती है, तो कृपया Firebase की सहायता टीम से संपर्क करें.
THIRD_PARTY_AUTH_ERROR (एचटीटीपी गड़बड़ी का कोड = 401) APNs का सर्टिफ़िकेट या वेब पुश की पुष्टि करने वाली कुंजी अमान्य है या मौजूद नहीं है. iOS डिवाइस या वेब पुश रजिस्ट्रेशन को टारगेट करने वाला मैसेज नहीं भेजा जा सका. डेवलपमेंट और प्रोडक्शन क्रेडेंशियल की वैधता देखें.

Admin SDK की गड़बड़ी के कोड

यहां दी गई टेबल में, Firebase Admin FCM API की गड़बड़ी के कोड और उनके ब्यौरे दिए गए हैं. इसमें, समस्या हल करने के लिए सुझाए गए तरीके भी शामिल हैं.

गड़बड़ी का कोड ब्यौरा और समस्या हल करने के तरीके
messaging/invalid-argument किसी तरीके के लिए, अमान्य तर्क दिया गया.FCM गड़बड़ी के मैसेज में ज़्यादा जानकारी शामिल होनी चाहिए.
messaging/invalid-recipient मैसेज का टारगेट रिसीपिएंट अमान्य है. गड़बड़ी के मैसेज में ज़्यादा जानकारी शामिल होनी चाहिए.
messaging/invalid-payload मैसेज का अमान्य पेलोड ऑब्जेक्ट दिया गया. गड़बड़ी के मैसेज में ज़्यादा जानकारी शामिल होनी चाहिए.
messaging/invalid-data-payload-key डेटा मैसेज के पेलोड में अमान्य कुंजी शामिल है. पाबंदी वाली कुंजियों के लिए, DataMessagePayload का रेफ़रंस दस्तावेज़ देखें.
messaging/payload-size-limit-exceeded मैसेज का दिया गया पेलोड, FCM साइज़ की सीमाओं से ज़्यादा है. ज़्यादातर मैसेज के लिए, यह सीमा 4,096 बाइट है. विषयों को भेजे जाने वाले मैसेज के लिए, यह सीमा 2,048 बाइट है. पेलोड के कुल साइज़ में, कुंजियां और वैल्यू, दोनों शामिल हैं.
messaging/invalid-options मैसेज के अमान्य विकल्पों का ऑब्जेक्ट दिया गया. गड़बड़ी के मैसेज में ज़्यादा जानकारी शामिल होनी चाहिए.
messaging/invalid-registration-token रजिस्ट्रेशन का अमान्य टोकन दिया गया. पक्का करें कि यह उस रजिस्ट्रेशन टोकन से मेल खाता हो जो क्लाइंट ऐप्लिकेशन को FCM के साथ रजिस्टर करने पर मिलता है. इसे छोटा न करें या इसमें अतिरिक्त वर्ण न जोड़ें.
messaging/registration-token-not-registered दिया गया रजिस्ट्रेशन टोकन रजिस्टर नहीं किया गया है. पहले से मान्य रजिस्ट्रेशन टोकन को कई वजहों से अनरजिस्टर किया जा सकता है, इनमें ये वजहें शामिल हैं:
  • क्लाइंट ऐप्लिकेशन ने खुद को FCM से अनरजिस्टर कर लिया है.
  • क्लाइंट ऐप्लिकेशन अपने-आप अनरजिस्टर हो गया है. ऐसा तब हो सकता है, जब उपयोगकर्ता ऐप्लिकेशन को अनइंस्टॉल कर देता है. इसके अलावा, Apple प्लैटफ़ॉर्म पर, अगर APNs की फ़ीडबैक सेवा ने APNs टोकन को अमान्य बताया है, तब भी ऐसा हो सकता है.
  • रजिस्ट्रेशन टोकन की समयसीमा खत्म हो गई है. उदाहरण के लिए, ऐसा हो सकता है कि Google, रजिस्ट्रेशन टोकन को रीफ़्रेश करने का फ़ैसला ले या Apple डिवाइसों के लिए APNs टोकन की समयसीमा खत्म हो गई हो.
  • क्लाइंट ऐप्लिकेशन को अपडेट किया गया है, लेकिन नए वर्शन को मैसेज पाने के लिए कॉन्फ़िगर नहीं किया गया है.
इन सभी मामलों में, इस रजिस्ट्रेशन टोकन को हटाएं और मैसेज भेजने के लिए इसका इस्तेमाल न करें.
messaging/invalid-package-name मैसेज, उस रजिस्ट्रेशन टोकन के लिए भेजा गया है जिसका पैकेज का नाम, दिए गए restrictedPackageName विकल्प से मेल नहीं खाता.
messaging/message-rate-exceeded किसी खास टारगेट को मैसेज भेजने की दर बहुत ज़्यादा है. इस डिवाइस या विषय को भेजे जाने वाले मैसेज की संख्या कम करें और इस टारगेट को तुरंत फिर से मैसेज न भेजें.
messaging/device-message-rate-exceeded किसी खास डिवाइस को मैसेज भेजने की दर बहुत ज़्यादा है. इस डिवाइस को भेजे जाने वाले मैसेज की संख्या कम करें और इस डिवाइस को तुरंत फिर से मैसेज न भेजें.
messaging/topics-message-rate-exceeded किसी खास विषय के सदस्यों को मैसेज भेजने की दर बहुत ज़्यादा है. उस विषय के लिए भेजे जाने वाले मैसेज की संख्या कम करें और उस विषय को तुरंत फिर से मैसेज न भेजें.
messaging/too-many-topics किसी रजिस्ट्रेशन टोकन ने विषयों की तय सीमा के लिए सदस्यता ली है. अब इसके लिए और सदस्यता नहीं ली जा सकती.
messaging/invalid-apns-credentials Apple डिवाइस को टारगेट करने वाला मैसेज नहीं भेजा जा सका, क्योंकि ज़रूरी APNs SSL सर्टिफ़िकेट अपलोड नहीं किया गया है या उसकी समयसीमा खत्म हो गई है. डेवलपमेंट और प्रोडक्शन सर्टिफ़िकेट की वैधता देखें.
messaging/mismatched-credential इस एसडीके की पुष्टि करने के लिए इस्तेमाल किए गए क्रेडेंशियल के पास, दिए गए रजिस्ट्रेशन टोकन से जुड़े डिवाइस को मैसेज भेजने की अनुमति नहीं है. पक्का करें कि क्रेडेंशियल और रजिस्ट्रेशन टोकन, दोनों एक ही Firebase प्रोजेक्ट के हों. अपने ऐप्लिकेशन में Firebase जोड़ना की पुष्टि करने के तरीके के बारे में जानने के लिए, Firebase Admin SDKs लेख देखें.
messaging/authentication-error एसडीके, FCM सर्वर से पुष्टि नहीं कर सका. पक्का करें कि आप Firebase Admin SDK की पुष्टि, ऐसे क्रेडेंशियल से करें जिसके पास FCM मैसेज भेजने की सही अनुमतियां हों. अपने ऐप्लिकेशन में Firebase जोड़ना की पुष्टि करने के तरीके के बारे में जानने के लिए, Firebase Admin SDKs लेख देखें.
messaging/server-unavailable FCM सर्वर, अनुरोध को समय पर प्रोसेस नहीं कर सका. आपको उसी अनुरोध को फिर से भेजना चाहिए. हालांकि, आपको यह पक्का करना होगा कि:
  • अगर Retry-After हेडर FCM कनेक्शन सर्वर के रिस्पॉन्स में शामिल है, तो उसका पालन किया जाए.
  • फिर से कोशिश करने के लिए, एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल किया जाए. उदाहरण के लिए, अगर आपने पहली बार फिर से कोशिश करने से पहले एक सेकंड इंतज़ार किया था, तो अगली बार कम से कम दो सेकंड इंतज़ार करें. इसके बाद, चार सेकंड और इसी तरह इंतज़ार का समय बढ़ाते जाएं. अगर एक से ज़्यादा मैसेज भेजे जा रहे हैं, तो सभी मैसेज के लिए एक ही समय पर नया अनुरोध जारी करने से बचने के लिए, हर मैसेज को अलग-अलग समय पर भेजें. इसके लिए, हर मैसेज को भेजने में कुछ रैंडम समय का इंतज़ार करें.
समस्याएं पैदा करने वाले भेजने वालों को ब्लॉक किया जा सकता है.
messaging/internal-error अनुरोध को प्रोसेस करते समय, FCM सर्वर में गड़बड़ी हुई. पहले messaging/server-unavailable वाली लाइन में बताई गई ज़रूरी शर्तों का पालन करके, उसी अनुरोध को फिर से भेजा जा सकता है. अगर गड़बड़ी बनी रहती है, तो कृपया गड़बड़ी की रिपोर्ट करने वाले हमारे सहायता चैनल पर समस्या की शिकायत करें.
messaging/unknown-error सर्वर की कोई अज्ञात गड़बड़ी हुई. ज़्यादा जानकारी के लिए, गड़बड़ी के मैसेज में सर्वर का रॉ रिस्पॉन्स देखें. अगर आपको यह गड़बड़ी मिलती है, तो कृपया गड़बड़ी की रिपोर्ट करने वाले हमारे सहायता चैनल पर, गड़बड़ी का पूरा मैसेज भेजें.