如何正确使用SignalR和推送通知?
How to use SignalR and Push notification correctly?
我和我的团队使用 ASP.Net 作为后端,Html 5 和iOS 作为前端。
我的服务有聊天功能,用户可以互相聊天。使用SignalR实现。
我们已经成功实现了该功能,但最后,我们意识到 SignalR 仅在应用程序打开时激活。当应用程序不存在时,用户无法从服务接收任何信息。
下一步,我们正在考虑 OneSignal(推送通知第三方服务),实现并不那么复杂,我们成功了 sending/receiving 推送通知。
我们现在面临的问题是:
- 打开应用程序后,如何正确处理从Signalr和OneSignal发送过来的信息?我们不想在应用程序打开时收到推送通知,但在应用程序未打开时我们会这样做。
有人可以帮助我们吗?
谢谢,
您需要在服务器端跟踪 connected/disconnected 用户。
如果用户已连接,则发送信号器消息。如果用户未连接,则发送推送通知。
也就是说,使用 SignalR 跟踪用户 connections/disconnections 并不容易,因为从客户端停止(即:关闭应用程序、网络故障等)到服务器确实认为客户端已断开连接。如果我没记错的话可能是 20 秒左右。发生这种情况是因为 SignalR 在放弃之前尝试使用相同的 ConnectionId 重新连接 20 秒。
另一种可能的解决方案:
通过信号器和推送通知发送每条消息。
为每个消息负载(在服务器上生成)设置一个 uid 属性。
客户端显示消息,然后将该 uid 添加到本地数据库。
当客户端收到另一条具有相同 uid 的消息时(无论是来自推送通知还是 Signalr),它将被丢弃。
我在聊天应用程序中完成了此操作,效果很好。唯一的问题是当应用程序连接时你会浪费推送通知,但推送通知服务很便宜......而且我很确定 SignalR 消息到达的速度比推送通知快得多。
我和我的团队使用 ASP.Net 作为后端,Html 5 和iOS 作为前端。
我的服务有聊天功能,用户可以互相聊天。使用SignalR实现。
我们已经成功实现了该功能,但最后,我们意识到 SignalR 仅在应用程序打开时激活。当应用程序不存在时,用户无法从服务接收任何信息。
下一步,我们正在考虑 OneSignal(推送通知第三方服务),实现并不那么复杂,我们成功了 sending/receiving 推送通知。
我们现在面临的问题是:
- 打开应用程序后,如何正确处理从Signalr和OneSignal发送过来的信息?我们不想在应用程序打开时收到推送通知,但在应用程序未打开时我们会这样做。
有人可以帮助我们吗?
谢谢,
您需要在服务器端跟踪 connected/disconnected 用户。 如果用户已连接,则发送信号器消息。如果用户未连接,则发送推送通知。
也就是说,使用 SignalR 跟踪用户 connections/disconnections 并不容易,因为从客户端停止(即:关闭应用程序、网络故障等)到服务器确实认为客户端已断开连接。如果我没记错的话可能是 20 秒左右。发生这种情况是因为 SignalR 在放弃之前尝试使用相同的 ConnectionId 重新连接 20 秒。
另一种可能的解决方案:
通过信号器和推送通知发送每条消息。 为每个消息负载(在服务器上生成)设置一个 uid 属性。 客户端显示消息,然后将该 uid 添加到本地数据库。 当客户端收到另一条具有相同 uid 的消息时(无论是来自推送通知还是 Signalr),它将被丢弃。
我在聊天应用程序中完成了此操作,效果很好。唯一的问题是当应用程序连接时你会浪费推送通知,但推送通知服务很便宜......而且我很确定 SignalR 消息到达的速度比推送通知快得多。