2012-08-10 97 views
9

即使我的服務器和瀏覽器應用程序的API密鑰有效,以下是我遇到的異常。我用捲曲檢查了它。我以格式UTF-8和JSON發送GCM請求。從外部公司網絡進行測試。Google GCM中的HTTP響應代碼401

java.io.IOException: Server returned HTTP response code: 401 for URL: https://android.googleapis.com/gcm/send 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1345) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1339) 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:993) 
     at java.net.URLConnection.getContent(URLConnection.java:688) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getContent(HttpsURLConnectionImpl.java:406) 
     at gcm1.MessageUtil.sendMessage(MessageUtil.java:58) 

我可以知道原因和解決辦法嗎?

你試圖用來發送郵件無法進行身份驗證發件人帳戶:

+0

對於剛纔瀏覽的其他人,如果您突然開始遇到此錯誤而未做出任何特定更改(服務器密鑰)仍然相同,則可能需要將您的項目導入到Firebase。看到我的答案[這裏](http://stackoverflow.com/a/37801206/4625829)。 – 2016-10-25 08:21:27

回答

7

這裏使用GCM時是401錯誤的可能原因。可能的原因有:

  • 授權標題丟失或語法無效。
  • 作爲密鑰發送的項目ID無效。
  • 密鑰有效,但禁用了GCM服務。
  • 源自服務器密鑰IP中未列入白名單的服務器的請求。

檢查您在授權標頭內發送的令牌是否與您的項目相關的正確API密鑰。

來源:https://developers.google.com/cloud-messaging/http-server-ref#error-codes

+0

我使用curl檢查了我的API密鑰,它的工作正常。它以成功返回響應:1以JSON格式。服務器也在服務器密鑰IP中被列入白名單。 – chako 2012-08-13 04:27:33

+2

讓我想到的一點是,Google要求你在'Authorization'標題中用'key ='作爲你的API密鑰的前綴。這對我來說毫無意義(它已經在標題字段中;'key ='是多餘的),但是一旦我添加了,問題就解決了。 – aroth 2013-09-09 04:35:13

+0

更新後的鏈接:https://developers.google.com/cloud-messaging/http-server-ref#error-codes – Jason 2016-02-12 23:28:23

0

在我的情況下,問題是,我忘了在數據存儲中設置正確的API密鑰後,重新部署。

0

請按照以下指示說明它可以幫助你。

更新:這似乎也從從GCM遷移到FCM修復了401未授權錯誤的問題。

如果您剛剛開始使用GCM,而不是在Google Developers Console中創建項目,請在Firebase控制檯中執行。創建項目後,只需使用自動生成的服務器密鑰。以下是查找服務器密鑰的步驟:

  1. 轉到您的Firebase控制檯並單擊CREATE NEW PROJECT。
  2. 填寫您想要的項目名稱並選擇您的國家。在此之後, 新項目應該是積極的。
  3. 然後在左側面板上,單擊齒輪按鈕並選擇項目 設置。
  4. 然後轉到雲消息傳遞選項卡。

對於老GCM項目,你可以簡單地導入項目到火力地堡控制檯:

  1. 轉到您的火力地堡控制檯,然後單擊導入項目。
  2. 選擇您要導入的項目和您的國家。
  3. 點擊ADD FIREBASE。在此之後,新項目應該是活躍的。
  4. 然後在左側面板上,單擊齒輪按鈕並選擇項目 設置。
  5. 然後轉到雲消息傳遞選項卡。
相關問題