📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.

🌀 P14: Portais Dimensionais (Navigation & Notificações Push)

v1.0 — Android Nativo, Kotlin, Firebase Cloud Messaging (FCM), NotificationCompat, Canais de Notificação e Deep Links

Série Prática Android Clássico — Projeto 14 de 21


🏛️ Visão Geral & Arquitetura Visual

O projeto Portais Dimensionais domina a mecânica de engajamento assíncrono em dispositivos móveis através de Push Notifications e Deep Linking. A aplicação implementa serviços em segundo plano orientados a eventos via Firebase Cloud Messaging (FCM), cria canais categorizados de notificação (NotificationChannel) em conformidade com o Android 8.0+ (API 26+) e Android 13+ (permissão POST_NOTIFICATIONS), e direciona o usuário para fendas dimensionais específicas via PendingIntent e grafo de navegação.

Fluxo Visual dos Portais Dimensionais com Push Notifications

📁 Estrutura de Pastas Anti-Colisão

Todos os serviços de mensageria, receptores e interfaces residem na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p14_portais_push/
├── assets/
│   ├── mockup_portais_fluxo.svg
│   ├── screenshot_01_lista_portais.svg
│   ├── screenshot_02_detalhe_fenda.svg
│   └── screenshot_03_push_notification.svg
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/portaispush/
│   │   │       │   ├── fcm/
│   │   │       │   │   └── PortalFirebaseService.kt
│   │   │       │   └── MainActivity.kt
│   │   │       └── res/
│   │   └── build.gradle
│   ├── gradle/
│   ├── build.gradle
│   ├── gradlew
│   ├── settings.gradle
│   └── README.md
└── index.md

🧑‍💼 Engenharia de Software & Especificação Formal

1. Histórias de Usuário (User Stories)

ID Persona Narrativa da Funcionalidade Critério de Aceitação Principal Prioridade
US-01 Viajante Interdimensional Quero receber um alerta no smartphone quando um portal abrir em uma dimensão próxima. Exibição de notificação na barra de status com título, som e ícone. Alta
US-02 Viajante Interdimensional Quero tocar na notificação e ser levado diretamente para a fenda dimensional notificada. Abertura da tela de detalhes via Deep Link contendo o ID do portal. Alta
US-03 Usuário Android 13+ Quero que o app solicite permissão de notificação de forma transparente no primeiro acesso. Diálogo nativo de permissão android.permission.POST_NOTIFICATIONS. Alta
US-04 Engenheiro de Software Quero que as mensagens sejam categorizadas em canais prioritários e secundários. Criação de NotificationChannel com importância alta e sons distintos. Média
US-05 Desenvolvedor Mobile Quero capturar o token de registro do dispositivo para envio de testes direcionados. Invocação de FirebaseMessaging.getInstance().token. Baixa

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    User([fa:fa-user Viajante])
    FCM[(fa:fa-cloud Firebase FCM)]
    OSNotif[(fa:fa-bell NotificationManager)]

    subgraph AppPortais ["🌀 Portais Push (mobile-android-kotlin)"]
        UC01["Registrar Token de Notificação"]
        UC02["Receber Payload de Fenda Dimensional"]
        UC03["Construir Notificação com Canal"]
        UC04["Disparar Alerta na Barra de Status"]
        UC05["Navegar para o Portal via Deep Link"]
    end

    AppPortais --> UC01
    UC01 --> FCM
    FCM -->|Push Event| UC02
    UC02 --> UC03
    UC03 --> OSNotif
    OSNotif --> UC04
    User -->|Toca no Alerta| UC05

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-03 mobile-android-kotlin/app/.../MainActivity.kt testPostNotificationPermissionFlow()
RF-02 US-01, US-05 mobile-android-kotlin/app/.../PortalFirebaseService.kt testOnMessageReceivedHandler()
RF-03 US-04 mobile-android-kotlin/app/.../PortalFirebaseService.kt testNotificationChannelCreated()
RF-04 US-02 mobile-android-kotlin/app/.../PortalFirebaseService.kt testPendingIntentImmutableFlag()
RF-05 US-02 mobile-android-kotlin/app/.../MainActivity.kt testDeepLinkIntentArgs()

🛠️ Implementação Guiada (PortalFirebaseService.kt)

ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em mobile-android-kotlin.


🚀 Como Executar no Laboratório

1. Navegue até a subpasta do projeto

cd catalogo_projetos/android_p14_portais_push/mobile-android-kotlin

2. Compile e execute no dispositivo

./gradlew installDebug

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Permissão Android 13 Diálogo POST_NOTIFICATIONS configurado corretamente PASS ✅
CP-02 Canais de Notificação NotificationChannel com alta prioridade registrado PASS ✅
CP-03 Recepção de Mensagens Processamento de payloads FCM com exibição de heads-up PASS ✅
CP-04 Navegação com PendingIntent Toque na notificação direciona para o portal correto PASS ✅
CP-05 Suíte de Testes Automatizados Testes de unidade e instrumentação aprovados com 100% de sucesso PASS ✅