如何正确使用SignalR和Push通知?

时间:2016-10-31 06:20:05

标签: push-notification signalr onesignal

我和我的团队使用 ASP.Net 作为后端, Html 5 iOS 作为前端制作项目。< / p>

我的服务有聊天功能,用户可以互相聊天。它是使用SignalR实现的。

我们已经成功实现了该功能,但最后,我们已经意识到SignalR仅在打开应用程序时处于活动状态。当应用程序不是时,用户无法从服务中接收任何信息。

下一步,我们正在考虑OneSignal(推送通知第三方服务),实施并不复杂,我们成功发送/接收推送通知。

我们现在面临的问题是:

  • 当应用程序打开时,我们如何才能正确处理Signalr和OneSignal发送的信息?当应用程序打开时,我们不希望收到推送通知,但是当应用程序没有时,我们会这样做。

任何人都可以帮助我们吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

您需要在服务器端跟踪已连接/已断开连接的用户。 如果用户已连接,则发送信号器消息。如果用户未连接,则发送推送通知。

也就是说,用SignalR跟踪用户连接/断开连接并不容易,因为从客户端停止(即:关闭应用程序,网络故障等)到服务器真正认为的时间有延迟客户端已断开连接。如果我正确的话可能会持续20秒。发生这种情况是因为SignalR在放弃之前尝试使用相同的ConnectionId重新解析20秒。

另一种可能的解决方案

通过信号器和推送通知发送每条消息。 在每个消息有效负载(在服务器上生成)上设置uid属性。 客户端显示该消息,然后将该uid添加到本地数据库。 当客户端使用相同的uid(从推送通知或信号器开始)获取另一条消息时,它将被丢弃。

我在聊天应用程序中完成了这项工作,效果非常好。唯一的问题是,当应用程序连接时你会浪费推送通知,但是推送通知服务很便宜......而且我很确定SignalR消息的推送速度比推送通知快得多。

相关问题