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应用程序,您必须执行以下操作:
- 从Xcode项目的Capabilities选项卡的Background modes部分启用对IP语音的支持。 (您也可以通过在您的应用程序的Info.plist文件中包含带有voip值的
UIBackgroundModes
键来启用此支持。)- 为VoIP使用configuration一个应用套接字。
- 在移到后台之前,调用
setKeepAliveTimeout:handler:
方法来安装一个定期执行的处理程序。 您的应用程序可以使用此处理程序来维护其服务连接。- configuration您的audio会话以处理转入和转出活动使用。
你可能会find你的答案或一些线索 – > 这里 < –
正确地研究以下内容:
applicationDidEnterBackground beginBackgroundTaskWithExpirationHandler