我最近在我的即时消息应用上遇到了问题。我在iOS上使用 Ejabberd 17.04 ,启用了mod_stream_management
和mod_offline
以及 XMPPFramework 。当应用程序进入后台时,我很难关闭连接并使用</stream:stream>
终止流。
以下是当前的情况,我希望在客户端处于后台时发送推送通知,并在前台使用我的Ejabberd服务器。
当客户端进入后台时,我会在func applicationDidEnterBackground(_ application: UIApplication)
中执行以下操作。
<presence type="unavailable"/>
XMPPStream.disconnectAfterSending()
发送</stream:stream>
并断开与Ejabberd服务器的连接。通过这样做,我认为流将被终止并断开连接。通过接收不可用状态,服务器将所有消息发送到离线消息并发送推送通知。
不幸的是,结果不是,流可能有时不会被终止并且用户存在仍然可用。在这种情况下,Ejabberd不知道客户端的新状态(不可用)并继续向旧流发送消息,而不是发送导致消息丢失的推送通知。
我将流的超时设置为5分钟,并应重新发送&#34;丢失&#34;给客户的消息。但我发现延迟是不可接受的,也不是我所期待的。
我想知道是否有一种方法可以确保流正确终止并同时将状态设置为不可用,因此我可以正确发送推送通知。如有必要,我可以提供更多细节。感谢。