
Os aplicativos Android refletem o site ou serviço e geralmente representam funcionalidades semelhantes em um shell conveniente. Por esse motivo, a questão da navegação entre uma página na web e um cliente instalado se torna urgente. Para resolver este problema, os deepplinks foram inventados. Abaixo do corte, você encontrará uma história fascinante sobre como os implementamos em casa e lidamos com o caso quando o usuário ainda não instalou nosso aplicativo.
Deeplinks foram inventados há tanto tempo que agora é difícil imaginar um aplicativo sem eles. A tecnologia em si não requer uma API Android recente; no entanto, se você terminar a indexação de aplicativos, poderá encontrar o fato de que ela funciona com a API 17.
Vamos voltar para os deeplinks. Sua configuração é um conjunto de configurações para filtro de intenção no manifesto do aplicativo, que descreve os padrões de links suportados.
Por exemplo:
<intent-filter> … <data android:host="best.memes" android:pathPrefix="/memes" android:scheme="http" /> <data android:host="best.memes" android:pathPrefix="/jokes" android:scheme="https" /> … </intent-filter>
Após essas manipulações simples, sempre que você clicar em um link que corresponda às configurações de filtro, o usuário poderá escolher entre vários aplicativos, incluindo o seu. Em seguida, a atividade para a qual definimos o filtro de intenção receberá uma Intent contendo um link. Se você o obtiver usando o método Intent # getData e analisar os parâmetros necessários, poderá direcionar o usuário imediatamente para a seção de interesse.
Após a implementação, uma pergunta razoável pode surgir: o que fazer se o usuário ainda não tiver o aplicativo? A resposta serão diplinks especiais, que neste caso podem direcionar uma pessoa ao mercado. Com a devida diligência, você mesmo pode gerar esse link, mas não há garantia de que ele funcione com todos os navegadores e em todas as versões do Android. Agora, existem alguns serviços que oferecem uma solução para pelo menos parte desses problemas, por exemplo, o AppsFlyer com o OneLink ou o Firebase com DynamicLink. Todos eles funcionam aproximadamente da mesma maneira, apenas o DynamicLink usa serviços pré-instalados do Google para processar diplinks.
Onelink
O próprio OneLink leva aos servidores do AppsFlyer; eles determinam a partir de qual dispositivo o usuário entrou na rede e o redirecionam para o endereço apropriado. Você pode definir redirecionamentos para desktop, Android e iOS. Quando o aplicativo Android é instalado, o link passa para ele via Intent como um link direto de profundidade. Quando não há aplicativo, o Google Chrome e o Google Play entram em ação.

A presença do aplicativo é verificada pelo navegador. O Chrome possui uma especificação para um formato de link específico, que é convertido em Intent e enviado ao sistema. Ele fornece a configuração de um link para o Google Play, caso o aplicativo não esteja instalado. Mais detalhes podem ser encontrados
aqui .
Em geral, no Google Play, você pode transferir o link para o aplicativo de forma que, após a instalação e o lançamento, ele pule parte dele ainda mais. Isso é implementado usando o parâmetro de consulta url e terá a seguinte aparência:
play.google.com/store/apps/details?id=memes.best&url=https%3A%2F%2Fbest.memes%2FjokesNesse caso,
best.memes / piadas entrará no aplicativo depois que ele for instalado como um
link direto . Por padrão, o AppsFlyer não funciona dessa maneira: oferece para obter o link através da interface da biblioteca. Aparentemente, o deeplink é transferido para o aplicativo através dos servidores de serviço.
AppsFlyerLib.getInstance().init(KEY, new AppsFlyerConversionListener() { @Override public void onInstallConversionDataLoaded(final Map<String, String> map) { } @Override public void onInstallConversionFailure(final String s) { } @Override public void onAppOpenAttribution(final Map<String, String> map) { } @Override public void onAttributionFailure(final String s) { } }, mContext);
Isso é muito inconveniente, porque, em primeiro lugar, não podemos entender com certeza se precisamos esperar por alguns parâmetros ou se o usuário clicou no ícone e não haverá parâmetros. Em segundo lugar, queremos abrir imediatamente a seção desejada do aplicativo, sem bloqueios e expectativas desnecessárias. O AppsFlyer oferece a abertura da tela principal e, quando os parâmetros chegaram (e se chegaram), redirecionam. Essa abordagem não nos convinha; portanto, geramos nosso URL no Google Play com um parâmetro para o caso em que o usuário clica no diplink em um dispositivo Android e não possui um aplicativo. Nós o configuramos no Onelink para obter um aprofundamento no aplicativo sem ter que esperar pela biblioteca.
O OneLink funcionou bem até que tentamos vasculhá-lo no Slack. O fato é que ele abre links em seu navegador interno por meio das guias personalizadas do Chrome. Em resumo, esta é uma guia do navegador que é aberta durante o aplicativo e pode ser personalizada para não sair do estilo geral (mais detalhes podem ser encontrados
aqui ). Nesse caso, a versão da Web do Google Play será aberta e o diplink para o aplicativo após a instalação não será encaminhado. Da mesma forma, o navegador se comporta se você copiar o OneLink na barra de endereços e seguir o link. Sobre esse caso, os desenvolvedores do Chrome escreveram nas Notas da versão várias versões atrás. O ponto principal é que, com essa abordagem, o redirecionamento do Google Play não funciona quando o aplicativo não está instalado e o usuário permanece na web. O OneLink falhou em superar esse comportamento, então recorremos ao DynamicLink.
Dynamiclink
A profunda integração do Google Play Services no sistema permite otimizar a disponibilidade do aplicativo de destino no dispositivo. Este é um ecossistema bastante fechado, portanto não foi possível entender completamente os princípios de sua operação; no entanto, tudo indica que o Chrome está abrindo uma atividade com progresso, de propriedade do Google Play Services, que determina como lidar com isso com um link profundo. Depois disso, um redirecionamento ocorre no Google Play ou no aplicativo. Nesse caso, o deeplink entra no aplicativo através do Intent, ou seja, sem muletas adicionais da biblioteca.
Subjetivamente, essa abordagem não funciona mais rápido que o OneLink, mas funciona quando você abre links nas Guias Personalizadas do Chrome, o que é uma vantagem significativa porque muitos aplicativos as utilizam.
Entre outras coisas, o Firebase permite que você veja como o link funciona e para onde o usuário será redirecionado em cada plataforma em cada caso. Parece algo como isto:

Conclusões
Como resumo, preparei uma tabela dinâmica. Penso que o OneLink pode ser entendido como qualquer solução competitiva, porque apenas o DynamicLink tem acesso ao Google Play Services; portanto, não deve haver diferenças significativas entre outros serviços.
A tabela mostra que, na implementação do DynamicLinks, tudo funciona sem muletas e, em todos os casos, interessante para nós.
Links úteis:
Obrigado pela atenção! Ficarei feliz em discutir nos comentários como você resolveu problemas semelhantes.