Background Sync
O bloco background do Database.configure habilita um único job nativo global em background que
acorda o orquestrador de sincronização por conta própria — WorkManager no Android,
BGTaskScheduler no iOS. É um job para o banco de dados inteiro, não um por schema; todo schema com
sync.enabled é sincronizado a cada wake.
Configurando o job em background
background: {
minimumInterval: 15 * 60 * 1000, // ms
requiresNetwork: true,
requiresCharging: false,
}
minimumInterval— intervalo mínimo entre wakes de sincronização em background, em milissegundos. Omitabackgroundpor completo para deixar a sincronização em background desativada.requiresNetwork— exige conectividade de rede para o job em background rodar.requiresCharging— exige que o dispositivo esteja carregando para o job em background rodar.
O agendamento difere por plataforma
- Android (
WorkManager) —minimumIntervalé limitado ao piso de periodic-work doWorkManager, de 15 minutos. Um valor menor é aceito, mas o SO não vai disparar com mais frequência do que isso. - iOS (
BGTaskScheduler) —minimumIntervalé tratado como uma sugestão deearliestBeginDate, não uma garantia: é o momento mais cedo em que o SO pode considerar rodar a tarefa, mas apenas oBGTaskSchedulerdecide o momento real com base em heurísticas do sistema (bateria, padrões de uso, etc.). Não há um piso fixo para limitar; o intervalo é apenas indicativo.
O runtime JS nunca é iniciado
Um wake em background nunca inicia o engine JS. Em ambas as plataformas, o scheduler chama
diretamente o SyncNativeEntryPoint nativo, que aciona o mesmo SyncOrchestrator::triggerSyncAll
usado por Database.syncAll() — lendo schemas, rodando sessões de push/pull, e renovando tokens
OAuth2 em um 401 (veja Credenciais OAuth2) — inteiramente em
C++/Swift/Kotlin. Nenhum bundle JS é carregado e nenhuma thread JS roda durante uma passagem em
background; o próprio contrato de sincronização é descrito em Sincronização.
Pré-requisito no iOS
A sincronização em background e o provedor de credenciais OAuth2 precisam ambos de entradas
explícitas no Info.plist e de entitlements no iOS — sem eles o app compila e roda normalmente, mas
o scheduler em background nunca dispara e o provedor de credenciais não consegue persistir tokens,
sem nenhum erro em tempo de execução que aponte o motivo. Veja
Installation para as chaves exatas do Info.plist e a
configuração de entitlement necessárias.