Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS 10
Code

iOS 10: Extensiones en el Servicio de Notificaciones

by
Difficulty:BeginnerLength:ShortLanguages:

Spanish (Español) translation by Javier Salesi (you can also view the original English article)

Introducción

Cuándo se recibe una notificación en una aplicación iOS, podrías querer descargar contenido en respuesta a ella o editar el contenido antes de que se muestre al usuario. En iOS 10, Apple ahora permite que las aplicaciones hagan ésto mediante una Extensión en el Servicio de Notificaciones.

Un ejemplo de cuándo ésto podría ser útil es si tuvieras una aplicación de mensajería dónde tu servidor back-end sólo identificó a usuarios por alguna clase de código en lugar de identificarlos por su nombre. Para un usuario de tu aplicación, los nombres y otros detalles de sus contactos podrían ser almacenados localmente en el dispositivo. Al enviarse una notificación a un usuario cúando ellos reciben un mensaje, el payload podría incluir el identificador del emisor, el cual tu extensión del servicio podría reemplazar con el nombre del contacto.

Para usar éste nuevo tipo de extensión, necesitarás estar desarrollando tu aplicación con Xcode 8 o superior y el SDK de iOS 10.

Por favor nota lo siguiente antes de continuar con éste rápido consejo:

  • Éste artículo no cubrirá todo el proceso de cómo configurar tu aplicación para enviar/recibir notificaciones locales o push.
  • El código de ejemplo mostrado estará usando APIs introducidas en el framework UserNotifications, que también es nuevo en iOS 10.
  • Si quieres aprender cómo crear interfaces personalizadas para tus notificaciones, éstas se hace mediante extensiones de contenido de notificaciones.

Si quieres saber más sobre cualquiera de éstos tópicos, entonces puedes leer éstos otros tutoriales:

1. Configuración de la Extensión

El proceso de agregar una extensión en el servicio de notificaciones a una aplicación iOS es idéntico al de otras extensiones. En la barra de menú Xcode, ve a File > New > Target... y selecciona la plantilla Notification Service Extension del menú que aparece:

Extension Template

En el siguiente menú, puedes llenar la información específica para la aplicación.

Una vez que tu extensión ha sido creada, verás dos archivos (o tres si estás utilizando Objective-C) dentro del directorio de la extensión en el Project navigator de Xcode:

  • NotificationService.swift, que contendrá todo el código y la lógica para tu extensión.
  • Info.plist, que contiene detalles de la configuración para tu extensión.

El archivo Info.plist contiene toda la información requerida para tu extensión, así que el único archivo que deberías necesitar cambiar es el archivo NotificationService.swift.

2. El Ciclo de Vida de la Extensión

Una vez que has configurado tu aplicación con una extensión del servicio de notificación, el siguiente proceso se realizará para cada notificación:

  1. La aplicación recibe la notificación.
  2. El sistema crea una instancia de la clase de tu extensión y la lanza en segundo plano.
  3. Tu extensión ejecuta ediciones del contenido y/o descarga algún contenido.
  4. Si tu extensión demora mucho en realizar su trabajo, será notificada e inmediatamente terminada.
  5. La notificación es mostrada al usuario.

Como puedes ver, cuándo se usa una extensión en el servicio de notificaciones, sólo tienes una cantidad limitada de tiempo para efectuar el trabajo necesario. Si tu extensión está tomando demasiado, entonces será detenida por el sistema,y la notificación será entregada como si no tuvieras la extensión.

3. Código de la Extensión

Tu extensión en el servicio de notificaciones existe como un solo objeto que es una subclase de la clase UNNotificationServiceExtension. Ésta clase define los siguiente métodos:

  • didReceive(_:withContentHandler:) que proporciona tu extensión con el objeto original UNNotificationRequest. En éste método, creas un nuevo objeto UNNotificationContent y pasa éste como un parámetro al completion handler cuándo terminas. Éste contenido de notificación puede ser creado desde cero o desde una copia mutable del contenido original. El siguiente código muestra un ejemplo de implementación de éste método:
  • serviceExtensionTimeWillExpire que es ejecutado cuándo tu extensión está a punto de ser terminada por el sistema. Éste método no contiene ningún parámetro, así que si quieres que tu extensión proporcione una versión en-progreso de tu contenido modificado, necesitarás mantener una referencia al completion handler del método didReceive(_:withContentHandler:). El siguiente código muestra cómo ésto podría lograrse en la subclase de tu extensión:

4. Limitaciones de la Extensión

Lo último importante a considerar cuándo se usa una una extensión del servicio de notificación son las condiciones bajo las cuáles la extensión operará.

Primeramente, tu extensión sólo será lanzada para las notificaciones que son configuradas para mostrar alertas en-pantalla al usuario. Ésto significa que cualquier notificación silenciosa (como las utilizadas para actualizar los botones de aplicación) no desencadenará tu extensión.

En segundo lugar, el diccionario aps de la notificación entrante dentro de su payload debe incluir la clave mutable-content con un valor de 1 .

La correcta configuración de tus notificaciones dependerá últimamente de la propia configuración de tu aplicación. Para satisfacer la segunda condición, en particular, algunos cambios se podrían necesitar para la implementación de la notificación push del lado del servidor. Si no estás usando un servidor personalizado y en cambio estás usando un servicio de terceros para la implementación de tu notificación push, entonces sugeriría investigar y leer la documentación de su soporte si no puedes hacer funcionar tu extensión.

Conclusión

A través de la nueva clase UNNotificationServiceExtension en iOS 10, es muy sencillo para tí implementar una extensión en el servicio de notificaciones para tus propias aplicaciones. Cualquiera que sea el caso, éstas APIs te permiten fácilmente modificar el contenido de una notificación antes de que se muestre al usuario.

Como siempre, asegúrate de dejar tus comentarios y cualquier retroalimentación en la sección de abajo. ¡Y consulta algunas de nuestras otras publicaciones sobre iOS 10 y desarrollo de aplicaciones en Swift!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.