通过 Firebase 推送通知
Posted
技术标签:
【中文标题】通过 Firebase 推送通知【英文标题】:Push Notifications through Firebase 【发布时间】:2016-05-19 17:56:45 【问题描述】:昨天,Google 宣布了一套用于 Firebase 的新工具,其中之一是 Notifications,它能够将通知从服务器发送到正在使用我的应用的设备。
但是我们现在可以在用户收到新消息时通知他们吗?
如果没有,有没有办法实现这一点?
【问题讨论】:
如果您的意思是来自另一个用户的新消息,那么我也想知道这一点。查看文档,看起来这仍然无法自动实现。我认为您需要让另一台服务器检查发送的每条消息,然后创建一个带有收件人用户 ID 标记的通知。然后您为收件人订阅它自己的用户 ID 标签。检查link @user2997154 文档中的精彩搜索。如果你把它写成答案,我会投赞成票。 :-) 【参考方案1】:查看文档,目前这似乎无法自动实现。这是使用另一台服务器“手动”完成它的一种可能方法:
-
为用户订阅自己的用户 ID
在安卓中
FirebaseMessaging.getInstance().subscribeToTopic("InsertUserIDHere");
在ios中
[[FIRMessaging messaging] subscribeToTopic:@"/topics/InsertUserIDHere"];
-
设置一个外部服务器来检查每条发送的消息。发送消息时,服务器应创建一个通知,其中包含收件人的用户 ID 作为主题。
查看here 了解更多信息。
【讨论】:
太棒了!!如果可以的话,我有 2 个问题。首先,我们将如何使用另一台服务器发送通知,Firebase 只允许通过控制台发送通知。其次,如果我有很多用户,它会有效吗?文档说“在控制台中显示新主题之前可能会延迟多达一天”。谢谢。 忽略我最后的评论。查看here 以获取有关通过没有控制台的服务器发送消息的更多信息。如果您不使用控制台,我不确定延迟是否仍然适用。【参考方案2】:您可以向一组用户(针对特定“主题”)或单个设备(针对 Firebase 云消息传递令牌)发送消息。
要将设备订阅到某个主题,请使用:
FirebaseMessaging.getInstance().subscribeToTopic("topicName");
要获取设备令牌,请使用 (*1):
FirebaseInstanceId.getInstance().getToken();
如果您想从服务器发送消息,则可以使用 Firebase Notificaitons Web 控制台或 FCM 服务器 API。 见:https://firebase.google.com/docs/cloud-messaging/downstream#sending_topic_messages_from_the_server
注意事项:
[1] 如果令牌尚不可用,getToken()
可以返回 null。
您可以使用回调onTokenRefresh()
在令牌可用和令牌轮换时收到通知。
见:https://firebase.google.com/docs/cloud-messaging/android/client#sample-register
【讨论】:
以上是关于通过 Firebase 推送通知的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 通过 curl 命令发送推送通知有效,但不是来自 firebase 控制台
如何通过 Firebase 云消息发送推送通知(快速入门)?