Roteamento de Deeplink com DeeplinkRouter no Android - "O Mago Implacável"

Rodrigo Vianna Calixto de Oliveira
CodandoTV
Published in
5 min readFeb 18, 2022
https://twitter.com/patopapao/status/971814332051935233?lang=es

Esse é um dos personagens da D&D - Party Perfeita para sua Aplicação Android. Conhecido como o O Mago Implacável, com seu poder mágico de teleporte, ele ajuda seus aliados(Guerreiro, Clérigo e Ranger) a explorar qualquer lugar da aplicação.

O Mago Implacável é a representação de que em projetos mobile é muito comum ter a necessidade de fazer navegação entre telas, seja através de fluxos internas ou vindo de links externos que redirecionam para sua aplicação sendo conhecido como Deeplink.

Introdução

A proposta é mostrar a solução que desenvolvi para ajudar a fazer navegação seja internas ou externas dentro do aplicativo, mas para isso precisamos entender a estrutura de um deeplink interno e externo facilitando o entendimento do uso da biblioteca.

Deeplink Interno

Usei como referencia o objeto Uri do package android.net para criar a base da solução.

meuapp://minharota?meuparametro=abcd

  • meuapp conhecido como scheme é nele que coloca o nome da sua aplicação e graças a este mapeamento abre uma porta inicial de acesso para seu projeto;
  • minharota é basicamente o authority, isto é, aqui fica mapeado todas as rotas possíveis da sua aplicação onde serão direcionadas para as respectivas telas;
  • meuparametro é onde podemos adicionar parâmetros específicos para seu link, podendo ter um ou mais de um. No caso de múltiplos parâmetros, eles devem ser separados por &entre eles.

Deeplink Externo

https://meuapp/app/minharota?meuparametro=abcd

Note que temos duas propriedades novas o https e /app , eles serão comentados mais pra frente no item 5.

Prontos após uma introdução vamos para a utilização da biblioteca.

https://gifs.com/gif/patolino-o-mago-dublado-KRYpjw

Implementação:

1. Adicionar a lib do deeplink

Adicione no build.gradle:

Adicione no seu modulo:

implementation 'com.github.rviannaoliveira:Deeplink:1.0.1'

2. Criação de um deeplink

Após isso será preciso iniciar a criação de algumas classes herdando classes das bibliotecas baseado na estrutura de deeplink criado acima, devido a isso precisamos nos preocupar com 3 pontos o scheme, authority e path explicados a seguir:

2a. Criar Authority

Crie um a classe herdando do DeepLinkAuthority com suas rotas respectivas do deeplink por exemplo se o deeplink fosse “meuapp://anyA”, adicione anyA.

2b. Criar classe de deeplink

Crie uma sealed class que herde de DeeplinkLib e cada deeplink terá toda a sua configuração nessa classe como o Authority (rota) criado anteriormente, e adicione os parâmetros ( path )

Caso seu deeplink precisa ser montado com uma stack de telas, isto é, o fluxo completo com todas as telas anteriores é só adicionar no parâmetro deepLinkStack na criação do seu objeto com os Deeplink na ordem do fluxo.

2c. Criar Mapeamento das Activities

Agora precisa ser feito o mapeamento das telas que irão serão abertas, porém essas classes não ficam no mesmo modulo de deeplink e, para isso, você precisa criar uma classe que implemente a interface DeepLinkRouterProcessor dentro do seu modulo aonde estão as telas que serão abertas. Exemplo:

Agora que você criou qual tela irá abrir a rota precisamos popular o objeto principal que orquestra toda essa configuração o DeeplinkRouterImpl

3. DeeplinkRouter

Na criação da instância do DeeplinkRouter é preciso passar tudo que foi criado anteriormente para ele poder fazer esse manuseio de maneira automática da sua aplicação passando os seguintes campos:

  • routeProcessors: a lista de RouterProcessors que você criou no aplicativo aonde esta suas rotas das telas podendo.
  • deeplinks: Passa a classe Deeplink montados com as configurações.
  • internScheme: o nome do scheme que seu aplicativo vai estar preparado para receber dentro da sua aplicação ou vindo de um deeplink interno por alguma API.
  • externalScheme: começo da URL externa.
  • authorities: passe a classe que foi herdado do DeeplinkAuthority.

4. Utilização

dentro da sua Activity você pode fazer dois tipos de chamadas:

launch: Caso queira chamar a tela direta

  • launchWithStack: Caso precisa montar um fluxo completo

5. Configurar Deeplink Externo

Caso você precise trabalhar com deeplink externo, os próximos passo irão explicar o passo-a-passo.

Aqui utilizaremos novamente o mesmo deeplink de exemplo:

https://meuapp/app/minharota?meuparametro=abcd

O itens https e app precisam ser declarados no seu AndroidManifest para seu aplicativo saber que tipo de link externo está apto a entrar no aplicativo. O campo /app é obrigatório, pois na biblioteca auxilia na transformação do deeplink externo pra interno e esse campo é importante para fazer a associação do AndroidManifest com sua aplicação e com a lib, no entanto não precisará ser declarado mais deeplinks externos com o mesmo scheme na sua aplicação já que todos os deeplinks externas serão utilizados como se fossem internos.

<data
android:host="meuapp"
android:pathPrefix="/app/"
android:scheme="https" />

6. Resultado

Segue um video de exemplo com o resultado:

O mago implacável ataca novamente:

Fluxo de deeplink interno tem uma grande utilidade e pode auxiliar caso você esteja trabalhando com multi módulos e entre eles precisa acessar classes nos quais os próprios não conhecem.

https://tenor.com/view/duck-daffy-duck-mago-o-mago-e-implacavel-gif-12393015

E isso é tudo galera. Tomara que tenha ajudado, lembrando que tem algumas limitações como por exemplo o uso de fragmentos, que ainda estou fazendo essas melhorias, mas inicialmente você terá que configurar os fragmentos isolados com alguns Extensions que foram criados para facilitar o uso. Porém outras funcionalidades como o uso de flags e uso de resultCode.

Links relacionados:

Agradeço e se tiver qualquer feedback, deixa ai nos comentários ou entre em contato comigo no LinkedIn ou https://flow.page/rviannaoliveira.

--

--