iOS背景不起作用

我正在为iOS编写一个VoIP应用程序,但App在后台时会停止接受呼叫。 当应用程序再次处于活动状态时,所有排队的消息开始处理。

以下是我所做的。

在构build应用程序时,我将IP语音以及audio和AirPlay添加到plist文件。 然后,我们用NetworkServiceTypeVoIP标记websocket连接,就像你在这里看到的那样。

我还没有设置保持活动超时处理程序,因为注册并不重要,如果应用程序不会唤醒接听电话。 任何帮助将不胜感激。

应该指出,这是我第一个Swift项目,我对iOS平台不是很熟悉。

要允许在后台模式下工作您的应用程序,您需要启用IP语音标志打开(path:转到目标 – >function – >背景模式)。 如下所示。

在这里输入图像说明

并在您的项目中添加以下代码以在后台进行支持:

第1步:声明__block UIBackgroundTaskIdentifier bgTask作为全局variables。

第2步:在applicationDidEnterBackground中添加以下代码。

  - (void)applicationDidEnterBackground:(UIApplication *)application { bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ bgTask = UIBackgroundTaskInvalid; }]; } 

第三步:一旦应用程序进入前台模式,停止后台任务处理程序。

 - (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. [[UIApplication sharedApplication] endBackgroundTask:bgTask]; } 

看看苹果文档 ,你可能对UIBackgroundModes=voip感兴趣。

UPD:

从文档:

要configurationVoIP应用程序,您必须执行以下操作:

  1. 从Xcode项目的Capabilities选项卡的Background modes部分启用对IP语音的支持。 (您也可以通过在您的应用程序的Info.plist文件中包含带有voip值的UIBackgroundModes键来启用此支持。)
  2. 为VoIP使用configuration一个应用套接字。
  3. 在移到后台之前,调用setKeepAliveTimeout:handler:方法来安装一个定期执行的处理程序。 您的应用程序可以使用此处理程序来维护其服务连接。
  4. configuration您的audio会话以处理转入和转出活动使用。

你可能会find你的答案或一些线索 – > 这里 < –

正确地研究以下内容:

 applicationDidEnterBackground beginBackgroundTaskWithExpirationHandler