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

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

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

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

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

{
  "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 एपीआई अनुरोध से मिला गड़बड़ी वाला जवाब

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

यहां दी गई टेबल में, 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 Feedback Service ने 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 की तय सीमा से ज़्यादा है. ज़्यादातर मैसेज के लिए, यह सीमा 4096 बाइट है. विषयों को भेजे गए मैसेज के लिए, यह सीमा 2,048 बाइट है. कुल पेलोड साइज़ में कुंजियां और वैल्यू, दोनों शामिल होती हैं.
messaging/invalid-options मैसेज के विकल्पों का अमान्य ऑब्जेक्ट दिया गया था. गड़बड़ी के मैसेज में अतिरिक्त जानकारी होनी चाहिए.
messaging/invalid-registration-token दिया गया रजिस्ट्रेशन टोकन अमान्य है. पक्का करें कि यह उस रजिस्ट्रेशन टोकन से मेल खाता हो जो क्लाइंट ऐप्लिकेशन को FCM के साथ रजिस्टर करने पर मिलता है. इसे छोटा न करें या इसमें अतिरिक्त वर्ण न जोड़ें.
messaging/registration-token-not-registered दिया गया रजिस्ट्रेशन टोकन रजिस्टर नहीं किया गया है. पहले मान्य रहे रजिस्ट्रेशन टोकन को कई वजहों से अनरजिस्टर किया जा सकता है. इनमें ये वजहें शामिल हैं:
  • क्लाइंट ऐप्लिकेशन ने खुद को FCM से अनरजिस्टर कर दिया है.
  • क्लाइंट ऐप्लिकेशन का रजिस्ट्रेशन अपने-आप रद्द हो गया. ऐसा तब हो सकता है, जब उपयोगकर्ता ऐप्लिकेशन को अनइंस्टॉल कर दे. इसके अलावा, Apple प्लैटफ़ॉर्म पर ऐसा तब हो सकता है, जब APNs Feedback Service ने APNs टोकन को अमान्य के तौर पर रिपोर्ट किया हो.
  • रजिस्ट्रेशन टोकन की समयसीमा खत्म हो गई है. उदाहरण के लिए, Google रजिस्ट्रेशन टोकन को रीफ़्रेश करने का फ़ैसला कर सकता है या Apple डिवाइसों के लिए APNs टोकन की समयसीमा खत्म हो सकती है.
  • क्लाइंट ऐप्लिकेशन को अपडेट किया गया है, लेकिन नए वर्शन को मैसेज पाने के लिए कॉन्फ़िगर नहीं किया गया है.
इन सभी मामलों में, इस रजिस्ट्रेशन टोकन को हटा दें और इसका इस्तेमाल मैसेज भेजने के लिए न करें.
messaging/invalid-package-name यह मैसेज, ऐसे रजिस्ट्रेशन टोकन को भेजा गया था जिसके पैकेज का नाम, दिए गए restrictedPackageName विकल्प से मेल नहीं खाता.
messaging/message-rate-exceeded किसी टारगेट को भेजे जाने वाले मैसेज की दर बहुत ज़्यादा है. इस डिवाइस या विषय पर भेजे जाने वाले मैसेज की संख्या कम करें. साथ ही, इस टारगेट पर मैसेज भेजने के लिए तुरंत फिर से कोशिश न करें.
messaging/device-message-rate-exceeded किसी डिवाइस पर मैसेज भेजने की दर बहुत ज़्यादा है. इस डिवाइस पर भेजे जाने वाले मैसेज की संख्या कम करें. साथ ही, इस डिवाइस पर मैसेज भेजने की कोशिश तुरंत न करें.
messaging/topics-message-rate-exceeded किसी विषय के बारे में सूचना पाने के लिए ऑप्ट-इन करने वाले लोगों को भेजे जाने वाले मैसेज की दर बहुत ज़्यादा है. उस विषय के लिए भेजे जाने वाले मैसेज की संख्या कम करें. साथ ही, उस विषय के लिए मैसेज भेजने की कोशिश तुरंत न करें.
messaging/topics-subscription-rate-exceeded किसी विषय के लिए, सदस्यता मैनेज करने के अनुरोधों की दर बहुत ज़्यादा है. उस विषय के लिए भेजे गए अनुरोधों की संख्या कम करें. साथ ही, अनुरोध को तुरंत फिर से न भेजें.
messaging/too-many-topics किसी रजिस्ट्रेशन टोकन को ज़्यादा से ज़्यादा विषयों के लिए सदस्यता ली जा सकती है. इसलिए, अब उसे किसी और विषय के लिए सदस्यता नहीं दी जा सकती.
messaging/invalid-apns-credentials Apple डिवाइस को टारगेट करने वाला मैसेज नहीं भेजा जा सका, क्योंकि ज़रूरी APNs एसएसएल सर्टिफ़िकेट अपलोड नहीं किया गया है या उसकी समयसीमा खत्म हो गई है. अपने डेवलपमेंट और प्रोडक्शन सर्टिफ़िकेट की वैधता की जांच करें.
messaging/mismatched-credential इस एसडीके की पुष्टि करने के लिए इस्तेमाल किए गए क्रेडेंशियल के पास, दिए गए रजिस्ट्रेशन टोकन से जुड़े डिवाइस को मैसेज भेजने की अनुमति नहीं है. पक्का करें कि क्रेडेंशियल और रजिस्ट्रेशन टोकन, दोनों एक ही Firebase प्रोजेक्ट के हों. Firebase Admin SDK की पुष्टि करने के तरीके के बारे में दस्तावेज़ देखने के लिए, अपने ऐप्लिकेशन में Firebase जोड़ना लेख पढ़ें.
messaging/authentication-error SDK टूल, FCM सर्वर से पुष्टि नहीं कर सका. पक्का करें कि आपने Firebase Admin SDK को ऐसे क्रेडेंशियल से पुष्टि की हो जिसके पास Firebase Admin SDK को मैसेज भेजने की ज़रूरी अनुमतियां हों.FCM Firebase Admin SDK की पुष्टि करने के तरीके के बारे में दस्तावेज़ देखने के लिए, अपने ऐप्लिकेशन में Firebase जोड़ना लेख पढ़ें.
messaging/server-unavailable FCM सर्वर, अनुरोध को समय पर प्रोसेस नहीं कर सका. आपको उसी अनुरोध को फिर से भेजना चाहिए. हालांकि, आपको यह काम करना होगा:
  • अगर FCM कनेक्शन सर्वर से मिले रिस्पॉन्स में Retry-After हेडर शामिल है, तो उसका पालन करें.
  • फिर से कोशिश करने की सुविधा में, एक्स्पोनेंशियल बैक-ऑफ़ लागू करें. उदाहरण के लिए, अगर आपने पहली बार फिर से कोशिश करने से पहले एक सेकंड इंतज़ार किया है, तो अगली बार कम से कम दो सेकंड इंतज़ार करें. इसके बाद, चार सेकंड इंतज़ार करें. इसी तरह, इंतज़ार का समय बढ़ाते रहें. अगर आपको एक साथ कई मैसेज भेजने हैं, तो हर मैसेज को अलग-अलग समय पर भेजें. इसके लिए, हर मैसेज को भेजने में कुछ समय का अंतर रखें. इससे सभी मैसेज के लिए एक साथ नया अनुरोध नहीं किया जाएगा.
समस्याएं पैदा करने वाले ईमेल पतों को ब्लॉकलिस्ट किया जा सकता है.
messaging/internal-error अनुरोध को प्रोसेस करते समय FCM सर्वर में कोई गड़बड़ी हुई. messaging/server-unavailable की पिछली लाइन में दी गई ज़रूरी शर्तों को पूरा करके, उसी अनुरोध को फिर से सबमिट किया जा सकता है. अगर गड़बड़ी बनी रहती है, तो कृपया गड़बड़ी की शिकायत वाले सहायता चैनल पर जाकर, समस्या की शिकायत करें.
messaging/unknown-error सर्वर से कोई ऐसी गड़बड़ी हुई जिसके बारे में जानकारी नहीं है. ज़्यादा जानकारी के लिए, गड़बड़ी के मैसेज में सर्वर से मिला जवाब देखें. अगर आपको यह गड़बड़ी दिखती है, तो कृपया गड़बड़ी के पूरे मैसेज की शिकायत हमारे गड़बड़ी की रिपोर्ट वाले सहायता चैनल पर करें.