Kotlin: implementação de deep links e navegação dinâmica

Rocketseat

Rocketseat

5 min de leitura
Kotlin
Já se frustrou ao clicar em um link no celular e parar na tela inicial de um app, em vez da página que você esperava? Essa experiência é mais comum do que deveria, mas tem solução! Neste artigo, vamos mergulhar no mundo do deep linking e da navegação dinâmica em Kotlin. Você vai aprender a criar jornadas de usuário fluidas e intuitivas, que levam seus usuários exatamente onde eles precisam ir. Prepare-se para transformar a experiência no seu app e dar um salto em engajamento e conversões!
Se você deseja melhorar a experiência do usuário e tornar seu aplicativo mais fluido e inteligente, este guia é para você. Vamos explorar como implementar essas ferramentas no Kotlin, de maneira prática e didática.

O que são deep links e navegação dinâmica?

Deep links: direcionando com precisão

Imagine que você está navegando na internet e encontra um link para um curso interessante da Rocketseat. Ao clicar, em vez de abrir a página inicial do aplicativo e forçar você a procurar pelo curso, você é levado diretamente à página exata do curso. É isso que os deep links fazem: direcionam o usuário de forma precisa para uma página ou funcionalidade específica dentro do aplicativo.
Os deep links são construídos com URIs (Identificadores Uniformes de Recursos), que podem ser comparados a "endereços personalizados" que apontam para partes específicas do app.
Exemplos de uso:
  • E-mail marketing: imagine um e-mail promocional com um link que leva diretamente à página de detalhes de um novo curso de Kotlin.
  • Notificações push: um lembrete enviado ao usuário, que o redireciona para uma oferta limitada em um app de e-commerce.
  • Compartilhamento em redes sociais: usuários compartilhando conteúdo específico do aplicativo, como um artigo, curso ou evento.
Benefícios:
  1. Melhoria na experiência do usuário: os usuários chegam rapidamente ao que precisam, reduzindo atritos e aumentando a satisfação.
  1. Aumento da taxa de conversão: ao levar o usuário diretamente para páginas específicas, as chances de ele completar uma ação aumentam significativamente.
  1. Análise e rastreamento eficazes: é possível monitorar de onde os usuários vêm e medir a eficácia de campanhas de marketing.
Se você deseja criar aplicativos mais inteligentes e engajadores, deep links são uma ferramenta essencial.

Navegação dinâmica: personalizando a jornada do usuário

Agora imagine que, ao acessar um deep link, o aplicativo não apenas leva o usuário para uma página específica, mas também ajusta o fluxo de navegação com base no contexto. Por exemplo:
  • Usuário não logado: ele é redirecionado para uma tela de login antes de acessar o conteúdo.
  • Usuário logado: o app o leva diretamente à página do curso ou ao próximo passo de sua jornada.
Essa é a mágica da navegação dinâmica: fluxos flexíveis que se adaptam em tempo real. Em vez de depender exclusivamente de rotas fixas definidas em arquivos XML, a navegação é decidida dinamicamente com base em dados recebidos, preferências do usuário ou lógica de negócios.
Por que usar navegação dinâmica?
  1. Criação de fluxos adaptáveis: seja um onboarding diferenciado ou um fluxo de compras mais intuitivo, você pode criar experiências únicas.
  1. Integração com testes A/B: permite testar diferentes fluxos para otimizar o comportamento do usuário.
  1. Modularização e manutenção: fluxos dinâmicos tornam o aplicativo mais fácil de modificar e escalar, especialmente em projetos grandes.

Como deep links e navegação dinâmica trabalham juntos?

Pense nos deep links como a porta de entrada. Eles levam o usuário para dentro do aplicativo, enquanto a navegação dinâmica guia o restante da jornada. Por exemplo:
  1. Um deep link direciona o usuário para a página de um curso.
  1. A navegação dinâmica decide o próximo passo com base em:
      • Estado do usuário: está logado? É assinante?
      • Dados recebidos: o ID do curso ou parâmetros específicos no link.
      • Preferências do usuário: configurações personalizadas para exibir conteúdos relevantes.
Combinados, essas ferramentas permitem criar aplicativos Android modernos e centrados na experiência do usuário.
Agora que você já entende o que são deep links e navegação dinâmica, vamos configurar o ambiente para começar a implementá-los no seu projeto Kotlin.

Preparando o terreno: configurando o ambiente

Antes de mergulharmos no código, vamos garantir que tudo esteja pronto para implementar deep links e navegação dinâmica no seu projeto Kotlin. Essa etapa é essencial, especialmente se esta for sua primeira experiência com essas ferramentas. Não se preocupe, cada passo será detalhado para tornar o processo simples e direto!

1. Adicionar as dependências

Para começar, precisamos das bibliotecas do navigation component, que tornarão a configuração de deep links e navegação dinâmica muito mais intuitiva. Adicione estas linhas ao arquivo build.gradle do seu projeto:
implementation "androidx.navigation:navigation-fragment-ktx:2.5.3" implementation "androidx.navigation:navigation-ui-ktx:2.5.3"
Essas bibliotecas fornecem as ferramentas necessárias para gerenciar a navegação e criar fluxos dinâmicos, garantindo flexibilidade e segurança no seu aplicativo.

2. Configurar o AndroidManifest.xml

O próximo passo é configurar o AndroidManifest.xml para indicar ao sistema quais deep links seu aplicativo suporta. Vamos criar um exemplo básico:
<activity android:name=".MainActivity" android:exported="true"> <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="rocketseat" android:host="curso" android:pathPrefix="/kotlin" /> </intent-filter> </activity>
O que isso faz?
  • Define um deep link que usa o esquema rocketseat, com o host curso e um caminho específico (/kotlin).
  • Permite que o link abra diretamente a tela inicial do seu aplicativo quando clicado.
Não esqueça de testar o link para garantir que ele esteja funcionando como esperado. Use o ADB (Android Debug Bridge) ou clique diretamente no link no navegador.

3. Criar o navigation graph

Agora, é hora de definir os destinos de navegação no seu app. O navigation graph é um mapa visual que conecta diferentes telas e permite associar deep links a elas.
Crie o arquivo navigation/nav_graph.xml e adicione a configuração abaixo:
<fragment android:id="@+id/courseDetailsFragment" android:name="com.rocketseat.app.CourseDetailsFragment" android:label="Detalhes do Curso"> <argument android:name="courseId" app:argType="string" /> <deepLink app:uri="rocketseat://curso/kotlin?courseId={courseId}" /> </fragment>
O que acontece aqui?
  • O destino courseDetailsFragment é criado para exibir detalhes de um curso específico.
  • Um Deep Link dinâmico é configurado para receber o parâmetro courseId, permitindo que a tela se ajuste ao conteúdo específico.
E pronto! Com o ambiente configurado, você está um passo mais próximo de criar uma experiência incrível para os usuários do seu aplicativo. Pode parecer desafiador no início, mas essa preparação é a base para implementar Deep Links e Navegação Dinâmica de forma eficiente.
Agora, com o ambiente pronto, é hora de entrar na prática e começar a implementar os deep links e a navegação dinâmica com Kotlin. Bora codar?

Implementando deep links no Kotlin

Agora que o ambiente está configurado, vamos colocar a teoria em prática e ver como os deep links e a navegação dinâmica funcionam diretamente no código. Com exemplos claros e objetivos, você será capaz de aplicar esses conceitos no seu projeto de forma eficiente.

Processando deep links no Kotlin

Na MainActivity, é onde lidamos com os deep links recebidos e os processamos para navegar até o destino correto. Confira o exemplo abaixo:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) handleDeepLink(intent) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) handleDeepLink(intent) } private fun handleDeepLink(intent: Intent?) { intent?.data?.let { uri -> val courseId = uri.getQueryParameter("courseId") val bundle = Bundle().apply { putString("courseId", courseId) } val navController = findNavController(R.id.nav_host_fragment) navController.navigate(R.id.courseDetailsFragment, bundle) } } }
Neste exemplo:
  1. Usamos o método handleDeepLink para capturar o deep link recebido no Intent.
  1. Extraímos o parâmetro courseId da URI.
  1. Criamos um Bundle com o ID do curso e o enviamos para o NavController, que direciona o usuário para a tela courseDetailsFragment.
Este é o primeiro passo para integrar deep links ao fluxo de navegação do seu aplicativo. Simples e poderoso, ele permite que o usuário seja levado diretamente ao conteúdo desejado.

Navegação dinâmica com Navigation component

Na tela de detalhes do curso (CourseDetailsFragment), usamos a navegação dinâmica para decidir o próximo destino do usuário com base no contexto. Confira o exemplo:
class CourseDetailsFragment : Fragment() { private val args: CourseDetailsFragmentArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val courseId = args.courseId binding.courseTitle.text = "Curso de Kotlin: $courseId" binding.nextButton.setOnClickListener { if (isUserSubscriber()) { findNavController().navigate(R.id.subscriberWelcomeFragment) } else { findNavController().navigate(R.id.subscriptionOfferFragment) } } } private fun isUserSubscriber(): Boolean { // Lógica simulada: substitua pela real return false } }
Neste exemplo:
  1. Capturamos o courseId passado pelo deep link usando navArgs.
  1. Exibimos o nome do curso com base no ID recebido.
  1. Implementamos uma lógica que verifica se o usuário é assinante. Caso seja, ele é direcionado para subscriberWelcomeFragment. Caso contrário, é redirecionado para subscriptionOfferFragment.
A combinação de deep links e navegação dinâmica permite criar experiências de navegação fluidas e personalizadas. Assim, o fluxo do aplicativo se adapta automaticamente às necessidades e ao contexto de cada usuário.

Explorando tópicos avançados

Se você já está confortável com a implementação básica de deep links e navegação dinâmica, é hora de explorar funcionalidades mais avançadas. Essas técnicas não apenas aprimoram a experiência do usuário, mas também ajudam a tornar seu aplicativo mais seguro, escalável e fácil de gerenciar.

1. App Links: segurança com HTTPS

Os App Links são uma evolução dos deep links, oferecendo maior segurança e integração ao associar seu aplicativo a links HTTPS verificados. Com eles, o Android pode garantir que apenas o seu app será capaz de abrir determinados links, evitando problemas de segurança.
Benefícios:
  • Maior confiabilidade: links HTTPS são amplamente reconhecidos e seguros.
  • Experiência contínua: se o aplicativo não estiver instalado, o usuário pode ser redirecionado para o site correspondente.
Como implementar:
  1. Configure o arquivo assetlinks.json no seu servidor para associar seu domínio ao aplicativo.
  1. Atualize o AndroidManifest.xml para suportar App Links com o atributo android:autoVerify="true".

2. Firebase Dynamic Links: persistência e rastreamento

Os Firebase Dynamic Links levam os deep links para o próximo nível, pois permanecem válidos mesmo após a instalação do aplicativo. Imagine que o usuário clica em um link promocional, instala o app, e ainda assim é direcionado para a página exata do conteúdo após a instalação.
Vantagens:
  • Persistência: o link permanece funcional mesmo após a instalação do app.
  • Rastreamento avançado: saiba de onde vêm os cliques, permitindo otimizar campanhas de marketing.
Começando com Firebase Dynamic Links:
  1. Integre o Firebase ao seu projeto.
  1. Configure os links dinâmicos diretamente no console do Firebase.
  1. Use o SDK do Firebase para gerenciar a navegação no app.

3. Feature modules: escalabilidade com modularização

À medida que seu app cresce, a modularização se torna essencial para facilitar a manutenção e escalabilidade. Usar feature modules em conjunto com deep links e navegação dinâmica é uma abordagem poderosa.
Como funciona:
  • Cada módulo gerencia uma funcionalidade específica do app (ex.: cursos, perfil do usuário).
  • Os deep links podem ser configurados para abrir destinos em módulos separados.
  • Isso torna o aplicativo mais leve, reduzindo o tamanho do APK inicial.
Combine feature modules com o Navigation component para garantir uma integração suave entre os módulos e a navegação dinâmica.
Com essas abordagens avançadas, você eleva o nível do seu aplicativo Android, integrando segurança, rastreamento e modularização de forma inteligente e eficaz.

Conclusão

Os deep links e a navegação dinâmica são ferramentas indispensáveis para quem deseja criar aplicativos Android modernos, escaláveis e centrados na experiência do usuário. Com o poder do Kotlin, essas implementações tornam-se mais elegantes, eficientes e fáceis de manter, permitindo que você entregue uma navegação fluida e altamente personalizada.
Seja para simplificar fluxos de navegação, melhorar a retenção de usuários ou aumentar a conversão em campanhas de marketing, esses conceitos oferecem um universo de possibilidades para transformar seu app em um diferencial competitivo.

Conheça o Rocketseat Para Empresas

Oferecemos soluções personalizadas para empresas de todos os portes.

Rocketseat

Rocketseat

Ecossistema de educação contínua referência em programação e Inteligência Artificial.

Artigos_

Explore conteúdos relacionados

Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.

Imagem contendo uma carta e um símbolo de check
NewsletterReceba conteúdos inéditos e novidades gratuitamente