FCM:无效的注册令牌。检查令牌格式

Posted

技术标签:

【中文标题】FCM:无效的注册令牌。检查令牌格式【英文标题】:FCM: Invalid registration token. Check the token format 【发布时间】:2017-04-30 17:43:12 【问题描述】:

我正在实施 Firebase 云消息传递 (FCM),但遇到了一个我无法解决的问题。我根据指南实施了FirebaseMessagingServiceFirebaseInstanceIdService。当我为我的应用转到 Firebase 控制台并使用通知功能时,我可以成功地向我的所有应用实例发送一条消息(使用包名称)。

现在,在代码中,我使用以下代码获取了 Firebase 实例 ID(令牌):

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

(请注意,目前我使用的是 HTTP 协议,因为我的服务器还没有证书)。无论如何,使用从上面的调用中获得的令牌,我返回 Firebase 控制台并尝试向我的应用程序的一 (1) 个已安装实例发送消息。我从存储为“varchar(max)”的服务器数据库中获取令牌。当我这样做时,我收到以下错误消息:

Invalid registration token. Check the token format.

我在谷歌上搜索了一下,只找到了一个结果(与 Firebase 和 ios 有关):

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

该问题表明需要证书(我想我没看错)。我不确定我做错了什么。我需要首先使用 Firebase 控制台让它工作,然后我的服务器人员可以在知道它应该工作的情况下从头开始。

【问题讨论】:

好的,我决定使用从 Firebase 调用(吐出到 Logcat)中获得的 registration_id(令牌)直接尝试 Firebase 控制台(无服务器交互)。有效!所以问题存在于服务器上或我将其发送到服务器上。我应该 Encode() 令牌吗? 如果您的应用服务器的代码中存在问题,请编辑您的问题以包含minimal server code that reproduces the problem。如果没有看到该代码,就很难说它有什么问题。 @FrankvanPuffelen 过去几天我面临同样的问题。你能读一下我的问题吗? ***.com/questions/50359010 【参考方案1】:

原来我在发送到我们的服务器之前以编程方式对所有 POST 或 PUT 参数进行编码。 FCM 令牌中有一个分号,它被编码为“%3A”,似乎导致了问题。

不要对 FCM 令牌进行编码。

【讨论】:

面临完全相同的问题,我在这里建议您应该在传入查询字符串时专门对 FCM 令牌进行编码,然后在服务器端对其应用 url 解码。

以上是关于FCM:无效的注册令牌。检查令牌格式的主要内容,如果未能解决你的问题,请参考以下文章

提供的注册令牌无效。确保它与客户端应用从 FCM 注册时收到的注册令牌匹配

提供的注册令牌未注册

注册令牌不是有效的 FCM 注册令牌

Firebase (FCM) 注册令牌

fcm 注册令牌自动存储到 firebase 数据库中

无法获取 FCM 注册令牌