FCM注册ID令牌的最大长度是多少?

59

我正在使用“新”的 Firebase Cloud Messaging,并希望可靠地将客户端设备的registration_id token保存到本地服务器数据库中,以便服务器软件可以向其发送推送通知。

如果要保存100%生成的客户端注册令牌,我应该使用多大的数据库字段呢?

我找到了两个不同,它们都使用了TextFieldVarChar(255),但没有明确定义最大长度。另外,当接收到token时,我希望服务器代码可以快速检查其长度以确保其格式正确 - 什么是一个好的最小长度和一组要检查的字符?

4个回答

38
我认为FCM的这部分与GCM仍然相同。因此,您应该参考@TrevorJohns的答案

文档没有指定任何模式,因此允许使用任何有效的字符串。格式可能会在未来更改;因此,请不要根据任何模式验证此输入,因为如果发生这种情况,您的应用程序可能会出现故障。

与“registration_id”字段一样,大小的上限是cookie的最大大小,即4K(4096字节)。

强调格式可能会在未来更改部分,我建议保持安全,并具有超出通常的最大长度(如上所述)。由于注册令牌的格式和长度也可能不同。
对于通常的长度和字符,您可以参考这些两个 答案后者更加明确
我没有看到有关 GCM registrationId 格式的官方信息,但我已经分析了我们的这些 ID 数据库,得出以下结论:
  • 在大多数情况下,registrationID 的长度为162个字符,但可能会有变化,最短可达到119个字符,也可能有其他长度;
  • 它只包含以下字符:[0-9a-zA-Z\-\_]*
  • 每个 regID 都包含一个或两个“定界符”:-(减号)或_(下划线)

8
我们的令牌中也包含:。文档https://firebase.google.com/docs/cloud-messaging/server显示一个示例令牌为`bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...`,其中明确包含`:`。 - jamesc
1
@jamesc 我之前也见过 tokens 中的 :。我认为它是一个有效的分隔符字符。 - AL.
还没有忘记这个问题 - 我会在我的代码上线后接受答案 :D - jamesc
@jamesc - 不用担心。祝你的应用好运。 :) - AL.
我知道这是老话题,但是关于冒号(:),它似乎是分隔绑定到 FCM 项目的实例 ID 的界定符,尽管我没有找到任何关于此的文档。 - Juan
显示剩余3条评论

21

我现在使用Firebase Cloud Messaging代替GCM。

我得到的registration_id长度为152.

每次我得到的开头都有":"(例如bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1),就像jamesc提到的那样。

我将令牌作为varchar(255),这对我有效。

然而,registration_id的长度与4k大小没有关系。您可以通过网络发送任何大小的数据。通常,cookie限制为4096字节,其中包括名称、值、过期日期等。


5
好的,我会尽力进行翻译。请问您需要翻译的具体内容是什么?目前您提供的信息很短,并没有足够的上下文来确定需要翻译的内容。 - Alexandre Prazeres
5
我可以证实,2019年10月的长度为152。 - Devner
10
2020年5月7日 - 我的数字显示为163。 - futureapricot
6
2020年10月31日 - 317个字符 - Šemsudin Tafilović
7
2020年12月10日 - 326个字符 - pepOS
显示剩余11条评论

2

这是一个真实的 FCM 令牌:

c2aK9KHmw8E:APA91bF7MY9bNnvGAXgbHN58lyDxc9KnuXNXwsqUs4uV4GyeF06HM1hMm-etu63S_4C-GnEtHAxJPJJC4H__VcIk90A69qQz65toFejxyncceg0_j5xwoFWvPQ5pzKo69rUnuCl1GSSv

可以看到,该令牌长度为:152。


5
截至2021年8月4日,FCM令牌的长度为163个字符。 - M. A.

0

我认为注册ID的上限不是4K。可以安全地假设它远低于此。

通知有效负载的上限为4KB (链接),而通知有效负载包括令牌(链接)。由于有效负载还需要包含标题正文和其他数据,因此注册ID应该很小。

这是我从文档中理解的 ¯\_(ツ)_/¯

我最后获得的令牌长度为163个字符。我认为可以安全地假设它们永远不会超过255个字符。 另一个答案中的一些评论报告了更高的长度!

更新

到目前为止,我运行我的应用程序已经有4个月了,有超过100,000个注册ID,每个ID都是163个字符长。很可能谷歌会保持ID长度稳定,以避免应用程序崩溃。因此,我建议:

  1. 在本地机器上获取一些注册ID
  2. 测量它们的长度并验证其是否恒定(或至少不会发生显着变化)
  3. 选择一个安全的初始值,略高于ID长度

我认为现在长度不太可能改变,但我会注意观察。如果您在应用程序中注意到不同长度的ID,请告诉我!


1
根据 https://dev59.com/91kS5IYBdhLWcg3wXFrc#40572076 中的评论,似乎它们可以大于255个字符。 - Kevin Doveton
谢谢@KevinDoveton,我更新了我的答案!实际上,我刚刚注意到所有的注册ID都是163个字符长,所以我不指望它们会改变。这是我猜的! :) - Kostis
2023年5月,我的令牌ID为164。 - Raj
超过500K用户,全部都是163个字符长。 - Muhammad Saqib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接