24

我爲我的Android應用程序創建了GCM推送通知的Android API密鑰。從過去兩天開始,GCM服務器在PHP中返回未經授權(401)響應。GCM的API密鑰突然無效?未授權(401)錯誤

Android API密鑰是否有任何理由無效/過期?或者GCM已棄用Android API密鑰?

仍然我沒有得到正確的解釋,爲什麼Android API密鑰無效?他們中的大多數人更喜歡服務器密鑰,而不是使用Android API密鑰進行GCM,但沒有提及爲什麼不使用Android API密鑰。

爲什麼不在GCM中使用Android API密鑰? Android API密鑰有任何限制嗎?或者如果通知消息超出每日限制,GCM服務器是否會阻止通知/ GCM服務器使Android API密鑰無效?

+0

您是否更新了PHP腳本中的必要憑證?您是否在Google開發者控制檯中包含了您的包名? –

+0

@kumar我更新了我的答案。一探究竟。如果你正在尋找官方理由,似乎還沒有任何披露。 –

+0

嗨@kumar,我今天也遇到類似的問題。自2年來一直運行良好,但自從星期五以來,我開始接受401未經授權的錯誤。嘗試重新生成服務器密鑰,但沒有成功。 你是否設法解決它? – Shubhral

回答

60

更新:所使用的術語是回服務器密鑰

就在最近,現在有一個即將推出的Firebase雲消息傳遞令牌(FCM令牌)。這在Firebase控制檯的雲消息傳遞標籤中可見。


更新:現在在GCM docs可見的紙條,上面寫着:

從2016年9月開始的新服務器密鑰只能在火力地堡控制檯創建使用的Cloud Messaging標籤設置面板。需要創建新服務器密鑰的現有項目可以導入Firebase console而不影響其現有配置。


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

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

  1. 轉到您的Firebase Console並點擊創建新項目
  2. 填寫您想要的項目名稱並選擇您的國家。在此之後,新項目應該是活躍的。
  3. 然後在左側面板上,點擊齒輪按鈕並選擇項目設置
  4. 然後轉到Cloud-Messaging標籤

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

  1. 轉到您的Firebase Console並點擊導入項目
  2. 選擇您要導入的項目和您的國家。
  3. 點擊ADD FIREBASE。在此之後,新項目應該是活躍的。
  4. 然後在左側面板上,點擊齒輪按鈕並選擇項目設置
  5. 然後轉到Cloud-Messaging標籤

出於某種原因,只有一個服務器密鑰作品現在GCM。 Android密鑰不是唯一一個看起來無效的密鑰,所有其他客戶端API密鑰(瀏覽器,iOS,Android)都是。


當屬於Server Key的描述:

創建,如果你的應用程序運行在服務器上使用服務器密鑰。

由於您在服務器上使用API​​密鑰,並且它與GCM連接服務器一起工作,因此使用服務器密鑰是合乎邏輯的。

如果比較FCM docsGCM docs(下憑證),你可以看到,在GCM,它只規定API密鑰,而在FCM,它已經指定一個服務器密鑰。那麼,FCM是GCM的新版本,可能與它有什麼關係?我不太確定,但我認爲你明白了我的意思。

更新:在GCM文檔中,現在指出了服務器密鑰。


默認情況下,通過以下步驟Configure your API Project去後,服務器API密鑰生成(I通過選擇Android應用測試它)。 也一樣。每當我創建一個新項目時,它都會自動生成一個服務器密鑰。

希望未來會有解釋爲什麼。


要繼續前進並添加關於如何創建服務器密鑰的步驟。以防萬一其他人感到困惑,或者新手不確定如何。

  1. 轉到您的Google Developers Console
  2. 在左窗格中,單擊證書
  3. 在憑證選項卡,點擊創建憑證
  4. 選擇API密鑰

--- 更新在Dev elopers控制檯削減步驟這裏 ---

  • 選擇服務器密鑰
  • 填寫詳細信息。
  • 點擊創建
  • 服務器密鑰應由然後可用。


    更新:好像有生成API密鑰時,最近的變化。直到上面提到的步驟4爲止。但是,在選擇API密鑰後,它將直接創建API密鑰而不詢問它是什麼類型的密鑰(服務器,Android,瀏覽器,iOS)。它只會允許您設置一些限制根據您打算生成哪個API密鑰,這是可見的。


    更新:當沒有任何限制創建API密鑰,它顯示一個通知(感嘆號),你的API密鑰是脆弱的,這就是爲什麼它被非常鼓勵爲你添加您的API密鑰的限制。其中一個post發生此問題,並且添加了限制即可解決該問題。

    +0

    謝謝他爲我工作。這個問題讓我瘋狂! – JasJar

    +1

    '服務器密鑰'不再是一個選項。所以我選擇了「無限制」,並且API密鑰說無效。 – peterept

    +0

    @peterept我剛查過。實際上已經沒有選擇了。當你選擇創建一個API密鑰時,它只是創建一個。當我昨天嘗試時,並不是這樣,最近必須改變。但是,如果您選擇添加限制,則可以選擇可以使用的限制。我會環顧四周,並在這裏提供我的答案的更新。 –

    0

    這可能是奇數給你,但是這是解決了這個問題對我來說 ...

    在我的後端

    ,...這一個產生的錯誤..

    $Key = 'someKey'; 
    

    這一個解決了錯誤..

    $Key = "someKey";