Este é o backend de uma aplicação para rastreamento de encomendas dos Correios, desenvolvido com Spring Boot. O backend fornece uma API REST para consultar status de encomendas, gerenciar dados de rastreamento e enviar notificações push via Firebase Cloud Messaging (FCM).
O backend oferece:
- Consulta de status de encomendas via API externa dos Correios.
- Registro de tokens FCM para envio de notificações.
- Envio de notificações push com atualizações de status.
- Armazenamento de histórico de rastreamentos no banco de dados.
- Spring Boot: Framework Java para desenvolvimento backend.
- Spring Data JPA: Para persistência de dados.
- Firebase Admin SDK: Para envio de notificações push.
- Maven: Gerenciador de dependências e build.
- H2 Database (ou outro banco configurado): Para armazenamento local (opcional em produção).
- Java 17 (ou superior)
- Maven (versão 3.6.x ou superior)
- Acesso à internet para carregar dependências e conectar à API dos Correios
- Credenciais do Firebase (chave privada do Admin SDK)
- Aplicação Web para visualizar as notificações web push: https://github.com/mario-evangelista/rastreio-encomendas-correios
-
Clone o repositório do Frontend:
git clone https://github.com/mario-evangelista/rastreio-encomendas-correios.git cd rastreio-encomendas-correios -
Clone este repositório:
git clone https://github.com/mario-evangelista/api-proxy-labs-wonca.git cd api-proxy-labs-wonca -
Configure as credenciais do Firebase:
- Baixe o arquivo JSON do Admin SDK no Firebase Console.
- Coloque o arquivo em
src/main/resources/firebase-service-account.json.
-
Configure as variáveis de ambiente:
- Crie um arquivo
application.propertiesemsrc/main/resourcescom o seguinte conteúdo:spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.h2.console.enabled=true - Para produção, ajuste o
spring.datasource.urlpara seu banco de dados (ex.: PostgreSQL).
- Crie um arquivo
-
Instale as dependências e compile o projeto:
mvn clean install
-
Inicie a aplicação:
mvn spring-boot:run
- A API estará disponível em
http://localhost:8080.
- A API estará disponível em
-
POST /api/track: Consulta o status de um código de rastreamento.- Body:
{ "code": "AA123456789BR" }(Códiigos para Teste: AM001396702BR, ND510007744BR, AM414094794BR) - Response: JSON com os dados do rastreamento.
- Body:
-
POST /api/register-push-token: Registra um token FCM para notificações.- Body:
{ "trackingCode": "AA123456789BR", "pushToken": "TOKEN_FCM" }
- Body:
-
POST /api/test-updates: Envia uma notificação de teste (para desenvolvimento).
Documentação (OpenAPI - Swagger): https://api-proxy-labs-wonca.onrender.com/swagger-ui/index.html
- Adicione o arquivo
firebase-service-account.jsonao projeto. - Certifique-se de que o método
initializeFirebase()noFirebaseConfig.javaestá configurado corretamente.
- O backend verifica atualizações de status automaticamente via o método
checkForUpdates()(configurado com@Scheduled). - Notificações push são enviadas quando o status muda, incluindo o novo status, código de rastreamento e data/hora atual.
rastreio-encomendas-backend/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── com/example/rastreio/ # Pacote principal
│ │ │ │ ├── config/ # Configurações (ex.: FirebaseConfig.java)
│ │ │ │ ├── controller/ # Controladores REST
│ │ │ │ ├── entity/ # Entidades JPA
│ │ │ │ ├── repository/ # Repositórios JPA
│ │ │ │ ├── service/ # Serviços de negócio
│ │ │ │ └── TrackingService.java # Lógica principal
│ │ ├── resources/
│ │ │ ├── application.properties # Configurações
│ │ │ └── firebase-service-account.json # Credenciais Firebase
├── pom.xml # Dependências Maven
└── README.md # Este arquivo
Este documento fornece instruções para configurar e testar o envio de notificações Web Push usando a classe PushTestMain.java, que utiliza Firebase Cloud Messaging (FCM) para enviar notificações a um dispositivo ou navegador registrado.
Antes de executar o teste, certifique-se de que os seguintes itens estão configurados:
- Java Development Kit (JDK): Versão 17 ou superior instalada.
- Maven ou Gradle: Para compilar e executar o projeto (se aplicável).
- Firebase Project: Um projeto configurado no Firebase Console.
- Service Account Key: Um arquivo JSON de chave de conta de serviço gerado no Firebase Console (ex.:
serviceAccountKey.json). - FCM Token: Um token de registro FCM obtido do dispositivo ou navegador (gerado pelo cliente, ex.: via
getFCMTokennoApp.vue). - Ambiente de Execução: Terminal ou IDE (ex.: IntelliJ IDEA, Eclipse) configurada para executar código Java.
- Certifique-se de que o aplicativo cliente (ex.:
App.vue) está configurado para gerar um token FCM usando a funçãogetFCMToken. - Copie o token gerado (ex.: exibido no console ou armazenado em
localStorage) e guarde-o para uso no teste.
- Baixe o arquivo de chave de conta de serviço do Firebase Console:
- Acesse o projeto no Firebase.
- Vá para Project Settings > Service Accounts.
- Clique em Generate New Private Key e salve o arquivo (ex.:
serviceAccountKey.json).
- Coloque o arquivo em um diretório seguro (padrão:
C:\JAVA\CHAVES-SEGURAS\serviceAccountKey.json, conforme o código).
- Para personalizar os caminhos, defina as seguintes variáveis de ambiente:
FCM_TOKEN: O token de registro do dispositivo (ex.:dG9rZW46ZXhhbXBsZQo=).FIREBASE_SERVICE_ACCOUNT_PATH: Caminho para o arquivoserviceAccountKey.json(ex.:C:\JAVA\CHAVES-SEGURAS\serviceAccountKey.json).
- Exemplo no Windows (usando Command Prompt):
set FCM_TOKEN=dG9rZW46ZXhhbXBsZQo= set FIREBASE_SERVICE_ACCOUNT_PATH=C:\JAVA\CHAVES-SEGURAS\serviceAccountKey.json
-
Compile o Projeto:
- Se estiver usando Maven, execute:
mvn clean install - Certifique-se de que o código
PushTestMain.javaestá no pacote correto (com.example.api.proxy.push).
- Se estiver usando Maven, execute:
-
Execute o
PushTestMain:- No terminal ou IDE, execute a classe principal:
java -cp target/your-app.jar com.example.api.proxy.push.PushTestMain [FCM_TOKEN] - Substitua
target/your-app.jarpelo caminho do arquivo JAR compilado. - Passe o token FCM como argumento de linha de comando (ex.:
java -cp target/your-app.jar com.example.api.proxy.push.PushTestMain dG9rZW46ZXhhbXBsZQo=).
- No terminal ou IDE, execute a classe principal:
-
Verifique a Saída:
- Se bem-sucedido, você verá:
Using FCM_TOKEN: dG9rZW46ZXhhbXBsZQo= Using FIREBASE_SERVICE_ACCOUNT_PATH: C:\JAVA\CHAVES-SEGURAS\serviceAccountKey.json FirebaseApp initialized successfully ✅ Notificação WebPush enviada com sucesso: projects/your-project/messages/message-id - Se falhar, será exibido um erro como:
❌ Erro ao enviar notificação: Invalid argument FCM Error Code: INVALID_ARGUMENT
- Se bem-sucedido, você verá:
-
A notificação será do tipo Web Push com os seguintes detalhes:
- Título:
🚀 Teste WebPush - Corpo:
Notificação enviada com sucesso para o navegador! - Interação Requerida:
true(a notificação permanecerá visível até o usuário interagir). - Link:
http://localhost:8080(aberto ao clicar na notificação). - Dados Adicionais:
url=http://localhost:8080etag=test-notification.
- Título:
-
Verifique se a notificação aparece no navegador ou dispositivo associado ao token FCM.
Se a notificação não for recebida:
- Verifique o Token FCM:
- Certifique-se de que o token é válido e corresponde ao dispositivo/navegador de teste.
- Cheque as Credenciais:
- Confirme que o arquivo
serviceAccountKey.jsonestá acessível e contém credenciais válidas.
- Confirme que o arquivo
- Consulte os Logs:
- Veja a mensagem de erro e o código FCM (ex.:
INVALID_ARGUMENT,UNREGISTERED) para identificar o problema.
- Veja a mensagem de erro e o código FCM (ex.:
- Teste de Conectividade:
- Certifique-se de que o ambiente tem acesso à internet para se comunicar com os servidores do Firebase.
- O código usa o caminho padrão
C:\JAVA\CHAVES-SEGURAS\serviceAccountKey.jsonpara a chave de serviço. Ajuste conforme necessário ou use a variável de ambienteFIREBASE_SERVICE_ACCOUNT_PATH. - Para testes em produção, substitua
http://localhost:8080por uma URL real nowebpushConfig. - Consulte a documentação do Firebase Messaging para mais detalhes sobre erros e configurações.
- Documentação Firebase Notificação Web Push: https://firebase.google.com/docs/cloud-messaging/js/client?hl=pt-br
