Firebase云消息传递无法解析主题名称。

11

我正试图在我的iOS应用程序中订阅一个主题,但一直收到以下错误:

<FIRMessaging/WARNING> Cannot parse topic name /topics/pets/cnlLksAxmdYPkDjEftDwZjFwvDw2_coffee. Will not subscribe.

我试图使用的代码是这样的:

FIRMessaging.messaging().subscribe(toTopic: "/topics/pets/\(name)")

其中name是您在错误中看到的主题的最后一部分。

有人知道我做错了什么吗?我已经确认Firebase消息正确地接收所有通知。

2个回答

22

主题名称中不允许使用/字符。

允许使用的字符包括:

  • a-z
  • A-Z
  • 0-9
  • -, _, ., ~, %

Android上测试主题名称为pets/123asd,检查日志后,我可以确认这些是唯一允许的字符。

Invalid topic name: Pets/123asd does not match the allowed format [a-zA-Z0-9-_.~%]{1,900}

对于iOS设备,需要使用前缀/topics/,该前缀仍然有效。无效的字符仅适用于您在前缀后包含的主题名称


2
Firebase很奇怪,他们在他们的示例中给出了一个主题/topics/news的例子,并且当你只使用普通主题名称news时,他们会给出一个控制台错误日志:<FIRMessaging/WARNING> WARNING. Topic name news should be prefixed with /topics/ as /topics/news - NSTJ
1
@NSTJ 很有趣。我在文档中没有注意到这一点。我会尝试四处寻找关于它的信息。不过我的猜测是,也许 news 是一个预定义主题。不确定是否可能。检查后将更新我的答案。 - AL.
1
aha - @AL。我实际上没有使用“news”,而是使用了自己的主题名称(它是一个任意的整数),但使用“news”作为一个常见的例子 :) 顺便说一下 - 我的问题最终是因为新主题需要花费几个小时才能被创建并显示在控制台上,以防有人遇到类似情况。 - NSTJ
1
@NSTJ,所以我进行了一些调查,我的答案仍然是正确的。在iOS中订阅的格式确实需要在主题名之前加上“/topics/”。然而,主题名本身不应该有任何无效字符。是的。通常需要几个小时或最多一天才能在Firebase通知控制台中显示主题。 :) - AL.
1
一切都很好!也许你可以更新你的答案,以反映主题名称和主题名称前缀(即 topic/)之间的区别,因为我从你的答案中读出来的是两者都不能有 /(不是要贬低你的答案 - 它帮了我很多!谢谢)。 - NSTJ
显示剩余5条评论

0
如果您想选择一个包含不允许字符的主题字符串,那么您需要将该字符串设置为原始字符串。
例如=> String str=r'something@gmail.com' 这里的字符串'str'包含一个在FCM主题中无效的'@'字符,但通过将其设置为原始字符串,它可以成功解析。

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