Roteamento de Deeplink com DeeplinkRouter no Android - "O Mago Implacável"
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
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.
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:
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.
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.