URL Scheme: o que é, como funciona e é usado no desenvolvimento

Autor: IT Sectr Publicado: 2026-05-14 Tempo de leitura: 8 min

URL Scheme — é um protocolo URI personalizado que um aplicativo móvel registra no sistema operacional para ser aberto através de links como myapp://path. De acordo com a RFC 3986, o esquema URI define a sintaxe e a semântica de todos os componentes subsequentes do endereço. Ao navegar para tal link, o sistema identifica o aplicativo registrado pelo seu identificador único e o inicia com os parâmetros extraídos do link. O Deep link baseado em URL Scheme continua sendo o mecanismo básico de navegação entre aplicativos em plataformas móveis, apesar do surgimento de alternativas mais modernas.

Principais conclusões

  • URL Scheme — um protocolo de link personalizado como myapp://path que um aplicativo registra para ser aberto a partir de outros apps ou do navegador.
  • Sintaxe inclui esquema, host, caminho e parâmetros de consulta de acordo com o padrão RFC 3986, proporcionando transferência flexível de dados entre aplicativos.
  • iOS usa CFBundleURLTypes no Info.plist e o delegado AppDelegate para processar URL Schemes recebidos com parâmetros de navegação.
  • Android usa Intent Filter no AndroidManifest.xml especificando action, category e data para rotear deep links para a Activity de destino.
  • Limitação — URL Scheme não funciona quando o app não está instalado, o que é resolvido através de Universal Links no iOS e App Links no Android.

O que é URL Scheme?

URL Scheme — é um identificador de protocolo único que um aplicativo registra no sistema operacional para receber chamadas através de links personalizados. Quando um usuário clica em um link como myapp://profile/123, o sistema identifica o aplicativo que registrou o esquema myapp e passa o controle para ele com o URI completo. Este mecanismo permite que os aplicativos troquem dados e abram uns aos outros sem necessidade de infraestrutura de servidor.

O conceito de URL Scheme é diretamente emprestado dos padrões web RFC 3986, onde o esquema URI é o primeiro componente de qualquer identificador universal de recurso. No desenvolvimento móvel, esta ideia é adaptada para comunicação entre aplicativos, onde em vez de um servidor HTTP, o próprio aplicativo atua como manipulador do link.

Exemplos de URL Schemes conhecidos

Muitos aplicativos populares registram seus próprios URL Schemes para integração com serviços de terceiros. Por exemplo, o Spotify usa o esquema spotify://, o Telegram usa tg://, e o Instagram usa instagram://. Os desenvolvedores também criam frequentemente esquemas como appname:// para navegação interna e testes de ponta a ponta de telas.

Os URL Schemes ainda são amplamente utilizados em notificações push, newsletters por email e códigos QR onde é necessária navegação instantânea para uma seção específica do aplicativo. No entanto, a partir do iOS 9 e Android 6, surgiram mecanismos alternativos que gradualmente complementam e substituem os esquemas simples.

Sintaxe do URL Scheme: esquema, host e caminho

A estrutura de um URI personalizado segue a especificação geral RFC 3986 e consiste em vários componentes. O esquema é especificado primeiro e separado por dois pontos do resto do endereço. Após o esquema podem seguir host, porta, caminho, parâmetros de consulta e fragmento, cada um dos quais é opcional.

A sintaxe completa se parece com scheme://host/path?key=value#fragment. O esquema é o único elemento obrigatório; o restante é determinado pelas necessidades da implementação específica. A barra dupla após o esquema é historicamente emprestada do HTTP e não é estritamente obrigatória pela especificação, mas é universalmente usada como convenção.

Componentes do URI

Para uma representação visual da estrutura do URI, é utilizada uma tabela de componentes. Cada elemento tem seu propósito e nível de obrigatoriedade.

ComponenteExemploObrigatório
SchememyappSim
HostprofileNão
Path/user/42Não
Query?id=42&tab=mainNão
Fragment#section2Não

Os desenvolvedores podem escolher arbitrariamente a estrutura do URI, o que cria flexibilidade, mas gera problemas de compatibilidade entre diferentes versões do aplicativo. Recomenda-se documentar o formato do URL Scheme como parte da API pública do aplicativo e versioná-lo quando ocorrerem alterações.

Como o URL Scheme funciona no iOS

O iOS exige registro explícito de cada URL Scheme no arquivo Info.plist do projeto. O desenvolvedor adiciona um array CFBundleURLTypes, cada elemento do qual contém um identificador (CFBundleURLName) e uma lista de esquemas suportados (CFBundleURLSchemes). Após o registro, o sistema direciona automaticamente todas as chamadas recebidas nos esquemas registrados para o aplicativo.

O tratamento de um URL Scheme recebido ocorre no delegado do aplicativo através do método application(_:open:options:). Este método recebe um objeto URL do qual o caminho e os parâmetros de consulta são extraídos para tomar decisões de navegação. O manipulador deve retornar um valor Bool indicando o sucesso da operação.

Tratamento no AppDelegate

Abaixo está um exemplo de implementação de um manipulador de URL Scheme em Swift. O código demonstra a extração do host e dos parâmetros de consulta de um URI recebido usando URLComponents.

swift
func application(
    _ app: UIApplication,
    open url: URL,
    options: [UIApplication.OpenURLOptionsKey: Any]
) -> Bool {
    let host = url.host
    let params = URLComponents(
        url: url,
        resolvingAgainstBaseURL: false
    )?.queryItems
    if host == "profile" {
        navigateToProfile(params)
    }
    return true
}

O método usa URLComponents para análise segura dos parâmetros de consulta. Esta abordagem é preferível à análise manual de strings, pois lida automaticamente com a codificação percentual e a decodificação de caracteres especiais nos valores dos parâmetros.

Como o URL Scheme funciona no Android

O Android usa o sistema Intent Filter para rotear deep links baseados em URL Scheme. O desenvolvedor declara um filtro no AndroidManifest.xml dentro da tag Activity que deve manipular o link. O filtro contém a ação VIEW, as categorias BROWSABLE e DEFAULT, e uma tag data especificando o esquema, host e pathPrefix.

Quando um usuário clica em um link com um esquema personalizado, o sistema verifica o Intent Filter de todos os aplicativos instalados. Se vários aplicativos correspondentes forem encontrados, o usuário recebe um diálogo de seleção. A categoria BROWSABLE permite que o link seja processado a partir do navegador.

Configuração do Intent Filter

Exemplo de declaração de Intent Filter no AndroidManifest.xml para manipular o esquema myapp em uma Activity. A combinação de action e category é obrigatória para o roteamento correto de deep links.

xml
<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category
            android:name="android.intent.category.DEFAULT" />
        <category
            android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="myapp"
            android:host="profile"
            android:pathPrefix="/user" />
    </intent-filter>
</activity>

Após configurar o filtro na Activity, é necessário chamar intent.getData() para obter o URI. É importante verificar intent e data quanto a null, pois a Activity pode ser iniciada sem um deep link recebido, por exemplo durante a inicialização padrão a partir do lançador.

Passagem de parâmetros via URL Scheme

Os parâmetros de consulta no URL Scheme são passados após o ponto de interrogação no formato chave=valor, separados por e comercial. Este formato é idêntico às solicitações HTTP e é facilmente processado pelas ferramentas padrão da plataforma. Os parâmetros devem ser codificados usando codificação percentual para todos os caracteres que não pertencem ao conjunto permitido de URI.

Exemplo de um link completo com parâmetros: myapp://profile?userId=42&source=email&ref=abc123. Após extrair a URL, o aplicativo analisa sequencialmente todos os query-items e com base em seus valores toma uma decisão de navegação para a tela de destino.

Limitação de comprimento do URI

Ao passar dados complexos, é importante considerar a limitação de comprimento do URI. No iOS, o comprimento máximo do URL Scheme é limitado a 2 KB, após o qual o sistema trunca o link. No Android, o limite é de aproximadamente 8 KB, mas o valor exato depende da versão do SO e do fabricante do dispositivo. Para grandes volumes de dados, recomenda-se passar apenas um identificador de sessão via URL Scheme e carregar o restante dos dados do servidor.

Limitações e alternativas do URL Scheme

A principal desvantagem do URL Scheme é a incapacidade de manipular um link se o aplicativo não estiver instalado no dispositivo. O navegador exibe um erro e o usuário perde o contexto de navegação. Para resolver este problema, a Apple introduziu Universal Links no iOS 9 e o Google introduziu App Links no Android 6. Ambos os mecanismos são registrados através de um domínio web associado ao aplicativo.

Universal Links e App Links funcionam como links HTTPS normais, mas quando o aplicativo está instalado, eles o abrem sem um diálogo de seleção. Se o aplicativo não estiver instalado, o link abre uma página web no mesmo domínio, preservando a experiência do usuário. Isso os torna a alternativa preferida para ambientes de produção.

Mecanismos de fallback

Para URL Scheme no iOS e Android, não existe um mecanismo de fallback integrado. Os desenvolvedores usam soluções intermediárias de servidor: o link leva a uma página web que verifica se o aplicativo está instalado via JavaScript e redireciona para o esquema ou para a loja de aplicativos. Firebase Dynamic Links e Branch.io oferecem soluções prontas para este problema com suporte a deferred deep links que determinam automaticamente o status de instalação e roteiam o usuário sem necessidade de desenvolver um pipeline de servidor personalizado.

Surge complexidade adicional ao usar URL Scheme no iOS 15+ e Android 12+, onde as regras de privacidade foram endurecidas. O Safari bloqueia tentativas de abrir um esquema não registrado sem confirmação prévia, e o Android 12 restringe a visibilidade de aplicativos instalados através do PackageManager. Essas mudanças tornam o uso de URL Scheme para comunicação entre aplicativos menos confiável do que em versões anteriores das plataformas.

Perguntas frequentes

Qual a diferença entre URL Scheme e Universal Links?

URL Scheme usa um protocolo personalizado sem criptografia, enquanto Universal Links funcionam via HTTPS com verificação de domínio. Universal Links não exibem um diálogo de seleção de aplicativo e são tratados corretamente quando o aplicativo não está instalado no dispositivo.

URL Scheme pode conter caracteres cirílicos?

Sim, mas todos os caracteres não ASCII devem ser codificados usando percent-encoding de acordo com a RFC 3986. Recomenda-se evitar cirílico em URL Scheme para garantir compatibilidade com versões antigas do SO e navegadores.

Quantos URL Schemes um aplicativo pode registrar?

Não há limites no número de esquemas nem no iOS nem no Android. Na prática, os aplicativos usam de um a cinco esquemas. Por exemplo, o Telegram registra os esquemas tg://, t.me/, telegram:// e telegram.me://.

Como verificar se um dispositivo suporta meu URL Scheme?

No iOS, utiliza-se o método canOpenURL(_:), que retorna true se o esquema estiver registrado. No Android, a verificação é feita através de PackageManager.queryIntentActivities(). Ambas as plataformas exigem que o esquema seja pré-especificado na configuração.

Senhas podem ser passadas via URL Scheme?

Não, URL Scheme não criptografa dados. Qualquer aplicativo que registre o mesmo esquema pode interceptar o link. Para segurança, use Universal Links com HTTPS ou criptografia de ponta a ponta no nível do protocolo.

Resumo

  • URL Scheme — um protocolo URI personalizado para interação entre aplicativos em plataformas móveis de acordo com o padrão RFC 3986.
  • Registro do esquema é feito no Info.plist para iOS e no AndroidManifest.xml para Android através do mecanismo Intent Filter.
  • Tratamento de um link recebido no iOS ocorre através do delegado do aplicativo, no Android — através de intent.getData() na Activity de destino.
  • Parâmetros são passados via query string com codificação percentual e limite de comprimento de até 2 KB no iOS.
  • Limitação — URL Scheme não funciona quando o app não está instalado; são necessários Universal Links ou App Links para fallback adequado.
  • Alternativas — Universal Links (iOS), App Links (Android) e plataformas comerciais Firebase Dynamic Links e Branch.io.
  • Segurança — URL Scheme não criptografa dados, portanto não é adequado para transmitir informações confidenciais.

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

Leia também