Push notification 如何正确使用信号器和推送通知?

Push notification 如何正确使用信号器和推送通知?,push-notification,signalr,onesignal,Push Notification,Signalr,Onesignal,我和我的团队使用ASP.Net作为后端,HTML5和iOS作为前端来制作一个项目 我的服务有聊天功能,用户可以互相聊天。它是用signar实现的 我们已经成功地实现了该功能,但最后,我们意识到signar仅在应用程序打开时才激活。当应用程序不可用时,用户无法从服务接收任何信息 下一步,我们考虑的是OneSignal(推送通知第三方服务),实现并不复杂,我们成功地发送/接收了推送通知 我们现在面临的问题是: 当应用程序打开时,我们如何正确处理Signal和OneSignal发送的信息?我们不希望

我和我的团队使用ASP.Net作为后端,HTML5iOS作为前端来制作一个项目

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

我们已经成功地实现了该功能,但最后,我们意识到signar仅在应用程序打开时才激活。当应用程序不可用时,用户无法从服务接收任何信息

下一步,我们考虑的是OneSignal(推送通知第三方服务),实现并不复杂,我们成功地发送/接收了推送通知

我们现在面临的问题是:

  • 当应用程序打开时,我们如何正确处理Signal和OneSignal发送的信息?我们不希望在应用程序打开时收到推送通知,但在应用程序未打开时会收到推送通知。
有人能帮我们吗


谢谢,

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

这就是说,使用SignalR跟踪用户连接/断开连接并不容易,因为从客户端停止(即:关闭应用程序、网络故障等)到服务器真正认为客户端已断开连接之间存在延迟。如果我是对的,可能会在20秒左右。之所以会发生这种情况,是因为信号器在放弃之前尝试使用相同的连接ID重新连接20秒

另一种可能的解决方案

通过信号器和推送通知发送每条消息。 为每个消息负载(在服务器上生成)设置uid属性。 客户端显示消息,然后将该uid添加到本地数据库。 当客户端收到另一条具有相同uid的消息时(无论是来自推送通知还是信号器),它都将被丢弃


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

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

这就是说,使用SignalR跟踪用户连接/断开连接并不容易,因为从客户端停止(即:关闭应用程序、网络故障等)到服务器真正认为客户端已断开连接之间存在延迟。如果我是对的,可能会在20秒左右。之所以会发生这种情况,是因为信号器在放弃之前尝试使用相同的连接ID重新连接20秒

另一种可能的解决方案

通过信号器和推送通知发送每条消息。 为每个消息负载(在服务器上生成)设置uid属性。 客户端显示消息,然后将该uid添加到本地数据库。 当客户端收到另一条具有相同uid的消息时(无论是来自推送通知还是信号器),它都将被丢弃


我在一个聊天应用程序中完成了这项工作,它运行得非常好。唯一的问题是,当应用程序连接时,你会浪费推送通知,但推送通知服务很便宜。。。而且我非常肯定,信号器消息的到达速度将比推送通知快得多。

实际上,OneSignal服务是免费的,因此,我不太在乎定价。我唯一想知道的是服务器的性能,因为服务器应该同时发送推送通知和信号器消息。如果您每分钟发送数百或数千条消息,您可能是对的。这是需要检验的。但如果你计划有这么大的工作量,我建议你实现一个分布式架构和一个后面板。实际上,OneSignal服务是免费的,因此,我不太在乎定价。我唯一想知道的是服务器的性能,因为服务器应该同时发送推送通知和信号器消息。如果您每分钟发送数百或数千条消息,您可能是对的。这是需要检验的。但是,如果您计划拥有如此巨大的工作负载,我建议您实现一个分布式体系结构和一个后面板。