fbpx
 

Utilizando Notificaciones Locales en iOS 10 [Parte 1]

Utilizando Notificaciones Locales en iOS 10 [Parte 1]

1. Introducción

 

Hola y bienvenido de nuevo al Tutorial semanal sobre Desarrollo de Aplicaciones iOS de EfectoApple.

En esta ocasión vamos a centrarnos en las Notificaciones Locales.

Las notificaciones locales nos permiten mantener al usuario informado sobre determinados aspectos de nuestra aplicación. Sin embargo no deben confundirse con las notificaciones push.

En iOS existen dos tipos de notificaciones:

  • Notificaciones Locales
  • Notificaciones Push

 

La principal diferencia entre ellas es la siguiente:

Las notificaciones locales no requieren ningún tipo de infraestructura externa, ya que suceden directamente en el dispositivo iOS. Ni siquiera necesitan conexión a internet para funcionar.

Por otro lado las notificaciones push necesitan que el dispositivo disponga de conectividad y además requieren una infraestructura externa que permita enviar dichas notificaciones a través del APNs (Apple Push Notification Service).

En este tutorial nos centraremos en detalle en las notificaciones locales. Dentro de muy poco es probable que publique un nuevo tutorial donde también podremos ver el funcionamiento de las notificaciones push.

Comencemos entonces

 

2. ¿Qué vamos a ver en este Tutorial?

 

El tutorial se dividirá en 2 partes. Hoy veremos los fundamentos de las notificaciones locales y desarrollaremos una aplicación que ponga en práctica lo aprendido.

La semana que viene, en la segunda parte de este tutorial, revisaremos aspectos más avanzados de las notificaciones locales.

Estos son los puntos más importantes en los que nos centraremos:

  • Funcionamiento de las notificaciones locales
  • ¿Qué es una Notification Request?
  • Los 4 + 2 pasos a la hora de trabajar con notificaciones locales
  • ¿Cómo crear el Trigger de una Request?
  • ¿Cómo crear el contenido de una notificación?
  • Añadiendo la request al centro de notificaciones
  • Solicitando permiso al usuario
  • El Protocolo UNUserNotificationCenterDelegate

 

3. La Aplicación que vamos a Desarrollar

 

La aplicación que vamos a desarrollar será una app muy simple. Contará con una interfaz de un único botón, que en el momento en que el usuario lo pulse, se creará y se mostrará en pantalla una notificación local.

 

notificaciones app working in foreground

 

De esta forma, veremos el proceso a través de un caso práctico. Así, cuando tengas que utilizar notificaciones locales en cualquier proyecto, no tendrás ningún problema.

Al igual que en otros tutoriales de EfectoApple, he creado un Proyecto Inicial, que nos permitirá centrarnos en las partes realmente importantes.

Sin embargo, antes de comenzar con el proyecto, tenemos que revisar de forma muy breve, algunos conceptos importantes.

 

4. Funcionamiento de las Notificaciones Locales

 

Si te fijas en el título del tutorial, verás que hemos hecho hincapié en la versión 10 de iOS. Esto se debe a que con el lanzamiento de esta versión, Apple renovó la forma de trabajar con las Notificaciones Locales y ha añadido algunas funciones muy interesantes.

El framework ofrecido por Apple para que trabajemos con notificaciones en nuestras aplicaciones es UserNotifications.

Puedes acceder a la documentación de Apple sobre este Framework, desde aquí.

La base de cualquier notificación es una Request (Petición). Veamos este concepto más en detalle.

 

Request

 

Cualquier desarrollador que pretenda implementar una notificación en su aplicación iOS deberá trabajar con requests.

La siguiente pregunta está clara.

¿Qué es una Request?

Una request consiste en una solicitud que enviamos a iOS, para que se muestre una notificación concreta. Cualquier request está formada por 2 componentes:

  • El Trigger de la notificación
  • El Contenido de la notificación

Un Trigger es un conjunto de condiciones que deben cumplirse para que nuestra notificación sea lanzada. Podemos trabajar con diferentes tipos de triggers. Por ejemplo, podemos crear un trigger temporal que muestre una notificación en un momento concreto. También podemos crear un trigger por localización, que lance una notificación cuando el usuario llegue a una ubicación determinada. Esta es la idea básica de los triggers.

Por otro lado, tenemos el contenido de la aplicación, que no será más que una serie de parámetros que conformarán nuestra notificación. Estos parámetros son entre otros, el título, el subtítulo, el cuerpo y el sonido que emitirá la notificación cuando se muestre.

Una vez que comprendemos estos conceptos, veamos de forma resumida el proceso completo cuando tengamos que trabajar con notificaciones.

 

Los 4 + 2 Pasos a la hora de crear Notificaciones

 

Estos son los 4 puntos que seguiremos siempre que trabajemos con notificaciones:

  1. Crear el Trigger que disparará nuestra notificación
  2. Crear el Contenido de la notificación
  3. A partir del Trigger y del Contenido crearemos la Request
  4. Añadir la Request al Centro de Notificaciones

 

Una vez que hemos completado este proceso, nuestra aplicación, de forma automática lanzará la notificación, en cuanto se cumplan las condiciones que hemos establecido en el trigger.

Además de estos 4 puntos, habría que añadir otros 2 adicionales que también tendremos que tener en cuenta. Éstos los veremos al final del tutorial. Creo que será más claro comprender primero los 4 puntos principales y al terminar ver los últimos 2 que completan el proceso.

Ahora que ya hemos explicado la parte teórica, vamos a centrarnos, como siempre, en desarrollar una aplicación iOS donde podamos poner en práctica lo que acabamos de ver.

 

5. Nuestro Proyecto de Inicio

 

Para poder seguir el tutorial paso a paso lo primero que deberías hacer es descargar el Proyecto de Inicio desde aquí.

Una vez que lo has bajado, descomprímelo y ábrelo con Xcode.

Se trata de un proyecto extremadamente sencillo.

Accede a Main.storyboard y verás que la interfaz consta de un botón con el texto Lanzar Notificación.

 

notificaciones comenzando proyecto

 

Este botón está conectado mediante un IBAction al siguiente método de ViewController.swift:

Como ves, el método send10SecsNotification() está vacío.

A lo largo de nuestro tutorial, iremos completando este método. El código que iremos añadiendo será el necesario para llevar a cabo el proceso de creación de una notificación local utilizando el framework UserNotifications.

Por el nombre del método, ya habrás deducido que la notificación que vamos a crear se lanzará justo 10 segundos después de que el usuario pulse en el botón de nuestra aplicación.

Veamos entonces todo el código paso a paso.

 

6. Creando el Trigger de la Request

 

Comenzaremos por el primero de los 4 pasos: La creación del Trigger.

Aunque antes, hay algo que debes añadir en tu aplicación, para poder trabajar con el framework UserNotifications.

Debemos importar dicho framework en nuestra clase. Para ello, añade justo antes de la cabecera de nuestra clase la siguiente linea:

De esta forma, ya podemos trabajar con cualquier método o clase incluida en dicho framework.

Ahora si, crearemos el trigger de nuestra notificación. Añade la siguiente linea al método send10SecsNotification():

Utilizando el método UNTimeIntervalNotificationTrigger(), podemos especificar que la notificación se lance justo 10 segundos después de la pulsación del botón. Además, como únicamente queremos una notificación y no queremos que se repita varias veces, en el parámetro repeats, pasaremos false.

Con una sola línea hemos creado el trigger la notificación.

Pasemos ahora al siguiente punto del proceso.

 

7. Creación del Contenido de la Notificación

 

Para configurar el contenido de la notificación usaremos un objeto de tipo UNMutableNotificationContent. Este objeto nos permitirá establecer los siguientes parámetros:

  • Título
  • Subtítulo
  • Cuerpo
  • Sonido

 

Para esto, añade el siguiente código al método send10SecsNotification() justo después del código del apartado anterior:

No hace falta explicar nada más sobre este código. Unicamente comentar que hemos utilizado el sonido de notificación disponible por defecto.

Ahora que ya hemos creado el trigger y el contenido de la notificación, ya podemos crear la Request.

 

8. Construyendo la Request

 

Para nuestra request, crearemos un objeto de tipo UNNotificationRequest, formado por las constantes trigger y content.

Además tendremos que establecer un identificador único para esta request.

Añade la siguiente linea al método:

Sencillo, ¿no?

Hemos utilizado 3 parámetros:

  • Identifier: Nos permite diferenciar esta request del resto en el Centro de Notificaciones
  • Content: El contenido de la notificación que hemos creado anteriormente
  • Trigger: La condición que debe cumplirse para que se lance nuestra aplicación. En nuestro caso, que pasen 10 segundos.

Si recuerdas, los pasos que mencionamos en la parte teórica, sabrás que únicamente nos queda el paso final. Lo vemos a continuación.

 

9. Añadiendo la Request al Centro de Notificaciones

 

Lo último que tenemos que hacer para completar el proceso es añadir la request al centro de notificaciones.

El centro de notificaciones es el encargado de gestionar todas las notificaciones de tu aplicación. Será quien compruebe si las condiciones del trigger que hemos establecido se han cumplido y en caso afirmativo lanzará nuestra notificación.

Existe una buena práctica que debes tener en cuenta cuando añadas alguna request al centro de notificaciones y es la siguiente:

 

Antes de añadir una request al centro de notificaciones, es conveniente eliminar cualquier otra request existente

 

Seguir esta regla te permitirá evitar que se produzcan notificaciones duplicadas.

Este es el código que tienes que utilizar para añadir la request al centro de notificaciones:

La primera linea obtiene una instancia del centro de notificaciones y a través del método removeAllPendingNotificationRequests() elimina cualquier request pendiente.

Después añadimos la request al centro de notificaciones. En la llamada a este método, utilizamos un completion handler, que nos permite, si se produce un error, mostrarlo por consola.

Con esta última porción de código, habríamos terminado los 4 puntos que vimos en la parte teórica.

 

Aspecto Final del Método

 

El aspecto actual del método send10SecsNotification() debe ser este:

10. Probando nuestra Aplicación

 

Ha llegado el momento de comprobar que el código que hemos creado funciona correctamente. Para ello, compila la aplicación y ejecútala.

Verás que se muestra por pantalla el botón que lanza la notificación. Púlsalo y espera 10 segundos.

¿Qué ocurre?

La aplicación no muestra ningún tipo de notificación.

Si recuerdas, habíamos comentado que aparte de los 4 puntos que había que seguir al trabajar con notificaciones, existían otros 2 adicionales que debíamos tener en cuenta.

Esos 2 puntos son los siguientes:

  • Solicitar permiso al usuario
  • Implementar el Protocolo UNUserNotificationCenterDelegate

Veamos en que consisten estos 2 puntos.

 

11. Solicitando permiso al usuario

 

Apple siempre ha tenido un cuidado extremo en preservar la experiencia de usuario en iOS. Por este motivo, ofrece control total a sus usuarios con respecto a las notificaciones que reciben de las aplicaciones instaladas en sus dispositivos.

Es decir, si queremos poder enviar notificaciones a un usuario, necesitamos que nos de permiso explícito.

Por tanto, ¿cómo solicitamos permiso al usuario?

Utilizando el método requestAuthorization().

Vamos a solicitar este permiso al usuario, nada más arrancar la aplicación, por tanto deberás hacer dos cosas en la clase AppDelegate.swift de tu proyecto.

 

Importar el framework UserNotifications

 

Solicitar Permiso

 

Deberás añadir el siguiente código al método didFinishLaunchingWithOptions():

Lo que hemos hecho es solicitar permiso al usuario para mostrarle notificaciones utilizando el método requestAuthorization().

En caso de que el usuario no nos de permiso mostraremos por consola un mensaje indicándolo.

Lo que vamos a hacer ahora es volver a probar nuestra aplicación.

 

12. Probando por segunda vez nuestra Aplicación

 

Compila y ejecuta el proyecto.

Al lanzar la aplicación, verás que lo primero que se muestra es la solicitud de permiso.

 

notificaciones asking permission

 

Pulsa en el botón Allow para permitir a la aplicación recibir notificaciones.

Después pulsa el botón y espera 10 segundos.

Tampoco ha sucedido nada.

Sin embargo, si quieres ver funcionando nuestra notificación, sigue el siguiente proceso:

  • Pulsa de nuevo en el botón
  • Accede al menú Hardware-Home del Simulador (Tienes que hacerlo en menos de 10 segundos)

 

notificaciones go to home screen

 

  • Espera un poco y verás como se muestra perfectamente nuestra notificación

 

notificaciones working on simulator

 

Entonces, ¿qué es lo que ocurre?

Simplemente, nuestra aplicación actual solamente puede mostrar notificaciones cuando la app se encuentra en segundo plano (Es decir, cuando el usuario no la tiene abierta).

Siempre que el usuario la tenga abierta (En primer plano), no recibirá ninguna notificación.

Esto es algo que no nos interesa. Queremos que el usuario reciba nuestras notificaciones, tanto si la aplicación está abierta como si no.

Por este motivo, tenemos que llevar a cabo el último paso de todos, implementar el protocolo.

 

13. Implementando el Protocolo

 

Vamos entonces a trabajar con el protocolo UNUserNotificationCenterDelegate.

Antes de continuar, si no estás familiarizado con los conceptos de Delegado y Protocolo, te recomiendo que eches un vistazo a estas explicaciones:

Estos dos conceptos son fundamentales en Desarrollo iOS.

Para implementar el protocolo UNUserNotificationCenterDelegate haremos 3 cosas:

  1. Especificar que nuestra clase ViewController.swift se ajusta a dicho protocolo
  2. Especificar que la clase ViewController.swift actuará como delegado del Centro de Notificaciones
  3. Implementar el método que presentará la notificación cuando la app esté en primer plano

Para ajustar nuestra clase a dicho protocolo, simplemente tendremos que añadir en su cabecera el nombre del protocolo. Por tanto, modificaremos la cabecera de la clase ViewController.swift para que tenga este aspecto:

Después, Para especificar que ViewController.swift será delegado del Centro de Notificaciones, añadiremos la siguiente linea en el método viewDidLoad():

Por último, implementaremos el método willPresent() que será llamado, cuando nuestra aplicación esté en primer plano y la notificación sea lanzada:

En este método lo único que hacemos es utilizar el completion handler para especificar que la notificación deberá mostrarse y además emitir el sonido por defecto que utilizamos al definir el content.

Después de haber realizado estos cambios, prueba a ejecutar de nuevo la aplicación.

Pulsa en el botón central y espera 10 segundos. Ya no es necesario que vayas a la pantalla Inicio, puedes permanecer con la aplicación en primer plano.

Y ahora… si que se muestra correctamente la notificación.
notificaciones app working in foreground

 

14. Resumen Final

 

Como ves, de forma muy sencilla, hemos sido capaces de configurar la aplicación de este tutorial para que muestre notificaciones locales a nuestros usuarios.

Si repasas el proyecto completo verás que no hemos utilizado mas que unas pocas lineas de código.

Espero que este tutorial te pueda servir siempre que necesites utilizar notificaciones locales en tus aplicaciones iOS.

 

15. Descarga el Proyecto

 

10AppsBanner

 

Consigue el proyecto completo y muchos más con el Pack de Aplicaciones de EfectoApple que puedes descargar totalmente gratis desde aquí.

 

16. Has terminado el Tutorial

 

Espero que hayas disfrutado este tutorial y sobre todo te haya servido para comprender algo mejor las notificaciones locales en iOS.

Como siempre, aquí tienes el video-chorra de esta semana.

 

 

17. ¿Donde ir ahora?

 

Accede a la segunda parte de este tutorial accediendo aquí. Revisaremos como podemos utilizar notificaciones avanzadas en nuestras aplicaciones iOS.

Puedes acceder a más tutoriales disponibles en EfectoApple desde aquí.

Si este artículo te ha parecido útil, me harías un gran favor compartiéndolo en tus redes sociales.

Y como siempre, para cualquier duda, tienes los comentarios a tu disposición.

Recuerda, cada lunes un nuevo Tutorial sobre Desarrollo iOS.

Gracias por leer EfectoApple.

 

2 Comentarios
  • carlos azueta
    Publicado a las 01:26h, 15 febrero Responder

    Hola me gustaría realizar una acción al pulsar sobre el globo de notifico para llevarlo a una view especifica. me ha servido de mucho este tutorial, mil gracias.

    • Luis R
      Publicado a las 11:09h, 15 febrero Responder

      Gracias por tu comentario Carlos.
      Apunto tu propuesta para próximos tutoriales.
      ¡Un saludo!

Escribe un comentario

10AppsIpad

Descarga las 10 Aplicaciones

Introduce tu Nombre y tu Email para recibir las Apps en tu Correo

Acabo de enviarte un email. Sigue las instrucciones para descargar las Aplicaciones. Puede que tengas que revisar tu buzón de correo no deseado. Gracias.