【问题标题】:How to receive calls/messages real-time when the application is closed如何在应用程序关闭时实时接收呼叫/消息
【发布时间】:2021-01-12 14:31:16
【问题描述】:

我正在开发一个使用 SIP 作为信令协议的 VoIP 应用程序。我已经实现了消息传递和调用功能,它们在应用程序处于前台时工作。为了让应用在关闭时监听来电和消息接收,我创建了一个前台通知,以便应用始终处于前台。

问题是上述方法消耗大量电力,这是不可接受的。我还注意到,著名的 VoIP 应用程序(如 WhatsApp 和 Signal)没有使用前台通知,但无论应用程序是否关闭,它们都会设法通知我们来电/消息。我想知道如何实现相同的功能。有人能指出我正确的方向吗?

【问题讨论】:

  • WhatsApp 和类似的应用程序使用推送通知(参考:firebase.google.com/docs/cloud-messaging)在它们应该接收消息或呼叫时触发应用程序的方法。将适当的推送通知发送到设备,提供有关要引发的事件的信息,并且应用程序以正确的方式运行。实现取决于您的前台应用程序当前如何侦听传入呼叫: - Peer2Peer 连接到达它并且应该响应? - 应用程序对保持语音呼叫的服务器执行轮询操作,直到应用程序回答它?
  • @emandt 感谢您的参考。实际上,当一方拨打另一方的SIP地址时,SIP服务器会解析接收方的IP地址,并在接收方一侧注明。当这种握手发生时,服务器的交互就基本结束了。然后只有对等连接。有什么想法吗?
  • 好的。 App如何从Server接收呼叫信息(呼叫者的IP地址)?通过投票?通过推送通知?你写过关于电源的文章,所以我想通过按间隔轮询服务器....我是对的吗?
  • 是的,当然是通过投票

标签: android real-time sip voip


【解决方案1】:

这种App应该使用Push Notifications(参考:https://firebase.google.com/docs/cloud-messaging),整个系统使用一个单一的socket连接:每个App应该注册自己接收Push,然后当服务器触发时(FCM支持多种语言带有示例/教程)调用事件,然后一个特殊的“消息”被发送到应用程序(提供一些关于 IP 或任何你想要的信息)获取这些信息并以正确的方式行动。

不幸的是,FCM 在每月数千次通知后需要付款。 还有其他类似的在线服务,但这些服务需要收费,因为它们要同时处理许多连接的用户,并且需要硬件和带宽。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多