Ios 当应用程序被发送到后台模式时,如何继续接收数据?

Ios 当应用程序被发送到后台模式时,如何继续接收数据?,ios,Ios,在iOS12中,如果网络请求不是URLSessionDownloadTask,苹果开始取消它们,并设置后台会话 但据苹果网站称: 您不必在后台执行所有后台网络活动 会议。。。声明合适的应用程序 后台模式可以使用默认的URL会话和数据任务,就像 如果他们在前景中 我是一个带有自定义播放器的流媒体文件,应用程序启用了音频和后台提取模式URLSessionDataTask在应用程序进入后台状态后立即在前台初始化。任务被取消 我知道AVPlayer可以在后台进行流媒体播放,但使用AVPlayer不是一个

在iOS12中,如果网络请求不是
URLSessionDownloadTask
,苹果开始取消它们,并设置后台会话

但据苹果网站称:

您不必在后台执行所有后台网络活动 会议。。。声明合适的应用程序 后台模式可以使用默认的URL会话和数据任务,就像 如果他们在前景中

我是一个带有自定义播放器的流媒体文件,应用程序启用了
音频
后台提取
模式<代码>URLSessionDataTask在应用程序进入后台状态后立即在前台初始化。任务被取消

我知道AVPlayer可以在后台进行流媒体播放,但使用AVPlayer不是一个选项

我知道我可以使用
URLSessionDownloadTask
设置会话,它将在单独的过程中下载数据并返回文件路径,但由于流式传输的要求,这不是一个选项

我知道我可以使用
UIApplication.shared.beginBackgroundTask
请求额外的后台执行时间,但这不是可接受的解决方案,因为如果
backgroundTimeRemaining
在流完成的应用程序被终止之前过期


当应用程序处于后台模式时,是否有办法保持接收数据

确保您的后台会话已启用。如果不这样做,则当应用程序从前台执行过渡到后台执行时,会话将停止数据任务。或者,正如该文档所说,您也可以使用会话配置,它不会表现出这种行为


FWIW,在使用AVPlayer时,除了启用后台音频功能外

。。。您可能还必须告诉共享音频会话实例它处于活动状态:

try AVAudioSession.sharedInstance().setCategory(.playback)
try AVAudioSession.sharedInstance().setActive(true)

我不能说你的“自定义播放器”需要什么,但对我来说,我必须同时做这两件事才能让应用程序在后台运行,播放音频,使用
AVPlayer

你是否100%确定你的“自定义播放器”让应用程序在后台运行,并且应用程序没有被挂起?是的。只要缓冲区中有数据,它就会播放,然后停止播放。测试时,将
shouldUseExtendedBackgroundIdleMode
设置为
true
,当应用程序处于后台状态时(但看起来下载暂停),只要设备锁定,连接就会取消。我知道当使用AVPlayer系统保持连接活动时,我怀疑AVPlayer具有特殊权限。如果您想检查项目设置/查看描述的行为,这里是指向测试项目的链接。