Background Modes são um conjunto de capacidades declaráveis do iOS que permitem a um aplicativo continuar executando código após entrar em segundo plano. Cada modo corresponde a um tipo específico de tarefa: áudio, geolocalização, VoIP, Bluetooth, fetch e processing. De acordo com a Apple, 2026, o uso incorreto de Background Modes é uma das causas comuns de rejeição de aplicativos durante a revisão na App Store.
Pontos principais
Background Modes são capacidades do projeto Xcode que declaram a intenção do aplicativo de realizar tipos específicos de operações em segundo plano. Ao contrário do Android, onde um aplicativo pode iniciar qualquer Service em segundo plano, o iOS exige declaração explícita do modo no Info.plist. Cada modo possui regras de uso rigorosas e é verificado pela Apple durante a revisão.
Quando um aplicativo entra em segundo plano, o iOS o suspende em 3–5 segundos. Se o aplicativo declarar um Background Mode e usar ativamente a API correspondente (por exemplo, AVAudioSession para áudio), o sistema o coloca em um modo de execução especial. O aplicativo permanece na memória e pode executar código limitado pelo tipo de modo.
O iOS suporta os seguintes Background Modes: Áudio, Localização, VoIP, Bluetooth LE (acessórios BLE), Background Fetch (atualizações periódicas), Background Processing (tarefas longas), External Accessory Communication, Push to Talk (PTT) e HealthKit. Cada modo requer justificativa na descrição do aplicativo.
| Modo | Chave Info.plist | Propósito | Versão iOS |
|---|---|---|---|
| Audio | audio | Áudio em segundo plano, AirPlay | 4.0+ |
| Location | location | Rastreamento de localização | 4.0+ |
| VoIP | voip | Notificações push VoIP | 4.0+ |
| BLE | bluetooth-central | Trabalho com dispositivos BLE | 7.0+ |
| Fetch | fetch | Download periódico de dados | 7.0+ |
| Processing | processing | Tarefas longas em segundo plano | 13.0+ |
| Push to Talk | push-to-talk | Voz push-to-talk | 16.0+ |
Modo Áudio em Segundo Plano é o modo mais comum, usado por players de música, aplicativos de podcast e serviços de áudio. O aplicativo pode continuar a reprodução de áudio, ser controlado pela Central de Controle e aparecer na Tela de Bloqueio. Para ativá-lo, basta configurar AVAudioSession com a categoria .playback.
Para o áudio funcionar em segundo plano, é necessário configurar AVAudioSession e ativá-la. A categoria .playback informa ao sistema que o aplicativo está reproduzindo áudio e deve permanecer ativo em segundo plano. Sem esta configuração, o áudio parará 5–10 segundos após minimizar o aplicativo.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Erro na sessão de áudio: \(error)")
}
}
Para integrar com a Central de Controle e a Tela de Bloqueio, é necessário configurar o MPRemoteCommandCenter. Ele gerencia os comandos Reproduzir, Pausar, Próxima e Anterior. Também é necessário atualizar o MPNowPlayingInfoProperty para exibir metadados: nome da faixa, artista, capa e progresso da reprodução.
A partir do iOS 14, o Modo Áudio em Segundo Plano também suporta Picture in Picture para vídeo. O aplicativo pode continuar exibindo vídeo em uma janela flutuante ao ser minimizado. Para ativar, use AVPictureInPictureController com AVPlayerLayer. Este modo só funciona se o aplicativo estiver reproduzindo uma faixa de áudio.
Modo de Localização em Segundo Plano permite que o aplicativo receba atualizações de localização em segundo plano. É usado em navegadores, rastreadores fitness, aplicativos de entrega e redes sociais. Sem este modo, o aplicativo recebe a localização apenas uma vez ao entrar em segundo plano, após o que as atualizações param.
CLLocationManager suporta várias estratégias de rastreamento: mudanças significativas de localização, rastreamento padrão e monitoramento de regiões. Para trabalhar em segundo plano com máxima precisão, use allowsBackgroundLocationUpdates = true e pausesLocationUpdatesAutomatically = false.
O rastreamento contínuo de localização em segundo plano é um dos cenários que mais consomem energia. O iOS ajusta automaticamente a frequência de atualizações com base na velocidade de movimento: ao caminhar, atualizações a cada 10–30 segundos; ao dirigir, a cada 1–5 segundos. Para navegação, use desiredAccuracy = kCLLocationAccuracyBestForNavigation.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
O modo significant-change location funciona sem o Modo de Localização em Segundo Plano — o sistema acorda o aplicativo apenas quando as coordenadas mudam significativamente (geralmente 500 m ou mais). Não requer GPS constante, economizando bateria. Adequado para aplicativos de clima que atualizam dados quando o usuário se desloca.
Modo Bluetooth LE em Segundo Plano permite que o aplicativo interaja com dispositivos BLE em segundo plano. É usado em pulseiras fitness, sensores médicos, dispositivos Smart Home e navegação por beacons. O modo se divide em dois subtipos: bluetooth-central (o aplicativo se conecta a dispositivos) e bluetooth-peripheral (o aplicativo atua como um dispositivo).
Um aplicativo atuando como Central pode escanear e conectar-se a dispositivos BLE em segundo plano. Para isso, especifique bluetooth-central em Background Modes e chame CBCentralManager.scanForPeripherals com a opção CBCentralManagerScanOptionAllowDuplicatesKey. Em segundo plano, a varredura opera em frequência reduzida — o sistema pode atrasar a descoberta para economizar energia.
Um aplicativo atuando como Peripheral pode anunciar serviços e responder a solicitações de outros dispositivos. O modo bluetooth-peripheral permite que o aplicativo permaneça visível para outros dispositivos BLE mesmo em segundo plano. É usado em aplicativos HealthKit e soluções IoT.
O monitoramento de iBeacon funciona em segundo plano sem permissões adicionais — o próprio sistema rastreia a entrada e saída de regiões Beacon. Mas para escanear o conteúdo do Beacon (UUID de proximidade, major, minor), é necessária permissão Bluetooth e o modo bluetooth-central Background Mode. Use CLLocationManager com CLBeaconRegion para monitoramento.
Modo VoIP em Segundo Plano é projetado para aplicativos de comunicação por voz (Skype, Zoom, WhatsApp). Este modo permite que o aplicativo permaneça conectado ao servidor para receber chamadas recebidas. A partir do iOS 8, o PushKit é usado para VoIP — um framework que gerencia notificações push do servidor VoIP sem envolver APNs.
PushKit é o único mecanismo que garante a entrega de notificações VoIP ao dispositivo. Ao receber uma notificação PushKit, o sistema acorda o aplicativo, mesmo que ele tenha sido encerrado. O aplicativo deve estabelecer uma conexão com o servidor em 30 segundos e exibir uma notificação local para a chamada recebida.
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 não pode ser usado para notificações comuns — apenas para VoIP, comunicações watchOS e provedores de arquivos. A Apple verifica isso durante a revisão. O uso indevido leva à rejeição do aplicativo. A partir do iOS 13, o PushKit apenas entrega a notificação — chamar CXProvider (CallKit) para exibir a tela de chamada é obrigatório.
Background Fetch e Background Processing são modos para atualizações de conteúdo em segundo plano e tarefas longas. Fetch é para atualizações periódicas curtas (até 30 s), Processing é para tarefas longas (até 10 min) com condições (Wi-Fi, carregamento). Processing está disponível apenas no iOS 13+.
O modo Fetch permite que o sistema acorde periodicamente o aplicativo para baixar conteúdo novo. O sistema analisa o comportamento do usuário e seleciona o momento ideal. O aplicativo deve chamar o completion handler em 30 segundos. Fetch é adequado para aplicativos de notícias, feeds de redes sociais e clima.
BGProcessingTask é projetada para tarefas que podem ser executadas sem intervenção do usuário: limpeza de cache, sincronização de grande banco de dados, processamento de arquivos de mídia. O sistema inicia a tarefa apenas sob condições favoráveis — dispositivo carregando, conectado ao Wi-Fi, não no modo de baixo consumo. Disponível por até 10 minutos.
Para BGProcessingTask, é necessário especificar requiresExternalPower e requiresNetworkConnectivity. O sistema pode adiar a execução indefinidamente se as condições não forem atendidas. Ao contrário do BGAppRefreshTask, que deve ser executado pelo menos uma vez por dia, o Processing pode não ser executado por semanas se o dispositivo raramente estiver carregando.
A Apple verifica rigorosamente o uso de Background Modes durante a revisão de aplicativos. A regra principal: cada modo ativado deve ser justificado pela funcionalidade do aplicativo. Se um aplicativo declarar Location Mode, mas não usar geolocalização, será rejeitado com a exigência de remover a capacidade.
As violações mais comuns: Location Mode sem necessidade explícita (o aplicativo solicita acesso “Sempre” para exibir anúncios), Audio Mode sem reprodução de áudio em segundo plano, VoIP sem PushKit, BLE Mode sem dispositivos Bluetooth. A Apple pode rejeitar o aplicativo mesmo na fase de atualização se o modo não for mais usado.
Ao enviar para revisão, forneça justificativa específica para cada modo nas Notas. Por exemplo, “O Location Background Mode é usado para rastrear a rota do usuário no recurso de fitness.” Sem explicação, o revisor pode rejeitar o aplicativo. Para funções confidenciais (VoIP), a Apple pode solicitar uma conta de teste.
Use o conjunto mínimo necessário de modos. Se seu aplicativo precisar de download de dados em segundo plano uma vez por hora — não ative Location Mode, use Fetch ou BGAppRefreshTask. Modos extras não só levam à rejeição, mas também criam uma impressão negativa: o usuário vê nas Configurações que o aplicativo usa geolocalização em segundo plano.
Perguntas frequentes
Não há limite de quantidade, mas cada modo deve ser justificado pela funcionalidade do aplicativo. Ativar todos os modos sem necessidade é uma razão garantida de rejeição durante a revisão. Um limite prático é 2–3 modos por aplicativo, caso contrário o usuário verá muitas solicitações de permissão.
Use UIApplication.shared.applicationState — o aplicativo pode verificar se está em segundo plano (state == .background). Você também pode observar as notificações UIApplication.didEnterBackgroundNotification e willEnterForegroundNotification para alternar o comportamento.
Audio — reprodução de som pelo alto-falante ou fones de ouvido. AirPlay — transmissão de áudio e vídeo para Apple TV e outros dispositivos AirPlay. Na prática, o Audio Mode cobre ambos os cenários, pois o AirPlay usa a sessão de áudio. Um modo AirPlay separado não é necessário desde o iOS 7+.
Sim, para isso use requestWhenInUseAuthorization() em vez de requestAlwaysAuthorization(). O aplicativo receberá localização apenas em primeiro plano. Se precisar de rastreamento curto em segundo plano, chame startUpdatingLocation() e pare em willResignActive.
Cada modo aumenta o consumo de energia. Location Mode é o mais exigente, pode reduzir a vida da bateria em 30–50% com rastreamento contínuo. Audio Mode é moderado (15–20%). Fetch e Processing são mínimos (2–5%). BLE Mode é baixo (5–10%) graças à eficiência energética do Bluetooth LE.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também