Urban Airship Logo

Dirigible urbano es un popular servicio de mensajería y notificaciones.  En la primera parte de este artículo veremos cómo configurar las notificaciones push de Urban Airship. En la parte 2 del post utilizaremos estas notificaciones para desencadenar réplicas en Couchbase Móvil.

Lo que necesitas

Puedes utilizar Urban Airship (UA) de forma gratuita. (Consulta la página web de UA para conocer los precios actuales.) Eso sí, tienes que registrar una cuenta.

  • Relato de un dirigible urbano
  • Una cuenta Firebase (requiere una cuenta de inicio de sesión de Google)
  • Android Studio (o Xcode)

Parte 1 - Configuración del dirigible urbano

Abre un proyecto Android o iOS existente en tu IDE (o crea uno nuevo). Aquí voy a ilustrar el uso de Android.

Inicie sesión en su cuenta de UA. Vaya a la página Nueva aplicación. Escriba el nombre de su aplicación. Seleccione las plataformas que desea utilizar. (En este ejemplo elegiremos Android e iOS.) Al pulsar "Guardar" accederás a la guía de inicio rápido. (Si usted ya ha pasado por el inicio rápido y necesita un repaso de la configuración, puede encontrar los pasos para Android aquí y para iOS aquí.)

Urban Airship New Application Dialog

UA quickstart

Aquí se te ofrece una pestaña para cada plataforma seleccionada. Como ya hemos dicho, esta vez nos centraremos en construir para Android.

Sigue los pasos de inicio rápido de Urban Airship. Tengo algunos consejos para los problemas que encontré.

Pasos 1 y 2 del inicio rápido de Urban Airship

La guía de UA hace referencia al script build.gradle del proyecto, pero luego muestra la modificación del script build.gradle del módulo. Añadí el repositorio UA al script gradle de mi proyecto, y la dependencia UA al script gradle del módulo. Eso funcionó bien.

Busca el applicationID en el script gradle del módulo.

Paso 5 del inicio rápido de Urban Airship

Para crear su propia clase de aplicación, haga clic con el botón derecho del ratón en el área de aplicación del panel de navegación del proyecto y seleccione Nuevo > Clase Java. En la ventana emergente, establece el nombre de la clase. A continuación, para la Superclase introduce android.app.Application.

Creating an Application subclass

No olvide actualizar su archivo de manifiesto. Puede utilizar el nombre completo de su clase, o la forma abreviada que UA muestra. La forma completa se parece a esto:

Paso 6 del inicio rápido de Urban Airship

UA utiliza Firebase Cloud Messaging (FCM). El paso seis tiene un enlace a más documentación de UA. Esta nueva página tiene instrucciones detalladas sobre cómo crear una clave API para tu app.

Las instrucciones de esa página bajo el título "Configurar el servicio FCM/GCM con Urban Airship" están un poco desfasadas. Encontrarás el área para introducir la clave API y el paquete al final de la guía de inicio rápido, en lugar de donde se indica en la documentación.

En un lugar, los documentos de la UA hacen referencia al "Número de proyecto de la API de Google". Esto es lo que FCM llama su ID de remitente.

Pruebas

El quickstart termina con un área de pruebas, sin muchas instrucciones. Si echas un vistazo al código incluido en tu subclase Application, verás que está habilitando las notificaciones de usuario. Para probar, construye tu aplicación e instálala en un emulador o dispositivo. (Yo probé ambos y funcionaron bien).

Urban Airship Test Panel

Introduce algo en el campo de texto y haz clic en "Enviar prueba". Debería aparecer un icono en el área de notificación de Android. Curiosamente, esto no incluye el texto introducido en el área de prueba.

Para la solución de problemas UA te dirige a un oscuro enlace "Consola de errores" en la esquina inferior derecha de la página de documentación. Desgraciadamente, el enlace me devolvió a la guía de inicio rápido.

Conclusión de la 1ª parte

Como has visto en los pasos anteriores, configurar Urban Airship fue bastante rápido. El inicio rápido muestra cómo enviar una notificación de alerta. Para activar la sincronización de datos en un cliente Couchbase Lite, tendremos que enviar una alerta silenciosa en su lugar, la parte 2 de este post cubrirá eso.

Parte 2 - Activación de la sincronización de datos desde la nube

En la parte 1 de este post se configura Urban Airship, en la parte 2 voy a mostrar una aplicación Android de ejemplo creada con Couchbase Lite que utiliza una notificación push de Urban Airship para activar la sincronización de datos desde la nube a un dispositivo móvil. Aquí "la nube" será un Pasarela de sincronización en una configuración de prueba. (Couchbase Lite y Sync Gateway son parte de la pila de Couchbase Mobile. Puedes leer sobre Couchbase Mobile aquí.)

Fondo

Couchbase Mobile sincroniza los datos usando réplicas unidireccionales. Puedes configurar las réplicas para que se ejecuten y finalicen inmediatamente una vez que los datos locales estén actualizados ("one-shot"), o para escuchar indefinidamente nuevos cambios ("continuous").

Hay algunas razones por las que podría querer utilizar un servicio como Urban Airship para activar la sincronización en lugar de configurar una replicación continua. Por ejemplo, una replicación continua "pull" (que recupera datos de la nube) necesita mantener una conexión de red abierta. Una conexión abierta causará necesariamente un cierto consumo de la batería del dispositivo, incluso mientras esté inactiva. Lo ideal sería que una aplicación sólo abriera una conexión cuando hubiera cambios que transferir.

Más allá de eso, los servicios de notificaciones push como Urban Airship suelen tener una serie de funciones avanzadas para dirigirse a grupos de dispositivos. UA puede darte una gran flexibilidad a la hora de gestionar cuándo se producen las operaciones. Además, si tu aplicación ya utiliza un servicio push, eso ya requiere su propia conexión de red abierta. Tiene sentido usarlo para activar Couchbase Lite en lugar de duplicar la red.

Este ejemplo mostrará cómo integrar Urban Airship. Voy a caminar a través de todas las piezas necesarias, para que pueda construir una aplicación totalmente funcional.

La aplicación

He aquí un vistazo a la aplicación en acción. La parte superior de la imagen muestra la aplicación en funcionamiento. La parte inferior muestra una notificación push enviada desde la línea de comandos. Cuando la aplicación recibe la notificación push, muestra un indicador de progreso, inicia una replicación pull de una sola vez y, a continuación, muestra los cambios recibidos en el documento en una vista de texto.

Para entender este ejemplo, echaremos un vistazo a cuatro clases, algunos de los "pegamentos" que las unen, y mostraremos cómo probar los resultados.

Clases requeridas por Urban Airship

Para utilizar Urban Airship (UA), necesitamos implementar dos clases, una subclase de Autopilot, y una subclase de AirshipReceiver.

Piloto automático

UA tiene que ser inicializado antes de su uso. Puede hacerlo de dos formas, o bien llamando a despegue de la aplicación onCreate o creando una subclase de Autopilot. Elegí hacer esto último. Como veremos, UA tiene una forma interesante de utilizar automáticamente nuestra subclase.

La clase es simple. No quiero mostrar nada en la barra de notificaciones. Yo uso esta clase para desactivar las notificaciones de usuario, y eso es todo.

Aquí está el listado completo de CBAutoPilot.java.

Para utilizar esta clase, UA emplea una técnica exclusiva de Android. Usted indica qué clase utilizar con una entrada en su archivo de manifiesto de Android. En mi caso, la entrada tiene este aspecto (colocada dentro del archivo aplicación sección):

Aquí es donde ocurre un poco de la magia de Android. UA incluye una clase de Proveedor de Contenido para automatizar la iniciación. Se garantiza que los Proveedores de Contenido se instancian antes de que la aplicación onCreate es llamado. UA utiliza esto para incluir código para leer esta entrada de metadatos, instanciar la subclase y llamar al método onAirshipReady método.

AirshipReceiver

Con UA inicializado y listo para funcionar, necesitamos proporcionar los ganchos para capturar y procesar las notificaciones. Para ello, implementar una subclase de AirshipReceiver. De nuevo, la clase es sencilla.

Aquí está el listado completo de CBAirshipReceiver.java.

Cuando lleguemos a probar la aplicación, veremos cómo UA le permite establecer el texto de alerta. He utilizado que aquí proporcionar algunas operaciones remotas diferentes. Una alerta puede iniciar y detener las réplicas. También incluí la capacidad, mediante el envío de "reset", para eliminar la base de datos. Hice eso porque una vez que se replican los datos, es persistente en el dispositivo. Apagar la aplicación no reinicia la base de datos local. En lugar de tener que añadir siempre nuevos documentos a través de Sync Gateway para mostrar que la replicación funciona, he añadido la posibilidad de borrar la base de datos del dispositivo y empezar de nuevo.

Te darás cuenta de algunos otros métodos anulados arriba. Todos esos métodos están declarados abstractos en la clase AirshipReceiver, así que tenemos que incluir al menos una implementación mínima. Resulta, sin embargo, que necesitamos conocer el ID del canal del dispositivo para enviarle un mensaje. Este ID de canal cambia a menudo. En un futuro post, mostraré cómo registro el ID para que una aplicación del lado del servidor pueda enviar al dispositivo. Por ahora, es útil registrar el ID para que podamos extraerlo y utilizarlo en las pruebas.

Las clases de aplicación

Los ganchos anteriores ponen en marcha UA, atrapan notificaciones y desencadenan acciones basadas en su contenido. Ahora echemos un vistazo a la aplicación en sí.

La aplicación consiste en una actividad configurada para que podamos ver el contenido de los documentos a medida que se extraen. La otra clase envuelve algunas de las funcionalidades de Couchbase Lite en un helper.

Actividad principal

En la actividad principal, quiero mostrar una barra de progreso mientras se producen las réplicas y, a continuación, mostrar el conjunto de documentos enviados.

Aquí está el listado completo de MainActivity.java

El núcleo del código consiste en dos escuchadores de cambios, uno para la base de datos y otro para las réplicas. Cada interfaz de escucha define un único método cambiado.

El receptor de cambios de documentos nos permite seguir las actualizaciones reales de los documentos. Una réplica puede cambiar más de un documento a la vez. El evento de cambio devuelve una lista de IDs de documentos. Haciendo un bucle sobre los IDs de los documentos, recuperamos cada documento directamente, traducimos el contenido JSON a una cadena, y lo añadimos al texto a mostrar. Los escuchadores de cambios se ejecutan en un subproceso en segundo plano. Para terminar, tenemos que manipular los elementos de la interfaz de usuario en el hilo principal. Esto se hace fácilmente con la función runOnUiThread de la Actividad.

El otro listener nos permite mostrar un spinner de ocupado-espera (barra de progreso indefinida) dependiendo del estado de Replicación. Puede leer más sobre la monitorización del estado de replicación aquí.

La clase auxiliar de base de datos

A menudo envuelvo funciones de base de datos en una clase helper. Como sólo necesitamos una instancia del helper, utilizo un patrón singleton. Al igual que UA, quiero que el helper esté disponible antes de que se inicie la aplicación principal. Utilizo la misma técnica de poner el código en un Content Provider.

Aquí está el listado completo de CBLHelper.java.

Puedes ver que esta clase sólo forma una fina envoltura. Retenemos una instancia de la clase durante onCreate que se convierte en nuestro singleton. Algunas otras configuraciones básicas ocurren, como habilitar el registro y crear un gestor de base de datos. Escribí un inicializar utilizado para abrir la base de datos, preparar la replicación pull y adjuntar los dos escuchadores de cambios. Recuerde que esto es llamado desde nuestra clase Activity. (Nota: Puedes tener más de un receptor de cambios para cada tipo. Couchbase mantiene una lista de todos los escuchadores añadidos, no sólo del último). Los otros métodos de la base de datos sólo proporcionan atajos simples.

Un proveedor de contenidos tiene varios métodos obligatorios que implementar. Tenemos que proporcionar stubs para ellos, que se ven en los últimos cinco métodos.

El manifiesto de Android

Por último, sólo para mostrar cómo esto se une y las diversas partes se exponen, he incluido el archivo de manifiesto de Android para el proyecto.

Aquí está el listado completo de AndroidManifest.xml.

La biblioteca UA viene con su propio archivo de manifiesto. El sistema de compilación de Android integra todos los diferentes archivos de manifiesto para crear el archivo final. El archivo de manifiesto de la biblioteca UA es donde encontrarás las entradas para el proveedor de contenido que arranca la biblioteca.

Pasarela de sincronización

Para probar la aplicación, utilicé Sync Gateway con la base de datos integrada Walrus. Walrus es una base de datos en memoria normalmente se utiliza sólo para pruebas. Esto ahorra la molestia de configurar una instancia back-end de Couchbase Server.

Aquí está la lista completa del archivo de configuración de Sync Gateway.

Esto le dice a Sync Gateway para escuchar sólo en el localhost aceptar cualquier petición de origen cruzado, y habilita el GUEST especial con acceso a todos los canales. Es una muy buena configuración de propósito general para empezar a asegurarse de que todo está funcionando.

Usted puede haber notado que usamos 10.0.2.2 como la dirección IP para Sync Gateway en la aplicación Android. El emulador estándar que viene con Android Studio asigna esto automáticamente a la máquina de alojamiento de localhost. Si utilizas un emulador diferente (Genymotion es otro de los más populares), asegúrate de buscar qué dirección IP utilizar, ya que difieren.

Si desea obtener más información acerca de la configuración de Sync Gateway en su equipo de desarrollo, o cómo trabajar con él desde la línea de comandos, eche un vistazo a esto serie de blogs.

Pruebas

Para probarlo todo y grabar la animación que se muestra al principio del blog, ejecuto tanto el emulador de Android como Sync Gateway en una misma máquina. A continuación, envío notificaciones push a UA a través de su API REST.

Para preparar algo interesante, primero añado un documento a Sync Gateway. He aquí un comando shell para hacerlo.

(Más información aquí).

Con un nuevo documento en la base de datos de Sync Gateway y la aplicación en funcionamiento, sólo queda activar una replicación pull para ver la acción.

Aquí está el rizo para enviar una señal de "inicio". Recordemos que extraigo el valor de la parte "alerta" de la notificación para desencadenar acciones.

Tendrás que proporcionar tu propia clave de aplicación y el secreto maestro de la aplicación anterior. También es necesario mirar los archivos de registro para ver el valor del canal para entrar en "android_channel". Eso cambia con bastante regularidad. Desafortunadamente UA no hace mucho para indicar esto. Si encuentras que las notificaciones push no parecen tener ningún efecto, comprueba el valor del canal.

Después de publicar en UA, deberías ver una respuesta como esta.

Y, por último, para restablecer una base de datos en blanco y volver a intentarlo, puedes publicar esto.

Conclusión

Esto es todo para preparar nuestra aplicación Android para realizar réplicas basadas en notificaciones push. Asegúrese de revisar esta entrada sobre la supervisión de la fuente de cambios de Sync Gateway.

Posdata

Descargar Couchbase y Sync Gateway aquí. Consulte nuestro documentación para saber cómo añadir Couchbase Lite a un proyecto.

Consulte más recursos en nuestra portal para desarrolladores y síganos en Twitter @CouchbaseDev.

Puede enviar preguntas a nuestro foros. Y participamos activamente en Stack Overflow.

Envíame tus preguntas, comentarios, temas que te gustaría ver, etc. a Twitter. @HodGreeley.

Autor

Publicado por Hod Greeley, Defensor del Desarrollador, Couchbase

Hod Greeley es desarrollador de Couchbase y vive en Silicon Valley. Tiene más de dos décadas de experiencia como ingeniero de software y director de ingeniería. Ha trabajado en una variedad de campos de software, incluyendo física computacional y química, seguridad informática y de redes, finanzas y móviles. Antes de unirse a Couchbase en 2016, Hod dirigió las relaciones con desarrolladores para móviles en Samsung. Hod es doctor en física química por la Universidad de Columbia.

1 Comentarios

Dejar una respuesta