Executando verificação de segurança...
1

Checkpoint da Série: o que já funciona, o que quebrou e para onde vamos (Parte 4.5)

Quatro posts publicados. Antes de seguir para produção, um mapa do que foi construído — e o bug silencioso que encontramos testando no dispositivo real.


O que foi implementado

Post 1 — Fundação
Tipos de deep link, diferenças entre custom scheme, App Links e Universal Links, estrutura base em Dart. Sem pacote externo.

Medium: https://medium.com/@crdornelles/deep-links-em-flutter-o-guia-definitivo-para-iniciantes-parte-1-d56ea3619192
dev.to: https://dev.to/cdornelles/deep-links-em-flutter-o-guia-definitivo-para-iniciantes-sem-pacotes-de-terceiros-parte-1-4a31

Post 2 — Android nativo
AndroidManifest.xml com intent-filter, MainActivity.kt registrando MethodChannel (cold start) e EventChannel (app aberto).

Medium: https://medium.com/p/562bb353b3b2?postPublishedType=initial
dev.to: https://dev.to/cdornelles/deep-links-no-android-implementacao-nativa-com-kotlin-flutter-parte-2-311n

Post 3 — iOS nativo
Info.plist + Runner.entitlements + AppDelegate.swift espelhando a mesma lógica do Android.

Medium: https://medium.com/@crdornelles/deep-links-no-ios-implementa%C3%A7%C3%A3o-nativa-com-swift-flutter-parte-3-d37569fd0a15
dev.to: https://dev.to/cdornelles/deep-links-no-ios-implementacao-nativa-com-swift-flutter-parte-3-1521

Post 4 — Integração Flutter
DeepLinkService com MethodChannel + EventChannel, StreamController.broadcast(), SignupPage com referral code pré-preenchido.

Medium: https://medium.com/@crdornelles/conectando-tudo-integra%C3%A7%C3%A3o-flutter-com-deep-links-nativos-parte-4-b9b23c6e32e5
dev.to: https://dev.to/cdornelles/conectando-tudo-integracao-flutter-com-deep-links-nativos-parte-4-5blb


O bug silencioso do Post 4

Durante os testes, o app abria mas o referral code nunca aparecia. Sem erro, sem exception, sem log.

Causa: race condition com StreamController.broadcast().

O problema na prática

// ❌ errado
await service.initialize(); // evento emitido aqui...
_deepLinkSub = service.deepLinkStream.listen(...); // listener registrado depois
// ✅ correto
_deepLinkSub = service.deepLinkStream.listen(...); // listener ativo antes de qualquer evento
await service.initialize();

broadcast() não bufferiza. Evento sem listener ativo = evento perdido. A ordem importa.

Esse é o tipo de bug que não aparece em log, não quebra o app, e passa despercebido até produção.


Onde estamos agora

O fluxo ponta a ponta já funciona:

  • Android → captura o intent corretamente
  • iOS → captura a URL corretamente
  • Flutter → recebe via MethodChannel / EventChannel e processa
  • UI → reage ao deep link com o referral code pré-preenchido

Fluxo ponta a ponta

Mas ainda falta o mais difícil: fazer isso funcionar fora do ambiente de desenvolvimento.


O que vem a seguir

  • Post 5: App Links e Universal Links em produção — verificação de domínio, assetlinks.json, apple-app-site-association
  • Post 6: Deferred Deep Links — quando o usuário não tem o app instalado
  • Post 7: Página HTML de redirect inteligente
  • Post 8: Testes e troubleshooting
  • Post 9: Refatoração com Clean Architecture

Código completo: https://github.com/crdornelles/fit_connect — branch post/04-flutter


Checkpoint completo no Medium: https://medium.com/p/0eb2933b5198?postPublishedType=initial

Carregando publicação patrocinada...
1

Checkpoint da Série: o que já funciona, o que quebrou e para onde vamos (Parte 4.5)
Quatro posts publicados. Antes de seguir para produção, um mapa do que foi construído — e o bug silencioso que encontramos testando no dispositivo real.

Lendo seu título e a descrição eu não entendi do que se tratava, precisei chegar na metade do post pra entender do que se tratava.

Quando faz um post de continuação por favor coloque uma introdução do que é essa continuação, pode ser uma linha só mas faz toda a diferença