Qué es y qué no Apache Cordova

En el tema de las aplicaciones móviles creadas con tecnologías web, creo que hay generalmente mucha confusión. Y no sé si quienes estamos a favor de esta solución lo hemos sabido transmitir bien. Al margen por supuesto de la presión que ejercen quienes son cien por cien contrarios y defienden sólo el “codigo nativo”.

Por eso en este post quería hacer sólo un par de acalaraciones y extender quizá el tema en otros posts con dudas que puedan ir surgiendo.

Qué es una app hecha con JavaScript

Bueno, primero aclarar que JavaScript, en este tipo de apps, cubre la parte de programación, lo que sería Java en una app para Android nativa. La presentación se hace como en web, con HTML y CSS.

Cuando se habla de una app con tecnologías web, mucha gente recurre al concepto de WebView pero no siempre queda claro. Se tiende a pensar en muchos casos que se trata de algo así como crear una web y luego abrir una especio de iframe en que se ve la web de tu servidor y no, no se trata de eso.

Es cierto que eso es algo que se puede hacer con un WebView pero no es lo único que se puede hacer. Lo que hacemos al crear una app con tecnologías web es utilizar un navegador, peor no para ver una web remota, sino para poder tener por así decirlo un motor sobre el que ejecutar HTML, CSS y JS. Algo así como lo que hacen un montón de aplicaciones a día de hoy como Atom que están basadas en JS. El código “vive” y se ejecuta completamente en el dispositivo.

Las aplicaciones, si necesitan comunicación con algún servidor o servicio externo para tomar o enviar datos, lo hacen a través de peticiones AJAX.

Por tanto, el usuario ni siquiera ve en realidad que se usa un navegador. No se trata de que se vaya a abrir una url en el navegador que tu tengas configurado. Se utiliza el motor que tu dispositivo tenga por defecto según sea Andorid, iOS, Firefox OS, Windows Phone …

Cordova a través de su CLI, se encarga también de gestionar la emulación y el compilado final de la aplicación al sistema en el que queramos desarrollar. Mención aparte las implicaciones y complicaciones que esto tiene en concreto para iOS al no poderse hacer en cualquier máquina.

Para qué Apache Cordova

En condiciones normales, con las APIs que tenemos disponibles desde JS, la mayoría de desarrolladores de Sistemas Operativos no nos dejan acceder a algunas características del dispositivo como la cámara, el acelerómetro, el uso de batería o el almacenamiento en el dispositivo.

Lo que proporciona Cordova es una capa intermedia que a través de sus propias APIs , que se comunican con el dispositivo y nos hacen accesibles esas tecnologías. La aplicación queda finalmente empaquetada como una app nativa, un APK por ejemplo en el caso de Android. Y Cordova se encarga de traducir nuestras llamadas hechas a los plugins de su sistema a llamadas en código nativo que entiende el sistema operativo.

Cordova presenta una implementación única para todas las plataformas. Es decir, nosotros en principio desarrollaremos de una sola manera y la librería se encarga de traducir a los distintos sistemas. Por tanto se puede decir que prácticamente hacemos un sólo desarrollo para N sistemas.

Dentro de lo que es Codova, también existe un ecosistema de plugins comunitarios para la implementación de funcionalidades concretas como la inclusión de anuncios o la conexión con servicios de redes sociales.

Qué no hace Cordova

Aquí viene otra de las cofusiones que son comunes. Cordova no se encarga de la UI de tu app. No gestiona la presentación, ni las transiciones entre pantallas ni nada similar.

Cuando la gente se queja de las para mi mal llamadas webapps, no es consciente de que en realidad es la UI lo que no está bien solucionado y no la tecnología que hay detrás. Si la experiencia del usuario es lenta, las transiciones pobres o el aspecto demasiado “de librería” se debe a la implementeación que se ha hecho para la capa de presentación.

Para eso existen librerías concretas o la posibilidad de desarrollar una presentación propia como lo harías para web.

Cordova tampoco se encuentra en sí misma asociada a ningún framework JS, por tanto tampoco tiene nada que ver con cómo gestiones dentro de tu aplicación la interacción con rutas, vistas, controladores o cualquier otra capa de código.

Sin embargo, aunque están fuertemente acopladas a ciertos frameworks, hay soluciones maduras que ofrecen un buen punto de partida para la creación de apps al tener integrado el uso de Cordova, un framework de UI propio y la implementación de un framework como Angular o Backbone para la gestión a nivel de código. Este sería el caso de InonicMobile Angular UI ( que no incluye la integración con Cordova), Chocolate Chip UI (que sólo gestiona UI) u Onsen (también facil de integrar con Cordova.

Existen también soluciones privativas para hacer tanto lo que hace Cordova como lo de estos frameworks de UI, pero quien me conozca no se sorprenderá de ver que no las voy a explicar ni promocionar.

Conclusión

Se trataba sólo de tratar de aclarar algunos malentendidos habituales.  Si el tema interesa y hay dudas, encantado de continuarlo en otras entradas y poder juntos y resolviendo dudas e investigando otras cosas nuevas.

Pablo Bernardo
Pablo Bernardo

Hola, soy Pablo. Soy programador frontend, padre, estudiante de zen y otras cosas. Para saber más, lee algunas entradas.