【问题标题】:iOS XMPP disconnect on background doesn't get reported没有报告 iOS XMPP 在后台断开连接
【发布时间】:2011-11-13 23:46:48
【问题描述】:

当应用程序处于后台并且 xmpp 由于互联网中断而断开连接时,如果互联网恢复正常,当我打开应用程序时,不会发出断开连接呼叫,因此应用程序不会尝试重新连接。

如果我检查 xmppstream 是否已连接,则显示为是。当我返回应用程序时,如何检查连接是否仍然存在?

目前我正在尝试断开连接,并在每次应用唤醒时连接。但理想的情况是检测断开连接......

谢谢

【问题讨论】:

    标签: ios xmpp disconnect


    【解决方案1】:

    如果您可以检测到应用何时唤醒,请发送ping。如果您没有收到回复,请重新连接。如果您使用的 XMPP 库支持Stream Management,尤其是流恢复支持,您可以使用它来获取流。

    更好的解决方案是拥有一个单独的守护进程来管理连接,并在后台保持活动状态,如果这在 iOS 上是允许的话。另外,this XEP 可能会引起您的兴趣。

    【讨论】:

    • 另一方面,如果服务器不支持 ping,它只会回复一个无害的警告(ejabberd 会这样做,IIRC),您仍然可以确定连接是否已断开。
    • 你能告诉我们如何在后台模式下保持会话活跃吗?
    【解决方案2】:

    如果您使用的是 XMPPFramework (https://github.com/robbiehanson/XMPPFramework),那么看看 XMPPReconnect,它将为您省去很多重新连接的麻烦。

    创建流后,使用以下内容。

    xmppReconnect = [[XMPPReconnect alloc] init];
    [xmppReconnect activate:xmppStream];
    [xmppReconnect addDelegate:self delegateQueue:dispatch_get_main_queue()];
    

    【讨论】:

    • 我可以把它放在“setupStream”或其他地方吗?
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多