Diseñando un app para móviles: La publicación


Después montones de pruebas, ya publiqué mi app. Por ahora está en Windows Phone Store y en Google Play. Muy pronto en iOS.

Es un catálogo de comics publicados localmente, que les permitirá resolver el problema principal que como coleccionista he tenido que sufrir, ir al puesto de revistas y no saber cual cómic comprar o si es que ya salió el siguiente.

El app es muy simple en el uso, pero detrás tiene un par de cosas interesantes: Sincronización automática de datos y un código para 3 plataformas.

El código único está hecho en Cordova como les dije en un post anterior. Ionic Framework para ser exactos. Las ventajas que trabajar con esta herramienta son innumerables, pero me concentraré en decir que el ahorro de tiempo en programación es de lujo. El punto en contra podría ser que pierdes ciertas funciones nativas, pero me he dado cuenta que el real problema es otro: Interfase de Usuario nativa. Con Ionic, la interfase de usuario es HTML5 donde no hay Panoramas ni Pivots que hay en WP8, por lo demás, hay alternativas que puedes salvar. Entonces, a fin de que sus usuarios no se quejen, aprendan algo de CSS y de SASS y si pueden contraten a un buen diseñador. Si es que no tienen esa virtud de diseñar pantallas bonitas, hagan como yo, manténganlo todo simple. Igual les prometo que contrataré un diseñador para mejorar la presentación.

La sincronización automática se logró mediante la plataforma CouchDB. Para ser exactos, los datos están en un servidor Cloudant y en el cliente utilizo PouchDB, de tal forma que todos los datos son locales para la aplicación. Si es que se publican colecciones o comics nuevos, la data se sincroniza (sólo las diferencias) y desde ese punto todo es local. Ahora bien, existe un modo de sincronización que permite que los datos sean replicados en tiempo real, como resultado de las pruebas he llegado a la conclusión que sólo tiene que ser activado en algunas situaciones limitadas, por dos razones: Costo del tráfico y batería.

CouchDB es super inteligente para sincronizar, y si le dices que quieres hacer una sync “live” se va a encargar de tener los datos en el móvil super actualizados, y con PouchDB eso significa que se mantenga una conexión abierta con el Servidor la mayor parte del tiempo. Esto consume tráfico, batería y todo lo que puedas imaginar. Además, Cloudant te cobra por HTTP Request, lo que significaba, para el caso de mi app, mandar una transacción “pesada” cada 25 segundos por cada móvil. Haciendo las matemáticas, es mucha plata considerando que las publicaciones de comics se hacen por lo general cada semana. En JavaScript hay un método maravilloso llamado SetTimeOut que permite establecer un método donde el app sincroniza todo al iniciar y luego decirle que vuelva a sincronizar a los n minutos. De esa manera puedo hacer que las apps sólo sincronizen cuando es realmente necesario. Como por ahora no se cuantos usuarios pueda tener, mi estrategia de sincronizacion es cada 10 minutos si es que no se ven cambios y cada 100 minutos si es que se obtuvieron cambios, es decir, como los cambios los publico una sola vez, si los descargas, ya no volverás a ver otro lote de cambios hasta dentro de un largo tiempo, así que 100 minutos es el largo tiempo por ahora. Esto debe soportar las nuevas funciones que pienso introducir en el siguiente release.

Entre los principales problemas que tuve es el hecho de trabajar en un código único es posible mientras no tengamos que ver cosas muy pegadas al móvil. Por ejemplo, hay plugins para manejar beeps o para el manejo de estadísticas que sólo funcionan en el móvil haciendo las tareas de debug  bastante tediosas. Así que lo ideal es empezar el proyecto sabiendo que plugins se van a utilizar, para lo cual hay que certificarlos antes y probar que funcionan tal como deben. Por ejemplo, yo les comenté en un Post anterior que utilizaría Angulartics para el manejo de estadísticas, pues resulta que no trabaja tan fácil como lo pensé, y no es que el código sea complicado, simplemente tiene sus lios y listo. Gastar tiempo en investigar esos errores dentro del proyecto es una pesadilla, así que hagan su propio catálogo de plugins que ustedes hayan certificado y tendrán la ventaja.

Por el lado de los datos, PouchDB (o CouchDB como quieran) es un estándar que lo único que tiene fuerte es la sincronización y el manejo de los formatos de base de datos. Quiere decir que consultar los datos puede llegar a ser algo especial. Felizmente PouchDB es manejado por un tipo muy buena onda que se llama Nolan Lawson que está creando librerias y herramientas muy potentes que ayudan a bajar la complejidad, pero lo que si es un hecho es que NO ES SQL, así que hay que meterle algo de cabeza al inicio, como por ejemplo, crear llaves primarias con fecha y datos de la clase padre (plop!) y demás trucos que están todos documentados que en sistemas SQL ni te imaginas. Igual todo vale la pena porque funciona como un reloj suizo.

Un punto importante es el tema de los formatos de base de datos. Hasta ahora, SQLite ha sido la opción única para manejar datos en el móvil y resulta que es un estándar que ya fue. WebSQL definía el uso de archivos sql en aplicaciones HTML5 y actualmente ha sido reemplazado por IndexedDB que es como un super diccionario. El problema aquí es que SQLite sigue siendo muy veloz, y algunas plataformas ya han dejado de lado SQLite, como por ejemplo FirefoxOS y parece que Windows Phone 8.1 también. En fin, para evitar tener que recodificar ese soporte, PouchDB nos facilita la vida haciendo esa gestión por nosotros, si el sistema soporta WebSQL, lo usa y si sólo soporta IndexedDB, cambia todo tras bambalinas, genial. Tiene otros soportes, pero con estos dos es suficiente. Para los curiosos, PouchDB también trabaja en la PC para lo cual utiliza LevelDB que es otro rollo en base de datos para aplicaciones Web.

En conclusión, ya pueden probar mi App que principalmente les permitirá ver que un app puede tener datos actualizados de forma transparente y que comparte un código para todas sus plataformas, así no sean coleccionistas de comics.

Google Play Store:

Get it on Google Play

Windows Phone Store:

154x40_WP_Store_blk

 

Muy pronto para iOS:

 

NOTA FINAL: Disculpen los banners, pero también son parte del experimento

 




    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s



%d bloggers like this: