我正在尝试使用Pusher或PubNub(websockets)实现iOS聊天应用程序。
问题:当iOS应用在后台时,消息传递如何工作?
据我所知,Websockets实现提供了实时消息传递,并且不会对消息进行缓存。 当应用在后台时套接字连接断开,邮件是否丢失?
如果是,我该如何恢复丢失的消息?一个想法是每次应用程序到达前台时实现状态刷新协议。
答案 0 :(得分:2)
你提到PubNub(我工作的公司)和@FrankG提到的,除非你获得Apple的许可在后台运行你的应用程序(保持连接到互联网,因此,PubNub),你将不会收到任何消息实时。
您可以使用PubNub's Mobile Push Gateway并在应用处于后台(但空闲/未运行)或完全未运行(终止状态)时接收APNS推送消息。
当再次激活应用程序时,PubNub可以从订阅的频道configured to automatically retrieve missed messages开始,但这对于短时间的断开连接是有利的。
如果离线较长时间,您可以启用Storage & Playback并使用所需频道中的the historyForChannel
API to fetch all the missed messages。
答案 1 :(得分:1)
答案:它没有。
如果iOS应用在后台,那你就不走运了。当应用程序在后台时,没有官方(和Apple认可的)保持连接打开的方式。有些黑客喜欢播放静音音轨以保持前景,但Apple并不赞成这种黑客行为。您需要使用APNS发送离线消息以将应用程序带到前台,以便重新连接。
并且您100%正确,WS标准不解决缓存问题。这必须由架构中的另一个子系统执行。
Kaazing Gateway(披露:我工作的公司)在我们的消息传递网关中有一个功能,用于缓存发送的最后一个值。当客户端重新连接(我们的客户端libs自动重新连接)时,他们将看到该值。