Deferred Deep Link é um mecanismo que preserva o contexto alvo de transição mesmo que o aplicativo ainda não esteja instalado no dispositivo do usuário. De acordo com Branch Resources, após a instalação do aplicativo, o sistema processa automaticamente o contexto salvo e redireciona o usuário para a tela alvo. Deferred Deep Link resolve o principal problema do deep link comum — a incapacidade de funcionar com aplicativos não instalados.
Pontos principais
Deferred Deep Link é um tipo de deep link que funciona em dois estágios: primeiro o usuário clica no link antes da instalação do aplicativo, e depois o sistema restaura o contexto após a conclusão da instalação. Um deep link comum abre o aplicativo apenas se ele já estiver instalado, enquanto o deferred salva todos os parâmetros de transição e os transmite no primeiro início.
A tecnologia se tornou especialmente demandada com o crescimento do marketing móvel, onde campanhas publicitárias frequentemente miram usuários que ainda não instalaram o aplicativo. Sem deferred deep link, cada uma dessas transições terminaria simplesmente com o download do aplicativo sem qualquer contexto — o usuário cairia na tela principal em vez da tela alvo.
Um deep link comum abre o conteúdo alvo em um aplicativo já instalado. Se o aplicativo não estiver instalado, o navegador exibe um erro. Deferred Deep Link funciona através de um servidor intermediário que redireciona o usuário para a loja e, após a instalação, notifica o aplicativo sobre os parâmetros salvos. Assim, um link deferred não requer a pré-instalação do aplicativo e fornece um percurso de usuário completo do anúncio ao conteúdo.
O processamento do deferred deep link consiste em três estágios. No primeiro estágio, o usuário clica no link — o servidor determina se o aplicativo está instalado. Se não estiver, ele gera um identificador de sessão único, salva os parâmetros de transição e redireciona o usuário para a App Store ou Google Play com este identificador.
No segundo estágio, o usuário instala o aplicativo da loja. Após a instalação e primeiro início, o SDK da plataforma contacta o servidor, transmite o identificador do dispositivo e recebe os parâmetros de transição salvos. No terceiro estágio, o aplicativo processa os dados recebidos e redireciona automaticamente o usuário para a tela alvo.
Vários mecanismos são usados para salvar parâmetros entre o clique no link e a instalação. No iOS, usa-se o chaveiro iCloud (iCloud Keychain) ou a área de transferência; no Android, usa-se a Install Referrer API. O Firebase Dynamic Links usa uma combinação de localStorage do navegador e o link de referência da loja para transmitir o identificador de sessão. O Branch.io emprega seu próprio protocolo com backup de dados em vários armazenamentos.
No iOS, o deferred deep link é implementado através de uma combinação de Universal Links e Shared Web Credentials. Quando um usuário clica em um Universal Link para o site do aplicativo, o Safari salva os parâmetros de transição no iCloud Keychain associado ao domínio do aplicativo. Após instalar o aplicativo da App Store, o iOS verifica a presença de dados salvos e os transmite ao aplicativo no primeiro início.
A Apple não fornece uma API integrada para deferred deep link — a implementação recai inteiramente sobre SDKs de terceiros. O Firebase Dynamic Links usa um mecanismo passive deferred, onde os dados são salvos em cookies do navegador e restaurados através de um redirecionamento para uma URL especial no primeiro início do aplicativo.
A partir do iOS 14, a Apple endureceu as regras de privacidade, o que afetou os mecanismos de deferred deep link. A área de transferência não pode mais ser usada para ler dados sem permissão explícita do usuário. O iCloud Keychain também tem limites de volume de dados — não mais de 4 KB por escrita. Isso torna as soluções de servidor com identificador de sessão único o método preferido para transmitir contexto.
O Android oferece opções mais flexíveis para deferred deep link através da Install Referrer API. Quando um usuário clica em um link para o Google Play, a loja captura o referrer — uma string com parâmetros de transição. Após a instalação, o aplicativo recebe esta string através da Install Referrer API e extrai dela o contexto alvo. Este é o mecanismo de deferred deep link mais confiável no Android.
Para aplicativos distribuídos fora do Google Play, o Android suporta um BroadcastReceiver de referência. O desenvolvedor pode enviar um Intent personalizado com parâmetros após a instalação, e o aplicativo o receberá através de um BroadcastReceiver registrado no manifesto. No entanto, este mecanismo é menos confiável, pois depende da implementação do instalador.
A Install Referrer API fornece informações sobre a fonte de instalação, incluindo URL de referrer, hora do clique e hora da instalação. O comprimento máximo da string referrer é de 8 KB, suficiente para transmitir todos os parâmetros necessários do deep link. A API está disponível em dispositivos com Google Play Store versão 8.3.73 e superior, e é suportada no Android 5.0 (API 21).
Firebase Dynamic Links é a ferramenta gratuita mais popular para implementar deferred deep link em ambas as plataformas. O Firebase lida automaticamente com todas as etapas da transição deferred: redirecionamento para a loja na ausência do aplicativo, armazenamento de parâmetros no servidor Firebase e transmissão ao SDK no primeiro início do aplicativo.
Para implementar, basta integrar o SDK do Firebase ao projeto, criar um Dynamic Link através do Firebase Console especificando o deep link e os parâmetros de campanha. O SDK do Firebase é automaticamente chamado ao iniciar o aplicativo e verifica a presença de um Dynamic Link recebido através do método getDynamicLink().
Exemplo de processamento de um Firebase Dynamic Link diferido em uma Activity em Kotlin. O código funciona igualmente para cold start e warm start ao iniciar o aplicativo.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
checkDeferredLink()
}
private fun checkDeferredLink() {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener link ->
val deferredLink = link?.link.toString()
if (deferredLink.isNotEmpty()) {
navigateToContent(deferredLink)
}
}
}
}
O método getDynamicLink() retorna um PendingTask com um objeto DynamicLink. Se o aplicativo foi instalado após clicar no link, o listener receberá dados com parâmetros. Se o aplicativo já estava instalado antes da transição, o método retornará os mesmos dados que com um deep link comum. O sinalizador minimumAppVersion nos parâmetros do link permite definir a versão mínima do aplicativo para processamento.
Deferred Deep Link oferece vantagens significativas para campanhas de marketing: o usuário recebe o conteúdo alvo após a instalação sem ações adicionais, o que aumenta a conversão e retenção. Para programas de referência, os links deferred permitem vincular de forma inequívoca o convite à instalação e ações do novo usuário.
No entanto, a tecnologia também tem limitações. O deferred deep link não funciona em navegadores que bloqueiam cookies de terceiros, e no iOS a partir da versão 14 é necessária configuração adicional para o iCloud Keychain. Além disso, entre o clique no link e a instalação podem se passar vários dias, e nem todos os SDKs garantem a preservação dos dados durante esse período.
Deferred deep link é obrigatório para campanhas publicitárias direcionadas a novos usuários, newsletters por email com convites e programas de referência. Para usuários já instalados, um deep link comum é suficiente. Se o aplicativo não usa campanhas de marketing ou mecanismos de referência, deferred deep link não é necessário — Universal Links e App Links são suficientes.
Ao escolher uma implementação, considere o custo: Firebase Dynamic Links é gratuito mas tem análises limitadas. Branch.io e AppsFlyer fornecem atribuição avançada mas exigem assinatura. Para projetos pequenos, Firebase é a solução ótima; para empresas com dezenas de canais publicitários, MMPs comerciais são a escolha.
Perguntas frequentes
Um deep link comum exige que o aplicativo esteja instalado e o abre diretamente. Deferred Deep Link funciona mesmo se o aplicativo não estiver instalado — ele redireciona para a loja e, após a instalação, restaura o contexto de transição e abre a tela alvo.
A duração do armazenamento depende da plataforma. Firebase Dynamic Links armazena parâmetros por até 30 dias. Branch.io conserva dados por até 90 dias. No Android, a Install Referrer API armazena a string referrer até o momento da primeira leitura pelo aplicativo, mas não mais de 90 dias.
No desktop, o deferred deep link não faz sentido, pois o aplicativo não pode ser instalado através da loja num computador. Ao clicar num link a partir do desktop, o usuário verá uma URL de fallback — uma versão web do conteúdo ou uma página com código QR para instalação num dispositivo móvel.
Chrome, Safari e Samsung Internet suportam deferred deep link através de mecanismos de cookies e localStorage. Firefox tem suporte limitado devido à sua política rigorosa de bloqueio de cookies de terceiros. Para máxima cobertura, recomenda-se usar o SDK do Firebase ou Branch.io.
Tecnicamente, é possível implementar uma solução própria através de um servidor intermediário e mecanismos de referência. No entanto, isso requer desenvolver e manter infraestrutura de servidor, lidar com cookies, integrar-se com cada loja e resolver problemas em diferentes plataformas. SDKs prontos do Firebase e Branch.io aceleram o desenvolvimento dezenas de vezes.
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