iOS中的Background Modes — 是什么、有哪些模式及配置

作者: IT Sectr 发布日期: 2026-03-27 阅读时间: 9 分钟

Background Modes — 是一组可声明的iOS功能,允许应用程序在切换到后台模式后继续执行代码。每种模式对应特定类型的任务:音频、地理定位、VoIP、蓝牙、fetch和processing。根据Apple, 2026的数据,Background Modes的不当使用是App Store审核中应用被拒绝的常见原因之一。

要点

  • Background Modes — 用于在后台合法执行代码的iOS capability集合。
  • 音频模式 — 在后台播放音乐、播客、有声读物,可通过Control Center控制。
  • 地理定位 — 在后台跟踪位置,用于导航和健身追踪器。
  • 蓝牙 — 在后台与BLE设备交互:健身手环、传感器、外设。
  • Apple审查 — 不当使用模式会导致应用被App Store拒绝。

iOS中的Background Modes是什么?

Background Modes — 是Xcode项目的capability,声明应用程序在后台执行特定类型操作的意图。与Android不同,在Android中应用可以在后台启动任何Service,而iOS要求在Info.plist中明确指定模式。每种模式都有严格的使用规则,并在Apple审核时进行检查。

Background Modes如何工作

当应用进入后台时,iOS会在3-5秒后将其挂起。如果应用声明了Background Mode并积极使用相应的API(例如用于音频的AVAudioSession),系统会将其切换到特殊的执行模式。应用保留在RAM中,并且可以执行受模式类型限制的代码。

可用模式的完整列表

iOS支持以下Background Modes:Audio、Location、VoIP、Bluetooth LE、Background Fetch、Background Processing、External Accessory Communication、Push to Talk(PTT)和HealthKit。每种模式需要在应用描述中提供理由。

模式Info.plist键用途iOS版本
Audioaudio后台音频、AirPlay4.0+
Locationlocation位置跟踪4.0+
VoIPvoipVoIP推送通知4.0+
BLEbluetooth-central与BLE设备交互7.0+
Fetchfetch定期数据下载7.0+
Processingprocessing长时间后台任务13.0+
Push to Talkpush-to-talk语音Push to Talk16.0+

音频模式(Audio、AirPlay和Picture in Picture)

Audio Background Mode — 最常见的模式,由音乐播放器、播客应用和音频服务使用。应用可以继续播放声音,通过Control Center控制并在Lock Screen上显示。启用只需将AVAudioSession配置为.playback类别。

配置音频会话

要在后台播放音频,需要配置AVAudioSession并激活它。.playback类别通知系统应用正在播放声音,并且应在后台保持活动状态。没有此配置,声音将在应用最小化后5-10秒内停止。

swift
import AVFoundation

func configureAudioSession() {
    let session = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(
            .playback,
            mode: .default,
            options: []
        )
        try session.setActive(true)
    } catch {
        print("音频会话错误:\(error)")
    }
}

从Control Center控制播放

要与Control Center和Lock Screen集成,需要配置MPRemoteCommandCenter。它处理Play、Pause、Next和Previous Track命令。还需要更新MPNowPlayingInfoProperty以显示元数据:歌曲标题、艺术家、封面和播放进度。

视频的Picture in Picture

iOS 14开始,音频Background Mode也支持视频的Picture in Picture。应用可以在最小化时在浮动窗口中继续显示视频。使用带有AVPlayerLayer的AVPictureInPictureController进行激活。该模式仅在应用播放音轨时工作。

地理定位(Location updates)

Location Background Mode允许应用在后台接收地理定位更新。用于导航器、健身追踪器、配送应用和社交网络。没有此模式,应用在切换到后台时只接收一次位置,之后更新停止。

位置跟踪类型

CLLocationManager支持多种跟踪策略:重大变化(significant-change location)、标准跟踪(standard location)和区域监控(region monitoring)。要在后台以最高精度工作,请使用allowsBackgroundLocationUpdates = truepausesLocationUpdatesAutomatically = false

能源效率和精度

在后台持续跟踪位置是最耗电的场景之一。iOS自动根据移动速度调整更新频率:步行时每10-30秒一次,驾车时每1-5秒一次。导航时使用desiredAccuracy = kCLLocationAccuracyBestForNavigation

swift
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()

重大位置变化

Significant-change location模式无需Location Background Mode即可工作——系统仅在坐标发生重大变化时(通常500米或更多)唤醒应用。不需要持续开启GPS,从而节省电池。适用于在用户移动时更新数据的天气应用。

蓝牙模式(LE accessories)

Bluetooth LE Background Mode允许应用在后台与BLE设备交互。由健身手环、医疗传感器、Smart Home设备和Beacon导航使用。该模式分为两个子类型:bluetooth-central(应用连接到设备)和bluetooth-peripheral(应用充当设备)。

在Central模式下工作

作为Central角色的应用可以在后台扫描并连接BLE设备。为此,需要在Background Modes中指定bluetooth-central,并使用CBCentralManager.scanForPeripherals方法,带CBCentralManagerScanOptionAllowDuplicatesKey选项。在后台,扫描以较低频率工作——系统可能会延迟检测以节省能源。

在Peripheral模式下工作

作为Peripheral角色的应用可以广播服务并响应其他设备的请求。蓝牙peripheral模式允许应用在后台保持对其他BLE设备可见。用于HealthKit应用和IoT解决方案。

Beacon和Region Monitoring

iBeacon监控在后台无需额外权限即可工作——系统自行跟踪进入和离开Beacon区域。但扫描Beacon内容(proximity UUID、major、minor)需要蓝牙权限和bluetooth-central Background Mode。使用带CLBeaconRegion的CLLocationManager进行监控。

适用于通信应用的VoIP和PushKit

VoIP Background Mode适用于语音通信应用(Skype、Zoom、WhatsApp)。此模式允许应用保持与服务器的连接以接收入站呼叫。从iOS 8开始,VoIP使用PushKit——一个框架,用于处理来自VoIP服务器的推送通知,无需APNs参与。

用于入站呼叫的PushKit

PushKit是唯一保证将VoIP通知传送到设备的机制。收到PushKit通知后,系统会唤醒应用,即使应用已终止。应用必须在30秒内连接到服务器并显示有关入站呼叫的本地通知。

swift
import PushKit

class VoIPHandler: NSObject, PKPushRegistryDelegate {
    func pushRegistry(
        _ registry: PKPushRegistry,
        didReceiveIncomingPushWith payload: PKPushPayload,
        for type: PKPushType,
        completion: @escaping () -> Void
    ) {
        let caller = payload.dictionaryPayload["caller"] as! String
        reportIncomingCall(from: caller)
        completion()
    }
}

PushKit使用规则

PushKit不能用于普通通知——只能用于VoIP、watchOS通信和文件提供商。Apple在审核时会检查这一点。不当使用时,应用会被拒绝。从iOS 13开始,PushKit仅传递通知——调用CXProvider(CallKit)以显示呼叫屏幕是强制性的。

Fetch和Processing模式

Background FetchBackground Processing——用于在后台更新内容和执行长时间任务的模式。Fetch——短期定期更新(最长30秒),Processing——带条件(Wi-Fi、充电)的长时间任务(最长10分钟)。Processing仅从iOS 13+开始可用。

Background Fetch — 快速更新

Fetch模式允许系统定期唤醒应用以下载新内容。系统分析用户行为并选择最佳时间。应用必须在30秒内调用completion handler。Fetch适用于新闻应用、社交媒体信息流和天气。

Background Processing — 长时间任务

BGProcessingTask用于无需用户参与即可执行的任务:清理缓存、同步大型数据库、处理媒体文件。系统仅在有利条件下执行任务——设备正在充电、连接到Wi-Fi、不在低功耗模式。最长可用10分钟。

计划和要求

对于BGProcessingTask,需要指定requiresExternalPower和requiresNetworkConnectivity。如果条件不满足,系统可能会无限期延迟执行。与必须每天至少执行一次的BGAppRefreshTask不同,如果设备很少充电,Processing可能数周不执行。

Background Modes的App Store审核指南

Apple在应用审核时严格检查Background Modes的使用。主要规则:每个启用的模式必须由应用的功能合理性证明。如果应用声明了Location Mode但未使用地理定位,将被要求删除capability并被拒绝。

常见的拒绝原因

最常见的违规:Location Mode没有明确需求(应用请求访问以显示广告)、Audio Mode在后台没有播放声音、VoIP没有PushKit、BLE Mode没有蓝牙设备。Apple甚至可以在更新阶段拒绝应用,如果该模式不再使用。

审核中的描述

提交审核时,在Notes中提供每种模式的具体理由。例如,“Location Background Mode用于在健身功能中跟踪用户路线”。没有解释,审核者可能会拒绝应用。对于机密功能(VoIP),Apple可能会要求测试账户。

最小化模式的建议

使用最小必要模式集。如果应用需要每小时在后台加载一次数据——不要启用Location Mode,使用Fetch或BGAppRefreshTask。多余的模式不仅会导致拒绝,还会产生负面影响:用户在设置中看到应用在后台使用地理定位。

常见问题

一个应用中可以启用多少个Background Modes?

数量没有限制,但每种模式必须由应用功能合理性证明。不必要地启用所有模式是审核中拒绝的保证原因。实际限制是每个应用2-3个模式,否则用户将看到大量权限请求。

如何检查Background Mode是否激活?

使用UIApplication.shared.applicationState——应用可以检查是否在后台(state == .background)。还可以跟踪UIApplication.didEnterBackgroundNotification和willEnterForegroundNotification通知以切换行为。

Audio和AirPlay Background Modes有什么区别?

Audio——通过扬声器或耳机播放声音。AirPlay——将音频和视频传输到Apple TV和其他AirPlay设备。实际上,Audio Mode涵盖两种场景,因为AirPlay使用音频会话。从iOS 7+开始不需要单独的AirPlay模式。

可以仅在应用打开时使用Background Location吗?

可以,为此使用requestWhenInUseAuthorization()而不是requestAlwaysAuthorization()。应用只会在前台接收位置。如果需要在后台短期跟踪——调用startUpdatingLocation()并在willResignActive中停止。

Background Modes如何影响电池?

每种模式都会增加能耗。Location Mode——消耗最大,持续跟踪可能将工作时间减少30-50%。Audio Mode——中等(15-20%)。Fetch和Processing——最小(2-5%)。BLE Mode——低(5-10%),得益于蓝牙LE的能效。

总结

  • Background Modes——可声明的iOS capability,允许应用在后台合法执行代码。
  • Audio Mode——最常见,通过.playback类别的AVAudioSession播放音乐、播客和视频。
  • Location Mode——用于导航和健身,最耗电,需要requestAlwaysAuthorization和allowsBackgroundLocationUpdates。
  • BLE Mode——通过CBCentralManager在后台与蓝牙设备交互并进行后台扫描。
  • VoIP和PushKit——用于通信应用,通过PKPushRegistry保证入站呼叫的传递。
  • Fetch和Processing——具有不同执行条件和时间限制的短时和长时后台任务。
  • Apple严格检查每种模式的合理性——不当使用会导致应用被App Store拒绝

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读