在WiFi重新连接和设备重启(iOS)上维护VoIP套接字?

时间:2012-02-02 13:08:18

标签: iphone ios sockets wifi voip

我有一个VoIP套接字设置,即使在挂起状态下它也能正常工作,并且每隔10分钟ping一次服务器。

但是当WiFi连接中断时,即使处于暂停状态,我也不知道如何重新连接到该服务。设备重启也是如此。

有经验吗?

3 个答案:

答案 0 :(得分:3)

  1. Bad WiFI :iOS不允许您选择要绑定到套接字的网络,这意味着:
    • 如果设备只有2G / 3G / 4G网络,则会将套接字绑定在其上。
    • 如果你还有WiFi(也是破损的WiFi)它会将你的套接字绑在它上面,即使它对你不好。
  2. 重新连接:您可以在 UIApplication 中使用10分钟KeepAlive阻止,以便每10分钟尝试修复一次连接:每10分钟唤醒并尝试重新连接
  3. 自动启动应用:设备重启后,如果VoIP应用在重启前运行,则可以运行。 (此VoIP应用程序特权也会在崩溃后启动您的应用程序)
  4. 注意:您可以通过在 applicationDidFinishLaunching 中询问 UIApplication 其applicationState来检测您是否自动启动。
  5. 提示:在后台执行操作时使用后台任务
  6. 链接:

答案 1 :(得分:0)

如果设备重新启动,则无法再次启动应用。用户必须启动您的应用。

当您的连接被删除时,由于某种类型的netwerk错误而您的应用程序在后台运行,iOS将暂停您的应用程序。因此,用户必须再次启动应用程序才能使其正常工作。

答案 2 :(得分:-1)

<强> setKeepAliveTimeout:处理程序:

为VoIP应用程序配置定期处理程序。

  • (BOOL)setKeepAliveTimeout:(NSTimeInterval)超时处理程序:(void(^)(void))keepAliveHandler

参数

超时

应唤醒应用程序以检查其VoIP连接的最大间隔(以秒为单位)。可接受的最小超时值为600秒。 keepAliveHandler 执行维护VoIP网络连接所需任务的块。将此参数设置为nil会释放当前处理程序块,并阻止UIKit安排下一次唤醒。

返回值

如果已安装处理程序,则为YES;如果不是,则为NO。

讨论

IP语音(VoIP)应用程序可以使用此方法安装处理程序,其作用是维护应用程序与VoIP服务器的网络连接。保证在指定的超时值之前调用此处理程序,但可以稍微不同的时间间隔调用此处理程序,以便更好地将处理程序的执行与其他系统任务对齐,从而节省功耗。您的处理程序最多需要10秒才能执行任何所需任务并退出。如果在时间到期之前没有退出,则应用程序将被暂停。

应用程序启动之间不会保留超时值和处理程序。因此,如果您的应用程序因任何原因而终止,则必须在下一个启动周期中重新安装该处理程序。

要成功调用此方法,应用程序必须在与Info.plist文件中的UIBackgroundModes键关联的数组中具有voip值。调用此方法将替换先前安装的处理程序和超时值(如果有)。

状况

适用于iOS 4.0及更高版本。

声明

UIApplication.h