通过 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发送推送通知

Firebase 通过 curl 命令发送推送通知有效,但不是来自 firebase 控制台

通过 Firebase 推送通知

如何通过 Firebase 云消息发送推送通知(快速入门)?

通过 Firebase 函数发送的 Swift 中的加密推送通知

通过 Firebase 通知 API 发送消息时,是不是可以获得推送通知统计信息,例如交付次数和打开次数?