2017-04-30 82 views
1

我正在實施Firebase雲消息傳遞(FCM),並遇到我無法解決的問題。我根據指南實施了FirebaseMessagingServiceFirebaseInstanceIdService。當我爲我的應用程序訪問Firebase控制檯並使用通知功能時,我可以成功地向所有應用程序實例發送消息(使用軟件包名稱)。現在FCM:註冊令牌無效。檢查令牌格式

,在代碼中,我使用下面的代碼中獲取的火力地堡實例ID(標記):

String token = FirebaseInstanceId.getInstance().getToken(); 
    SendFirebaseTokenToServer(token); 

(請注意,我目前使用HTTP協議,因爲我的服務器尚不有證書)。無論如何,使用我從上述調用中獲得的令牌,我會返回到Firebase控制檯並嘗試向安裝的一(1)個應用程序實例發送消息。我從我們的服務器數據庫中獲取它存儲爲「varchar(max)」的令牌。當我這樣做,我收到以下錯誤信息:

Invalid registration token. Check the token format. 

我用Google搜索這一點,發現只有一重擊(具有火力地堡和iOS做):

http://stackoverflow.com/questions/41343520/ios-invalid-registration-token-check-the-token-format 

這個問題表明證書是必需的(我想我正確閱讀它)。我不確定我做錯了什麼。我需要先使用Firebase控制檯才能使用該功能,然後我的服務器人員可以開始瞭解他們的工作。

謝謝!

+0

好吧,我決定直接嘗試Firebase控制檯(無服務器交互),使用我從Firebase調用中獲得的registration_id(令牌)(吐出Logcat)。有效!所以問題存在於服務器上或發送給服務器。我應該編碼()令牌嗎? –

+1

如果問題存在於您的應用服務器中的代碼中,請編輯您的問題以包含[重現問題的最小服務器代碼](http://stackoverflow.com/help/mcve)。沒有看到這些代碼,很難說它有什麼問題。 –

回答

1

原來我在發送到我們的服務器之前編程式編碼所有POST或PUT參數。 FCM令牌中有一個分號,編碼爲「%3A」,似乎導致了這個問題。

不編碼FCM令牌。

+0

面對完全相同的問題,我在這裏建議你應該在傳遞查詢字符串時專門編碼FCM令牌,然後在服務器端應用url解碼。 –