93 lines
2.8 KiB
Markdown
93 lines
2.8 KiB
Markdown
# FightRate RN — Real BLE / No Mocks Corrective Slice
|
|
|
|
Data: 2026-06-10
|
|
Status: implementado / APK enviado ao Telegram
|
|
Stack: React Native Community CLI bare, sem Expo
|
|
|
|
## Problema
|
|
|
|
A primeira versão React Native enviada era instalável, mas não funcional como app de treino real:
|
|
|
|
- usava dados de demonstração;
|
|
- não escaneava BLE;
|
|
- indicava estados como conectado/pronto sem sensor real;
|
|
- gráficos não eram alimentados por amostras reais;
|
|
- histórico e insights pareciam conteúdo estático;
|
|
- navegação inferior estava visualmente fraca;
|
|
- logo/ícone do projeto não aparecia na UI.
|
|
|
|
## Objetivo desta fatia
|
|
|
|
Transformar a versão RN em uma base real de captura:
|
|
|
|
1. Remover dados mockados da UI.
|
|
2. Adicionar BLE real com `react-native-ble-plx`.
|
|
3. Pedir permissões Android Bluetooth/localização.
|
|
4. Escanear sensores com Heart Rate Service `180D`.
|
|
5. Conectar ao sensor encontrado.
|
|
6. Monitorar Heart Rate Measurement `2A37`.
|
|
7. Parsear BPM real a partir do payload BLE.
|
|
8. Atualizar BPM, média, pico e amostras em tempo real.
|
|
9. Renderizar gráfico somente com amostras reais recebidas.
|
|
10. Exibir histórico/insights como estados vazios honestos quando não houver sessão real.
|
|
11. Melhorar bottom nav: ícones, barra flutuante, sem faixa preta atrás.
|
|
12. Remover indicador `READY` do topo.
|
|
13. Usar logo existente do projeto na UI.
|
|
14. Gerar APK release e enviar ao Telegram.
|
|
|
|
## Dependências aprovadas pela necessidade do pedido
|
|
|
|
- `react-native-ble-plx`: BLE real no React Native bare.
|
|
- `react-native-svg`: gráfico real leve e ícones SVG.
|
|
- `lucide-react-native`: ícones para navegação/estado.
|
|
|
|
## Critérios de aceite
|
|
|
|
- App não mostra BPM mockado.
|
|
- Tela de captura mostra estado de permissão/scan/conexão real.
|
|
- Botão de captura dispara permissões e scanning BLE.
|
|
- Se nenhum sensor for encontrado, a UI diz isso claramente.
|
|
- Se sensor conectar, BPM vem do characteristic `2A37`.
|
|
- Gráfico só aparece depois de amostras reais.
|
|
- Histórico não finge sessões inexistentes.
|
|
- Insights não fingem análise sem dados.
|
|
- APK release abre sem Metro.
|
|
|
|
## Validação
|
|
|
|
```bash
|
|
cd FightRateRN
|
|
npm run typecheck
|
|
npm run lint
|
|
npm test -- --runInBand
|
|
npm audit --audit-level=moderate
|
|
```
|
|
|
|
Resultado:
|
|
|
|
```text
|
|
tsc OK
|
|
ESLint: No issues found
|
|
Tests: 2 suites / 4 tests passed
|
|
found 0 vulnerabilities
|
|
```
|
|
|
|
Build Android release arm64:
|
|
|
|
```bash
|
|
cd FightRateRN/android
|
|
./gradlew assembleRelease -PreactNativeArchitectures=arm64-v8a
|
|
```
|
|
|
|
Resultado:
|
|
|
|
```text
|
|
BUILD SUCCESSFUL
|
|
APK: FightRateRN/android/app/build/outputs/apk/release/app-release.apk
|
|
Tamanho: 29.7 MB
|
|
Telegram: enviado
|
|
```
|
|
|
|
## Limitação ainda aberta
|
|
|
|
A conexão BLE real precisa ser validada no aparelho físico com a cinta Magene H003. O app agora escaneia/conecta/monitora BLE real, mas só o teste com o sensor confirma comportamento final de campo. |