Llegamos a ustedes gracias a:



Reportajes y análisis

Desarrollo móvil

Microsoft Azure persigue a Amazon y Google

MBaaS Azure, AWS, Firebase Google

[10/03/2015] El año pasado revisé cinco plataformas MBaaS (mobile back end as a service): FeedHenry, Kinvey, Parse, AnyPresence, y Appcelerator. Brevemente también examiné las plataformas MBaaS asociadas con Pivotal CF e IBM Bluemix en mi reseña de aquellas ofertas PaaS (plataforma como servicio). Todas esas plataformas MBaaS corren en la misma clase de nube pública y algunas pueden ser instaladas on-premise o en configuraciones híbridas.

Para no quedarse atrás, los tres principales servicios de nube pública han desarrollado o comprado plataformas MBaaS para sí mismos. Amazon desarrolló el Mobile SDK con múltiples servicios móviles específicos, junto con formas de unir apps móviles a sus servicios principales como DynamobDB y S3. El pasado octubre, Google adquirió Firebase, el cual ofrece una base de datos segura, en tiempo real, hospedada en la nube, NoSQL con una API RES así como también un servicio de logueo. Microsoft Azure Mobile Services también incluye componentes de servicio no Microsoft como Web API Node.js, .Net, Active Directory, y los servicios de nube SQL Server que se pueda esperar.

Amazon Mobile SDK

El AWS Mobile SDK incluye Cognito, Mobile Analytics, y notificaciones push SNS. Amazon Cognito ayuda a almacenar, gestionar y sincronizar de manera segura identidades y datos en múltiples plataformas y aplicaciones. Puede que también necesite usar DynamoDB, S3, y otros servicios de Amazon con su app móvil; puede usar Cognito para gestionar aquellas credenciales también. Las apps incorporadas con Cognito funcionan fuera de línea sincronizando el Congnito con el almacenamiento local.

Los datos de perfil de usuario de Cognito están organizados en conjuntos de datos de hasta 1MB de datos en forma de pares de valor clave. Las operaciones de lectura y escritura ejecutadas en un conjunto de datos afectan solo el almacenamiento local hasta que se invoque el método de sincronización. Amazon ofrece estado de juego de usuario como caso de uso para juegos de datos de Cognito. Si se necesita almacenar y recuperar datos no relacionados al usuario, entonces Amazon DynamoDB, S3, MongoDB (ejecutado en instancia Amazon EC2, por ejemplo), o una base de datos relacional como MySQL o PostgreSQL (ambas disponibles como servicios de base de datos gestionadas en Amazon RDS) podrían ser las mejores opciones. Cognito podría ayudar a almacenar las credenciales por usuario para esos almacenes de datos.

Amazon actualmente produce Mobile SDKs para Android e iOS, así como una versión previa para desarrollador para Unity. Un Mobile SDK para Samarin está disponible en AWS Labs.

Amazon Mobile Analytics es un servicio que permite recolectar y analizar sus datos de uso de aplicación. Además, para ver su propio sumario, se puede ajustar la exportación automática de sus datos de uso hacia Amazon S3 para operar con otras herramientas de análisis de datos, desde Amazon Redshift o la que prefiera. Amazon Mobile Analytics está diseñada para procesar y exportar sus datos de eventos de aplicación en el término de una hora.

Amazon SNS puede empujar notificaciones hacia dispositivos Apple, Google, Fire OS, y Windows, así como Android en China (con Baidu Cloud Push).

Figura 1. La demo de Amazon Congnito Sync para iOS muestra cómo gestionar y sincronizar de manera segura sus datos de app móvil y crear identidades únicas a través de proveedores de login, incluyendo Facebook, Google y login con Amazon. Note el uso de CocoaPods, un gestor de dependencia basado en Ruby para proyectos Xcode, para mantener el código de librería del framework de Amazon.
MBaaS Azure, AWS, Firebase Google

Descargué, instalé y probé el AWS Mobile y Cognito SDKs, así como muestras para iOS y Android, y también configuré el servicio Cognito e Identity Pool en Amazon. Todo eso tomó más tiempo del que debería, ya que encontré la documentación enredada y confusa, sin embargo en la relectura descubrí que los documentos son correctos y (escasamente) lo suficientemente completos para usarse. Cometí un error tras otro, afortunadamente ninguno de ellos fatal. El proceso me recordó el ensamblaje de un mueble para armar.

Finalmente pude construir (Figura 1) y ejecutar las muestras, luego llené mis credenciales en el lugar correcto (para iOS, eso es Constants.h) y las ejecuté sin errores (figura 2). Comencé a trabajar en esto un jueves por la tarde, pasé la mitad del viernes en ello, me tomé el fin de semana libre, y finalmente tuve todo funcionando el lunes por la mañana. Me tomaría menos de dos horas ahora que he aprendido cómo funciona y he eliminado todos los errores de mi sistema.

Aquí vemos la demo de Cognigo Sync para iOS corriendo en un simulador de iPhone 6 bajo el control de Xcode en una iMac. Llegar así de lejos prueba que las credenciales de Cognito en la app son correctas; el próximo paso sería agregar credenciales de login para Facebook, Google y login de Amazon, de modo que el usuario pueda autenticar una identidad.
MBaaS Azure, AWS, Firebase Google

Me sorprendí de tener que actualizar mis herramientas iOS y Android durante este proceso, pero me di cuenta de que había estado usando constructores móviles basados en la nube durante el mes anterior más o menos. Asegúrese de que sus herramientas están al día antes de comenzar a trabajar con los SDK móviles, si quiere evitar las interrupciones que podrían causar las actualizaciones durante el flujo de trabajo.

Aunque el AWS Mobile SDK hace lo que se supone debe hacer, desarrollar con el mismo no es para novatos, programadores de JavaScript, o para los débiles de corazón. Hay otros SDKs de AWS -para Java, .Net. PHP, Node.js, y JavaScript para navegadores. El Cognito Sync Manager SDK para JavaScript, actualmente en versión previa de desarrollador, se combina con el AWS JavaScript SDK para el navegador, para ofrecer un juego razonable de APIs para aplicaciones Web móviles y móviles híbridas, pero aún no ha sido adaptado para ningún framework de JavaScript y no es la API de JavaScript más sencilla del mundo, como puede ver en la entrada de blog que discute cómo usarla.

El AWS Mobile SDK podría ser una buena opción para desarrolladores de apps nativas, quienes ya tienen un compromiso con los servicios de Amazon. Si desea un MBaaS fácil de aprender y fácil de usar, busque en otra parte.

Google Firebase

Google Firebase es una base de datos NoSQL en tiempo real y hospedada en la nube, con una API REST optimizada para baja latencia. Firebase también tiene un servicio de loguin con varios tipos de autenticación incorporada. Firebase carece de algunas funciones que podría esperar en un MBaaS de nivel empresarial, como notificaciones push e integración de back-end con sistemas de grabación, pero soporta consultas de ubicación con su librería GeoFire.

Por seguridad, Firebase requiere encriptación SSL con certificados de 2.048-bits para toda la transferencia de datos, ofrece control de acceso granular y soporta esquemas de autenticación personalizados. Todos los datos almacenados en Firebase son replicados y respaldados a múltiples ubicaciones seguras, y Firebase gestiona millones de conexiones concurrentes y miles de millones de operaciones.

La app Office Mover es un programa colaborativo de dibujo construido alrededor de Firebase.
MBaaS Azure, AWS, Firebase Google

Lamentablemente, Firebase actualmente solo corre en su propia nube pública y no ofrece una alternativa de ubicaciones de almacenamiento. No veo que se use Firebase para aplicaciones que necesiten cumplir con estándares HIPAA, PCI-DSS, o FIP, o para datos que requieran ser almacenados dentro de los EE. UU.

Firebase tiene librerías para todas las principales plataformas de cliente Web y móvil, y enlaces para los más populares frameworks, más una API REST para otras plataformas no soportadas. Tiene simpáticas guías de inicio rápido para iOS y Android, y se integra con AngularJS, Ember.js, React, y Backbone.js a través de librerías soportadas, todo lo cual se ve muy bien. Se integra con Polymer a través de librerías de terceros.

Figura 4: El código Swift para un app iOS respaldada por Firebase es fácil de entender.
MBaaS Azure, AWS, Firebase Google

Firebase se puede integrar con servidores Ruby, Node.js, Python, Java, Cloure, PHP, y Perl a través de librerías de terceros o sus API REST. Tendría que utilizar su propio servidor (o Google App Engine) para cualquier integración de back end que requiera, porque Firebase por sí mismo no ofrece ninguna integración de base de datos o aplicaciones.

Firebase ofrece hosting limitado (1GB a 10GB, dependiendo de su plan), lo cual podría ser todo lo que necesite para, digamos, una app ReactJS. El hosting es para archivos estáticos e incluye automáticamente encriptación SSL y distribución geográfica CDN de los sitios de almacenamiento. Usted gestiona su hosting de Firebase con herramientas de gestión de sitio de líneas de comando que se instalan con npm, el gestor de paquetes para Node.js.

Figura 5. El código Java para una app Android respaldada por Firebase, es casi tan fácil de entender como el código Swift para una app iOS Firebase.
MBaaS Azure, AWS, Firebase Google

Las apps basadas en Firebase funcionan fuera de línea, así como el almacenamiento local actúa como caché para el almacenamiento en la nube. Puede usar APIs Firebase normalmente mientras el dispositivo está fuera de línea; una vez que la conectividad es reestablecida, la app recibirá el conjunto apropiado de eventos de modo que el cliente "se ponga al día con el estado actual del servidor, sin que usted tenga que escribir cualquier código personalizado.

Revisé toda la documentación y tutoriales de Firebase en un par de horas. Desde ahí, descargué la muestra Office Mover 5000 (figura 3); vi el código para iOS (figura 4), Android (figura 5); y para Web (figura 6); e intenté construir los proyectos para iOS y Android. Pude construir exitosamente el proyecto de Android basado en Gradle con Android Studio, después de actualizar algunas de mis herramientas y frameworks Android. No pude construir el proyecto para iOS basado en Swift, ya que algunas de las clases UiKit de Apple tienen miembros apuntadores; sin embargo, los cambios necesarios parecen pequeños.

MBaaS Azure, AWS, Firebase Google
El código JavaScript plano para una app Web Firebase es también sencillo.

Para lo que hace -implementar almacenamiento no SQL de baja latencia y servicios de login sencillos- el Firebase es muy muy bueno. Sin embargo, carece de muchos de los servicios y opciones de despliegue que comúnmente se esperan en las plataformas empresariales MBaaS. Por otra parte, se puede usar el Google App Engine con el Google Cloud Datastore como base de datos y construir una interfaz entre el servidor y la app como una API REST usando el framework Google Cloud Endpoints.

Microsoft Azure Mobile Services

Cuando se introdujo por primera vez Windows Azure, básicamente todo era Microsoft todo el tiempo. Todas las herramientas corrían en Visual Studio y todos los servicios salían de servidores Windows, aunque con suficientes diferencias para hacer que usar las APIs sea un reto. En aquellos primeros días podía tomar tanto como media hora provisionar un servicio; ahora normalmente toma menos de un minuto.

El rebautizado Microsoft Azure aún está lleno de servicios Microsoft, pero ya no está exclusivamente orientado al sistema Windows. ¿Desea una VM CoreOS? No hay problema. ¿Necesita una base de datos MongoDB o Cloudant NoSQL? La tiene. Aunque la integración de herramientas de Visual Studio con Microsoft Azure es mejor que nunca y soporta Visual Studio Online, hice mi evaluación actual sobre Mac OS X Yosemite usando Chrome para un navegador, así como se puede ver en las capturas de pantalla.

Los Servicios Móviles de Microsoft Azure ofrecen un MBaaS completo, hospedado en la nube pública de Azure, con centros de datos en 19 regiones alrededor del mundo. Azure permite nubes híbridas a través de conexiones híbridas entre Azure y su centro de datos -para conectar el sitio web Azure o servicios móviles a un servidor SQL on-premises, por ejemplo, o para configurar un clúster de computación HPC. Azure soporta autenticación multifactor y ha sido usado para muchas aplicaciones en industrias reguladas (como cuidado de la salud y finanzas) y en regiones como la Unión Europea.

Figura 7. Se puede manejar casi todo en el servicio móvil de Azure desde la línea de comando, inclusive sobre una caja Max o Linux. También puede hacer un script de servicio móvil de Azure usando PowerShell.
MBaaS Azure, AWS, Firebase Google

Los Servicios Móviles de Microsoft Azure soportan clientes iOS, Android, Windows Phone, Windows Store, Xamarin iOS, Xamarin Android, HTML, PhoneGap, Sencha y Appcelerator. En el back-end, puede hospedar una API Web .net o Node.js con monitoreo y gestión 24/7. No importa qué tecnologías de cliente y servidor elija, puede usar single-sign-on con Active Directory, Facebook, Twitter y Google; enviar notificaciones push a usuarios individuales y segmentos de audiencia dinámicos; almacenar datos en SQL, Table Storage, y Mongo DB; acceder a sistems on-premises, Office 365, y SharePoint; y usar sincronización basada en la nube para construir apps que funcionen fuera de línea.

Azure y Azure Mobile pueden ser gestionados desde una línea de comando (figura 7) o desde la consola Web. Crear un Servicio Móvil Azure también genera una base de datos Azure SQL Server y un hub móvil para notificaciones push. Aunque se puede usar una base de datos actual si desea, debería estar en la misma región como el otro servicio para minimizar la latencia del interservicio.

Una vez que se ha creado un servicio móvil, Azure ofrece crear una app de listas de tareas para el principiante (figura 8). Uno de los pasos en la creación de la app es crear la tabla de la base de datos SQL para ella, la cual puede ver desde su propia computadora una vez que autorice su dirección IP. Azure lo hace fácil, diciéndole la dirección IP que está usando actualmente y preguntándole si desea autorizarla para administración. Note que estoy navegando la base de datos (figura 9) desde una aplicación Java de código abierto en una Mac, no hay nada de SQL Server Tools o Visual Studio en una PC.

Figura 8. Puede gestionar una base de datos Azure SQL desde cualquier sistema autorizado con un driver y un cliente SQL Server. Este cliente fue escrito en Java y usa drivers JDBC.
MBaaS Azure, AWS, Firebase Google

Algunas personas reaccionarán mal a la idea de usar una base de datos SQL como back-end móvil en lugar de una base de datos No SQL. Honestamente, ambas trabajan bien, y este diseño de datos SQL permite el seguimiento de versión limpia e impresiones de tiempo, lo cual ayuda a la resolución de conflictos.

Miré las apps de principiante generadas en iOS en Swift, las cuales tuvieron un error de compilación, y en Android, las cuales construí una vez que cambié la versión objetivo a una SDK I, que tenía realmente instalada. Se puede añadir fácilmente almacenamiento de back-end a una app existente (figura 9) usando el código suministrado como plantilla.

Figura 9. El personal de los servicios móviles de Azure ha hecho sencillo añadir soporte de back-end a una app existente.
MBaaS Azure, AWS, Firebase Google

Puede monitorear su servicio móvil, su servidor SQL, y sus terminales (figura 10), luego configurar su servicio móvil para autoescalar dentro de los límites de su plan. Si lo desea, puede añadir una librería beta a su app móvil para ayudar a implementar operaciones y sincronizaciones fuera de línea entre la nube y el dispositivo. Una docena de líneas de código es todo lo que necesita, aunque requerirá más código si desea extender la sincronización para presentar un formulario de resolución de conflicto al usuario.

Francamente, llegué a la parte de Azure de esta revisión esperando ver costosa basura dejada de la era Ballmer. Quedé asombrado por la puesta en práctica de los servicios móviles y del respeto con el que el equipo humano de Azure Mobile Services ha satisfecho las necesidades de los desarrolladores de apps, sin imponerse en la elección de la solución. Me gustaría que Microsoft hubiera ido un paso más allá desarrollando clientes JavaScript y agregando librerías para AngularJS y algún otro framework popular, pero lo que está hecho es muy, muy bueno. Bravo.

Figura 10. Se puede monitorear todo desde el servicio móvil Azure, e inclusive autoescalar dentro de los límites de la capa de su servicio.
MBaaS Azure, AWS, Firebase Google
Los mejores MBaaS

Como puede ver en las puntuaciones, me gusta Microsoft Azure Mobile Services tanto que su excelente puntuación general lo coloca en la categoría Elección del Editor, limitando con AnyPresence como mi MBaaS favorito. Sin embargo, si su empresa necesita ofrecer SDKs a socios de negocios, aún recomendaría AnyPresence.

MBaaS Azure, AWS, Firebase Google

A pesar que de Firebase me gusta el rendimiento de la baja latencia, la API sencilla y el fino soporte de frameworks de JavaScript, no cubre muchas de las cosas básicas que espero de un back-end móvil, especialmente integraciones empresariales. Mientras que Amazon Cognito y Amazon Mobile Services hacen casi todo lo que quiero de un back-end móvil, no son mi idea de algo fácil de aprender o fácil de usar.

Martin Heller, InfoWorld (EE.UU.)