android जीसीएम HTTP 401 प्राधिकरण त्रुटि




push-notification google-cloud-messaging (11)

जब मेरा बैकएंड सर्वर GCM सर्वर पर पोस्ट अनुरोध भेजता है तो मुझे एक प्राधिकरण त्रुटि HTTP 401 मिलती है I

मैंने यहाँ वर्णित चरणों का पालन किया:

http://developer.android.com/google/gcm/http.html#auth_error

>> api_key=AIzaSyDEy3...

>> curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send  -d "{\"registration_id\":\"ABC\"}"

मैंने इसे प्राप्त किया:

<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

समस्या निवारण में यह कहते हैं:

Authentication Error
The sender account that you're trying to use to send a message couldn't be authenticated. Possible causes are:
    1. Authorization header missing or with invalid syntax.
    2. Invalid project number sent as key.
    3. Key valid but with GCM service disabled.
    4. Request originated from a server not whitelisted in the Server Key IPs.

मेरे पास इसके बारे में प्रश्न हैं:

  1. कर्ल अनुरोध में हैडर सही है?
  2. क्या उनका मतलब "एपीआई_की" (एआईएएसएएसई ...) या प्रोजेक्ट नंबर जैसे 8305134 ...।?
  3. मैं अपने सर्वर की IP को कैसे श्वेतसूची में डालूं?
  4. अगर मैं कर्ल आदेश चला रहा हूं, तो क्या मुझे अपने कंप्यूटर का आईपी-एड्रेस श्वेतसूची में रखना होगा?

अद्यतन करें:

Google ने कंसोल बदल दिया है, अब आपको यह करना होगा:

  • Https://console.developers.google.com पर जाएं
  • अपनी परियोजना का चयन करें (शीर्ष पर ड्रॉपडाउन)
  • वाम पैनल पर मेनू में अवलोकन करें चुनें
  • मोबाइल एपीआई शीर्षक के अंतर्गत Google क्लाउड मेसेजिंग का चयन करें
  • सक्षम करें बटन क्लिक करें
  • फिर आपको क्रेडेंशियल्स बनाना होगा

हटाया गया

मुझे एक ही समस्या थी ... तो मुझे एहसास हुआ कि मुझे एंड्रॉइड के लिए Google क्लाउड मैसेजिंग भी जोड़ना होगा।

  • Https://cloud.google.com/console/project पर जाएं
  • अपने प्रोजेक्ट पर क्लिक करें
  • वाम पैनल पर एपीआई और लेखक पर जाएं
  • वाम पैनल पर सबमेनू में API चुनें
  • Android (या / और क्रोम) के लिए Google क्लाउड मेसेजिंग खोजें और इसे चालू करें

आशा है कि यह आपको मदद करता है!



समस्या प्राधिकरण से संबंधित है, लेकिन मैं इस पर त्रुटि आई, जब तक मैं पुराने तरीके से काम करने की कोशिश कर रहा था, मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं इसे 50 सेंट डालूंगा। पहले "फायरबेज क्लाउड मेसेजिंग एफसीएम" नामक शहर में एक नया बच्चा है मुझे Google को उद्धृत करने की अनुमति दें:

एफसीएम फायरबेज ब्रांड के तहत जीसीएम का नया संस्करण है। यह जीसीएम के मुख्य बुनियादी ढांचे को प्राप्त करता है, जिसमें नए एसडीके बादल संदेश विकास को आसान बनाने में मदद करते हैं।

एफसीएम एसडीके के उन्नयन के लाभों में शामिल हैं:

सरल ग्राहक विकास अब आपको अपना पंजीकरण या सदस्यता पुनः प्रयास तर्क लिखना नहीं है। एक आउट-द-बॉक्स सूचना समाधान आप फ़ायरबेज अधिसूचनाओं का उपयोग कर सकते हैं, जो एक वेब कंसोल के साथ एक सर्वर रहित सूचना समाधान है जो किसी को फायरबेज एनालिटिक्स अंतर्दृष्टि के आधार पर विशिष्ट ऑडियंस को लक्षित करने के लिए सूचनाएं भेज सकता है। एंड्रॉइड स्टूडियो के लिए एफसीएम कॉन्फ़िगरेशन के बारे में अधिक जानकारी

मुझे उम्मीद है कि यह किसी को मदद करता है जो पुराने तरीके से काम करने की कोशिश कर रहा है


  1. मैं curl कमांड के सिंटैक्स को नहीं जानता, लेकिन यह अजीब लगता है कि एक हेडर जो आप को निर्दिष्ट करते हैं - हेडर --header "key: value" जबकि दूसरे को --header key:"value" रूप में निर्दिष्ट किया --header key:"value" । शायद उनमें से एक गलत है। इसके अलावा, आपको registration_id:ABC बदलना चाहिए registration_id:ABC से "{\"registration_ids\":[\"ABC\"]}"

  2. उनका मतलब एपीआई कुंजी है।

  3. यदि आपने अपनी एपीआई कुंजी बनाते समय सफेद सूचीबद्ध आईपी की एक सूची को परिभाषित नहीं किया है, तो उसे मूल रूप से सूचीबद्ध किया जाना चाहिए


अंत में मेरी समस्या पाया

मैंने इस Authorization:[Api key] तरह HTTP प्राधिकरण हैडर बनाया Authorization:[Api key]

उपाय

मुझे 'कुंजी =' + [आपकी एपी कुंजी] प्राधिकरण शीर्षलेख में याद आ रही थी,

इसलिए पूर्ण HTTP हेडर होगा

Authorization:key=Apikey


क्या उनका मतलब "एपीआई_की" (एआईएएसएएसई ...) या प्रोजेक्ट नंबर जैसे 8305134 ...।?

इसका अर्थ है सर्वर कुंजी जो आपके कर्ल स्क्रिप्ट में जोड़नी चाहिए। सर्वर नंबर पर संदेश भेजने के लिए प्रोजेक्ट नंबर का उपयोग नहीं किया जाना चाहिए

नई सर्वर कुंजी बनाने के लिए, चरणों का पालन करें,

  • Https://cloud.google.com/console/project पर जाएं
  • अपने प्रोजेक्ट पर क्लिक करें
  • वाम पैनल पर एपीआई और लेखक पर जाएं
  • वाम पैनल पर उपमेनू में प्रमाणन का चयन करें
  • सार्वजनिक एपीआई पहुंच के अंतर्गत, " नई कुंजी बनाएं " पर क्लिक करें
  • 'सर्वर' चुनें
  • अगले संवाद पर, श्वेतसूची किए गए आईपी निर्दिष्ट करें, अगर आपके पास कोई भी है इसे खाली छोड़कर, अनुरोध किसी भी आईपी से होगा
  • बनाएँ क्लिक करें
  • आपको " सार्वजनिक एपीआई एक्सेस " के अंतर्गत नई सर्वर की बनाई जाती है

यह कुंजी सर्वर स्क्रिप्ट पर अपनी स्क्रिप्ट पर संदेश भेजने के लिए उपयोग की जा रही है

मैं अपने सर्वर की IP को कैसे श्वेतसूची में डालूं?

सर्वर कुंजी बनाते समय आप श्वेतसूची में प्रवेश कर सकते हैं

अगर मैं कर्ल आदेश चला रहा हूं, तो क्या मुझे अपने कंप्यूटर का आईपी-एड्रेस श्वेतसूची में रखना होगा?

परीक्षण उद्देश्य के लिए, आपको आईपी निर्दिष्ट करने की आवश्यकता नहीं है। व्यावसायिक उद्देश्य के लिए, आप चाहते हो सकता है

चेतावनी सेटिंग आईपी को 0.0.0.0/0 के रूप में उल्लिखित गाइड में उल्लिखित किया गया है, सभी आईपीवी 4 पते की अनुमति होगी, लेकिन IPv6 नहीं।


मेरी भी यही समस्या थी। मैं क्या कर रहा था, एपीआई कुंजी के स्थान पर मैं संदेश भेज रहा था और संदेश के बजाय मैं एपीआई कुंजी भेज रहा था। बस जांच लें कि क्या आप गलती कर रहे हैं एक ही गलती


मुझे भी यही समस्या थी। मैं http://developer.android.com/google/gcm/gs.html पर दिए गए निर्देशों में उल्लिखित एंड्रॉइड की का उपयोग कर रहा था लेकिन मुझे वास्तव में मेरी फिल्डर विंडो और पुशशहर उदाहरण से प्रमाणीकृत करने के लिए सर्वर कुंजी का इस्तेमाल करना था।


मेरे पास एक ही समस्या थी मैंने क्या किया है:

  1. आईपी ​​श्वेतसूची को साफ़ करें जो स्वचालित रूप से किसी भी आईपी पर सेट किया जाएगा
  2. सर्वर कुंजी को पुनर्जन्म करें और नई जेनरेट की उपयोग करें।

यदि आपने हाल ही में जीसीएम में एक नया प्रोजेक्ट बनाने और एक सर्वर की कुंजी जोड़ने की कोशिश की है, तो वैसे भी प्राधिकरण सफल नहीं होगा क्योंकि Google ने फायरबेज क्लाउड मेसेजिंग को बढ़ावा देने के लिए नई बनाई गई सर्वर कुंजी को अधिकृत करना बंद कर दिया है। वर्तमान में एक नई कुंजी बनाने का एकमात्र विकल्प पहले से मौजूदा प्रोजेक्ट को फायरबेज में माइग्रेट करना है


उपरोक्त सभी चीजें पूरी कर ली गई हैं और फ़ंक्शन को कर्ल इनिट ऑपरेशन की जांच करें
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
इसमें शामिल है या नहीं, अगर ऐसा नहीं है, तो फ़ंक्शन शामिल है





http-status-code-401