如何在 FCM 通知中创建主题

75

我正在尝试使用Firebase通知API,在从控制台发送下行消息到应用程序时,该服务的运行完美,但如何向已注册主题的用户发送消息呢?

我在Android端完成了这个问题。

FirebaseMessaging.getInstance().subscribeToTopic("TopicName");

但当我尝试从控制台发送下行消息到主题时,它会显示:

This project does not have any topics

编辑: 我发现在映射主题后,需要一天的时间才能在Firebase控制台上显示。


4
嘿,穆罕默德。如果你最后的编辑是解决你的问题的方法,你能把它发表为答案吗?在Stack Overflow自我回答是完全可以的,这会让其他人更容易找到解决方法(看来问题的解决就是要有耐心 :-))。 - Frank van Puffelen
完成了,抱歉我以为在单独回答中回答自己的问题违反了Stackoverflow的政策。 - Moh'd Awad
尝试这个答案...https://dev59.com/AloU5IYBdhLWcg3wk3l2#37332514 - Muhammad Waleed
现在 Firebase 中的新话题将在几分钟内提供 :) - Menuka Ishan
4个回答

67

这是一条备用路径。

如果您向客户端应用程序订阅一个不存在的主题,那么该主题也将被创建,无需调用任何Firebase URL请求。

它还需要几个小时才能出现在Firebase控制台上。

使用Google的共享示例:https://github.com/firebase/quickstart-android/tree/master/messaging 您可以确认相同的情况。

        FirebaseMessaging.getInstance().subscribeToTopic("news");
        Log.d(TAG, "Subscribed to news topic");

1
感谢您指出预期的延迟 - 我曾认为可能是客户端问题,但我怀疑这就是我正在经历的问题。干杯。 - NSTJ
如果一个主题两天后仍未出现,我该怎么办? - Nik
@jped 经过另外三天的尝试和100次的测试以及更新到4.x分支,问题最终得到了解决。我认为更新解决了我的问题。 - Nik
新闻还是/topics/news? - Twitter khuong291

61

首先,假设 IID_TOKEN 是您的注册令牌,TOPIC_NAME 是您想要创建的主题,您需要通过向以下地址进行POST请求来创建主题:

https://iid.googleapis.com/iid/v1/IID_TOKEN/rel/topics/TOPIC_NAME

要检查您创建的主题,请在此网址上进行GET请求。

 https://iid.googleapis.com/iid/info/nKctODamlM4:CKrh_PC8kIb7O...clJONHoA?details=true

并在请求头中插入您的API_KEY

Authorization: key=YOUR_API_KEY

您的主题需要最多1天才能在Firebase控制台中显示,因此为了测试,您可以进行curl请求或使用类似高级REST客户端的软件


8
注册令牌是什么? - xinbenlv
9
请注意:这与从设备调用subscribeToTopic()的情况完全相同。逻辑始终相同:当设备订阅主题或服务器向其发送消息时,会创建主题。 - Frank van Puffelen
有人知道如何取消订阅主题而不使用批处理(https://iid.googleapis.com/iid/v1:batchRemove)吗? - Lea
嘿,我在使用Node.js创建主题时遇到了问题。你能告诉我问题出在哪里吗?http://stackoverflow.com/questions/43421040/creating-messaging-topic-on-cloud-function - Doge
2
@Patrick 使用 DELETE https://iid.googleapis.com/iid/v1/IID_TOKEN/rel/topics/TOPIC_NAME - NickUnuchek
显示剩余2条评论

23

Firebase需要一些时间在控制台中创建新主题。在我的情况下,新主题在4小时后才被创建。


1
这并没有真正添加任何内容。订阅主题的函数已经在问题中由OP给出。另一个函数没有被要求,也不是他所要求的。请考虑编辑您的答案以使其符合问题。谢谢! - Fabio says Reinstate Monica
2
这回答了我的问题。我原本期望它能立即响应。 - PGMacDesign

23

您可以使用 HTTP API 创建话题:

https://iid.googleapis.com/iid/v1/IID_TOKEN/rel/topics/TOPIC_NAME

1. IID_TOKEN = 设备注册令牌,您可以在 Android 设备上使用以下命令找到它:

String IID_TOKEN = FirebaseInstanceId.getInstance().getToken();

2.TOPIC_NAME = 新主题名称

3.Authorization: key=YOUR_API_KEY。将此参数设置在标头中。请参考以下截图:通过高级 REST 客户端创建新主题

YOUR_API_KEY:console.firebase.google.com

发送请求后,您将收到 HTTP 状态“OK”,然后您可以使用以下 API 获取有关当前项目中所有主题的信息:

https://iid.googleapis.com/iid/info/IID_TOKEN?details=true

需要在请求头中添加授权密钥,然后您将收到主题列表: 响应信息主题

我建议阅读谷歌关于实例 ID / 服务器的文章


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