使用Firebase云消息传递实现即时消息传递

时间:2016-11-08 23:35:31

标签: android firebase firebase-cloud-messaging

我已经设置了一个可以通过以下方式与Firebase云消息传递(FCM)配合使用的Android应用:

  1. 当我的应用启动时,它会发送FCM令牌发送到我的应用服务器,该服务器将令牌存储在数据库中
  2. 当用户发送消息时,它会将消息发送到我的应用服务器。我的应用服务器然后检索其他用户'来自数据库的FCM令牌,并向Google发送请求以将消息推送到这些设备
  3. 这样可行,但我面临的问题是确定将消息发送到哪个FCM令牌。 Firebase云消息传递的工作方式是在应用程序在后台运行时传递消息。我不希望这样,因为它不必要,浪费了用户和我的应用服务器的带宽。

    那么我怎样才能将FCM消息发送到打开我的应用程序的设备?我不能简单地查看Google发送FCM消息时的响应,然后删除所有未能发送的FCM令牌,因为即使应用程序在后台或应用程序已被强制停止,响应也会显示消息已成功发送

    所以,我可以想到一些可能的解决方案,但我不确定哪个是最好的。它们似乎都不是很好的选择。

    1. 让我的应用每隔几分钟轮询我的服务器,告诉它该应用已打开。 (我想避免轮询,因为FCM应该消除什么?)
    2. 强制Firebase Cloud Messaging在每次暂停或销毁应用时删除令牌。这将使消息无法发送到旧的FCM令牌,然后我可以删除失败的消息。
    3. 放弃FCM并使用TCP连接实施我的解决方案
    4. 我现在倾向于选择#2。但它仍然意味着我的应用服务器必须尝试并且无法向离线设备发送消息。有没有更好的方法让我失踪?

      感谢。

1 个答案:

答案 0 :(得分:0)

我实际上认为你的方法是错误的。 Firebase专为即时消息应用程序而设计 - 这是服务的重点。当您的应用程序处于打开状态时,您可以使用Firebase数据库和SDK来设置观察者,以便在数据发生变化时实时查看。

当应用程序在后台时,连接终止,然后您需要依赖推送通知。

您应该查看Chat SDK,它是一个使用Firebase的开源即时消息 - 也许它可以为您提供有关如何实现您正在寻找的功能的一些想法。您可以在Github上看到该项目。