App Extensions e Integrações de Sistema no Desenvolvimento Móvel: O Que São, Tipos e Como Funcionam

Autor: IT Sectr Publicado: 2026-06-22 Tempo de leitura: 11 min

App Extensions são módulos executáveis separados que estendem as capacidades de um aplicativo móvel além de sua interface principal: Today Widget na tela inicial, manipulação de chamadas VoIP via CallKit e reação a eventos do sistema através de BroadcastReceiver. As integrações de sistema permitem que um aplicativo interaja com o sistema operacional em um nível profundo, desbloqueando recursos indisponíveis para telas comuns. De acordo com a Documentação de Desenvolvedor da Apple, cada extensão é executada em um processo isolado e gerenciada pelo sistema independentemente do aplicativo principal. App Extensions em um aplicativo móvel permitem implementar funcionalidades indisponíveis no processo principal.

Pontos-chave

  • App Extensions — binários separados dentro de um aplicativo que estendem sua funcionalidade além do processo principal
  • CallKit — um framework para integrar chamadas VoIP na interface de chamadas do sistema do iPhone
  • BroadcastReceiver — um componente Android que reage a mensagens de broadcast do sistema
  • AppWidgetProvider — uma classe base para criar widgets no Android com suporte a RemoteViews
  • Content Provider — um componente Android para compartilhar dados entre aplicativos via ContentResolver

App Extensions no iOS: Widgets e Extensões de Compartilhamento de Conteúdo

As App Extensions no iOS surgiram no iOS 8 e se tornaram a base para integrações de sistema no desenvolvimento móvel. São binários separados empacotados com o aplicativo principal, mas executados em um processo isolado. Cada extensão tem seu próprio Info.plist e ponto de entrada definido via NSExtensionPrincipalClass. O sistema gerencia o ciclo de vida das App Extensions — elas não podem permanecer em segundo plano após concluir uma tarefa.

WidgetKit e Today Widget

WidgetKit (iOS 14+) é um framework moderno para criar widgets na tela inicial. WidgetKit usa SwiftUI para descrever a interface e TimelineProvider para definir cronogramas de atualização. Os widgets vêm em três tamanhos: pequeno (2×2 células), médio (4×2) e grande (4×4). O antigo Today Widget baseado em UICollectionViewController ainda é suportado, mas a Apple recomenda migrar para WidgetKit. App Extensions no WidgetKit não suportam animação, entrada de teclado ou gestos — são elementos estáticos ou pseudo-animados com atualizações periódicas.

Share Extension e Action Extension

Share Extension permite enviar conteúdo de qualquer aplicativo para o seu através da folha de compartilhamento do sistema. Share Extension recebe dados via NSExtensionItem e usa SLComposeServiceViewController para a interface. Action Extension processa conteúdo no local — por exemplo, traduz texto no navegador sem mudar para outro aplicativo. Ambos os tipos devem concluir o trabalho em um tempo limitado, caso contrário, o sistema "mata" a extensão. Esta é uma limitação importante das App Extensions em um aplicativo móvel — tarefas em segundo plano não estão disponíveis no nível de extensão.

CallKit, PushKit e SiriKit — Integrações de Sistema para Voz e Notificações

As Integrações de Sistema no iOS vão muito além dos widgets: CallKit, PushKit e SiriKit permitem que um aplicativo móvel funcione no nível do sistema. Esses frameworks exigem entitlements especiais, mas oferecem ao usuário uma experiência perfeita — chamadas via CallKit parecem chamadas telefônicas comuns, e a Siri processa solicitações sem abrir o aplicativo.

CallKit — Chamadas VoIP na Interface do Sistema

CallKit integra chamadas de aplicativos de terceiros na tela de chamadas do sistema, incluindo a tela bloqueada. O CXProvider registra o aplicativo como um serviço VoIP, e o CXCallController gerencia as chamadas. CallKit bloqueia automaticamente chamadas duplicadas e suporta Call Directory Extension para bloquear números indesejados. Integrações de sistema no desenvolvimento móvel com CallKit são críticas para aplicativos de comunicação por voz — WhatsApp, Skype e Zoom o usam para exibir chamadas recebidas.

PushKit — Notificações Push em Segundo Plano

PushKit entrega notificações push diretamente ao aplicativo móvel sem mostrá-las ao usuário. PushKit desperta o aplicativo de um estado "morto" e passa dados através do delegado PKPushRegistryDelegate. Este é o mecanismo principal para aplicativos VoIP: PushKit entrega informações de chamada, e CallKit as exibe. PushKit tem prioridade de entrega maior do que notificações push comuns e não requer exibição de banner. App Extensions em aplicativos móveis frequentemente combinam PushKit com CallKit para comunicação por voz.

SiriKit e Intents Extension

SiriKit permite processar solicitações através da Siri e do aplicativo Atalhos. Intents Extension é uma App Extension separada que registra intenções suportadas e as processa. SiriKit suporta mais de 20 domínios: chamadas, mensagens, pagamentos, notas, treinos. Os Atalhos permitem que o usuário crie automações — por exemplo, "Enviar uma mensagem no WhatsApp via Siri." Integrações de sistema com SiriKit e Atalhos aumentam o engajamento, pois o usuário realiza ações sem abrir o aplicativo.

BroadcastReceiver e Serviços de Sistema no Android

BroadcastReceiver é um componente Android que reage a mensagens de broadcast do sistema. Ao contrário das App Extensions do iOS, BroadcastReceiver não requer um binário separado — basta registrar o receptor no manifesto ou no código via Context.registerReceiver. Integrações de sistema no Android geralmente começam com BroadcastReceiver: desde iniciar um serviço na inicialização do dispositivo até reagir à conexão de rede.

IntentFilter para Eventos do Sistema

IntentFilter vincula BroadcastReceiver a um evento de sistema específico. Eventos típicos: BOOT_COMPLETED (inicialização do dispositivo), CONNECTIVITY_ACTION (mudança de rede), BATTERY_LOW (bateria baixa), TIME_SET (mudança de horário). O receptor é registrado no AndroidManifest.xml ou via Context.registerReceiver para registro dinâmico. O registro dinâmico é preferível — não requer permissões no manifesto e funciona apenas enquanto o aplicativo está ativo. App Extensions no Android não existem como conceito, mas BroadcastReceiver desempenha um papel semelhante — estende as capacidades do aplicativo através de integrações de sistema.

NotificationListenerService e AccessibilityService

NotificationListenerService é um serviço que recebe todas as notificações do sistema. NotificationListenerService requer a permissão BIND_NOTIFICATION_LISTENER_SERVICE e acesso através das configurações de acessibilidade. AccessibilityService é uma ferramenta mais poderosa para integração de sistema: pode ler o conteúdo da tela, simular cliques e automatizar ações. Ambos os serviços exigem ativação explícita pelo usuário nas configurações, o que melhora a segurança. Integrações de sistema em aplicativos móveis via AccessibilityService são usadas para auto-preenchimento, leitores de tela e ferramentas de acessibilidade.

kotlin
class BootReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
            WorkManager.getInstance(context)
                .enqueueUniqueWork("post-boot", ...)
        }
    }
}

O exemplo registra um BroadcastReceiver para o evento BOOT_COMPLETED. WorkManager é usado para execução adiada de tarefas após a inicialização do dispositivo — esta é a abordagem padrão para aplicativos Android.

App Widget Provider — Criando Widgets no Android

App Widget Provider no Android é o equivalente das App Extensions do iOS no contexto de widgets: é um componente que exibe conteúdo interativo na tela inicial. Ao contrário do WidgetKit, os widgets Android podem aceitar entrada do usuário — cliques, alternâncias e gestos. App Widget Provider é registrado no manifesto através de uma descrição XML do tamanho e frequência de atualização.

RemoteViews e AppWidgetProvider

RemoteViews descreve a interface do widget através de um layout XML e suporta apenas um conjunto limitado de Views. RemoteViews não permite Views personalizadas — apenas componentes padrão: TextView, ImageView, Button, ProgressBar. AppWidgetProvider é a classe base que lida com atualizações, ativação e exclusão do widget. O método onUpdate é chamado por timer via updatePeriodMillis ou via WorkManager para controle preciso. Integrações de sistema com widgets no Android exigem cautela — atualizações muito frequentes consomem a bateria.

Glance API (Jetpack) — Abordagem Moderna

Glance API é uma biblioteca Jetpack para criar widgets usando Kotlin DSL em vez de XML. Glance API compila para RemoteViews e suporta sintaxe semelhante ao Compose: GlanceComposable, Column, Row, Text. A biblioteca resolve o problema de código XML complexo e permite testar widgets via JUnit. Glance API ainda não suporta todos os recursos do RemoteViews — para widgets interativos complexos, a abordagem clássica é melhor. App Extensions no desenvolvimento móvel no Android estão evoluindo em direção ao Glance API, simplificando a criação e manutenção de widgets.

Content Provider, FileProvider e Compartilhamento de Dados entre Aplicativos

Content Provider é um componente Android para compartilhar dados estruturados entre aplicativos através de uma interface unificada ContentResolver. Ao contrário das App Extensions do iOS, Content Provider não cria um processo separado — os dados são solicitados de forma síncrona no contexto do aplicativo chamador. Content Provider é a base das integrações de sistema no Android: contatos, arquivos de mídia, calendário e aplicativos padrão o usam para publicar dados.

FileProvider para Compartilhamento Seguro de Arquivos

FileProvider é uma subclasse de ContentProvider para transferência segura de arquivos entre aplicativos. FileProvider gera URIs temporários content:// em vez de caminhos diretos file://, que são proibidos no Android 7+. Para usar, é necessário especificar files-path ou external-files-path na configuração XML. App Extensions no desenvolvimento móvel no Android não existem como conceito separado, mas FileProvider desempenha sua função — estende as capacidades de compartilhamento de dados além de um aplicativo.

Equivalente no iOS: File Provider Extension

No iOS, o papel do compartilhamento de arquivos é desempenhado pelo File Provider Extension. File Provider Extension publica os arquivos do aplicativo no aplicativo Arquivos através do NSFileProviderManager. Ao contrário do FileProvider, a extensão iOS requer um binário separado e é executada em um processo isolado. File Provider Extension suporta NSFileProviderItem para descrição de arquivos e NSFileProviderEnumerator para navegação em pastas. Integrações de sistema em aplicativos móveis via File Provider Extension permitem que o usuário gerencie arquivos do aplicativo a partir do aplicativo Arquivos sem abri-lo.

swift
class MyFileProviderExtension: NSFileProviderExtension {
    override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
        return MyFileProviderItem(identifier: identifier)
    }
}

O exemplo mostra uma implementação mínima do File Provider Extension em Swift. O método item(for:) retorna um objeto NSFileProviderItem por identificador — o sistema o chama ao exibir arquivos no aplicativo Arquivos.

Perguntas Frequentes

O que são App Extensions no iOS?

App Extensions são binários separados que estendem a funcionalidade do aplicativo além de seu processo: Today Widget, Share Extension, Action Extension, Keyboard Extension e outros tipos executados em um ambiente isolado.

Qual a diferença entre CallKit e PushKit?

CallKit integra chamadas VoIP na interface de chamadas do sistema com exibição na tela bloqueada. PushKit entrega notificações push em segundo plano sem mostrá-las ao usuário — ele desperta o aplicativo para processar dados, como informações sobre uma chamada recebida.

O que é BroadcastReceiver no Android?

BroadcastReceiver é um componente Android que reage a mensagens de broadcast do sistema: inicialização do dispositivo (BOOT_COMPLETED), conexão de rede (CONNECTIVITY_ACTION), mudanças de modo avião e outros eventos do SO.

Como criar um widget no Android?

Use AppWidgetProvider com RemoteViews para criar a interface do widget ou Glance API (Jetpack) para a abordagem Kotlin DSL. O widget é registrado no manifesto através de uma descrição XML especificando o tamanho e a frequência de atualização.

Para que serve o Content Provider?

Content Provider é um componente Android para compartilhar dados entre aplicativos via ContentResolver. É usado para acessar contatos, arquivos de mídia e quaisquer dados estruturados de outros aplicativos.

Resumo

  • App Extensions — a fundação das integrações de sistema no iOS: widgets, compartilhamento, processamento de conteúdo e extensões de teclado em processos isolados
  • CallKit e PushKit — um par de frameworks para chamadas VoIP: PushKit entrega dados, CallKit exibe a interface de chamada
  • BroadcastReceiver — o equivalente no Android das App Extensions para reagir a eventos do sistema sem um binário separado
  • AppWidgetProvider — um componente para widgets no Android com suporte a RemoteViews e Glance API
  • Content Provider e FileProvider — mecanismos de compartilhamento de dados entre aplicativos no Android via ContentResolver
  • File Provider Extension — o equivalente iOS do FileProvider para publicar arquivos no aplicativo Arquivos a partir de um processo isolado
  • Integrações de Sistema no desenvolvimento móvel unem App Extensions, BroadcastReceiver, CallKit e Content Provider em um ecossistema único

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.

Discutir o projeto