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.
Agora que você conhece tanto as bases quanto as técnicas avançadas, está pronto para aplicar esses conhecimentos no seu projeto. E se deseja continuar evoluindo como desenvolvedor Android, a formação Android com Kotlin da Rocketseat é o próximo passo perfeito para você!
Nesta formação, você aprenderá:
  • Os fundamentos de Kotlin e Android, incluindo Jetpack Compose e Clean Architecture.
  • Como trabalhar com dados remotos, APIs e implementar testes automatizados.
  • A desenvolver projetos profissionais e criar um portfólio que brilhe os olhos do mercado.
  • Práticas modernas e de alta demanda no mercado de tecnologia.
Diferenciais que fazem a diferença:
  • Aulas práticas e diretas ao ponto.
  • Suporte personalizado com tutorias individuais, bate-papos em grupo e mentorias de carreira.
  • Networking e eventos exclusivos, como o Talent Space.
  • Certificado de especialista em Android com Kotlin, reconhecido no mercado.
O mercado de tecnologia está em expansão e a demanda por desenvolvedores Android qualificados só cresce. Com a formação da Rocketseat, você estará preparado para conquistar salários que variam de R$ 3k a R$ 20k, além de trabalhar com tecnologias usadas por grandes empresas como Uber, Spotify e Slack.
🚀
Pronto para transformar sua carreira? Explore mais conteúdos da Rocketseat e inicie agora sua jornada para dominar o desenvolvimento Android com Kotlin.
Artigos_

Explore conteúdos relacionados

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

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA