Ejemplo de integración securizada de API de Marvel con Android Compose, MVI+ViewModel.
Se ha definido la arquitectura MVI (Model-View-Intent) con el concepto de ViewModel en la capa de presentación para el manego de eventos/estados.
Con el patrón MVI el usuario genera un Intent
(acción) que el presentador observa para que el Model
genere un nuevo State
para la View
.
El ViewModel retendrá:
- Instancia
Flow
que permitirá a laView
observar losEffect
.
Efectos en pantalla como generación de Snackbars o cambios de navegación.
- Instancia
MutableState
para actualizar la información de laView
.
Los elementos
State
provocan el repintado de la interfaz de Compose una vez se detecta un cambio en la información contenida.
Se ha securizado con Stringcare tanto la apiKey
como la privateKey
:
<resources>
<string name="apiKey" hidden="true">0dae07fa59576885c504ab94c45ddf0f</string>
<string name="privateKey" hidden="true">b1da55b95adf3e0dc740f2494f3233088ff54d9b</string>
</resources>
Aunque es un ejemplo de implementación de API muy básico se ha mantenido un desglose de vista, ViewModel y capa de datos con Hilt
y el formateo de Ktlint
:
gradlew ktlintformat
// .editorconfig
[*.{kt,kts}]
disabled_rules=no-wildcard-imports,experimental:annotation
FlowInstrumentedTest
: Test del flujo de la aplicación.SecurityInstrumentedTest
: Test de revelado deapiKey
yprivateKey
.
Se ha definido los entornos de dev
y prod
generando las buildVariants:
debugDev
debugProd
releaseDev
releaseProd
Los valores de apiKey
y privateKey
varían según el tipo de entorno.
- Compose
- Hilt
- Coil
- Retrofit
- Gson
- Stringcare