Notificaciones locales en iOS.

0
6959

Cómo gestionar las notificaciones locales en una aplicación iOS.

Índice de contenidos

1. Introducción
2. Entorno
3. Creando notoficaciones locacles

1. Introducción

Bueno amigos, vamos a crear un proyecto para gestionar las notificaciones locales, muchos desarrolladores las usan para recordar al usuario ciertas tareas o simplemente para recordarle que la app está instalada si hace tiempo que no la abre.

2. Entorno

  • Macbook pro core i7 con 8gb RAM
  • SO: Mavericks
  • IDE: Xcode 5.0.2.

3. Creando notoficaciones locacles

Vamos a crear un proyecto nuevo de tipo single view application y vamos a usar Storyboards

Lo primero que vamos a hacer es dejar el proyecto a nuestro gusto así que vamos a crear primero las clases necesarias para nuestra aplicación, primero crearemos un controlador que hereda UITableViewController en el cuál mostraremos nuestras notificaciones, en mi caso lo he llamado IACNotificationsTableViewController.

Una vez creado, en el Storyboard borramos el viewController que viene por defecto y añadimos un UINavigationController, vemos que por defecto nos arrastra un TableViewController por lo que aprovechamos éste y lo linkamos a nuestra clase creada anteriormente (también ponemos un identifier a la celda que viene por defecto )

Ahora vamos a crear otra clase que herede de NSObject que va ser básicamente nuestro manager para las notificaciones locales, en mi caso lo llamo IACNotificationsManager, nuestro Project Navigator quedaría así;

Comencemos con el código, vamos a importar en nuestro controlador de la tabla el manager para poder hacer uso de él, y a continuación creamos nuestras variables para poblar la tabla y manejar las notificaciones;

Bien, ahora vamos a crear unos métodos de clase en nuestro manager para gestionar las notificaciones locales, nuestro .h quedaría de esta forma;

y el .m así;

Bien, repasemos, tenemos que hay un método (allNotifications) que nos devuelve un array con todas las Notificaciones locales que tiene nuestra App pendientes , (cancelAllNotifications) para cancelarlas todas, (cancelNotification:notification) para cancelar una notificación específica, (createNotification:notification) para crear una notificación, y un par de métodos más para ahorrarnos tiempo cuando las queramos crear. Como veis he comentado las propiedades que tienen las UILocalNotifications para que quede más claro qué hace cada una, tener en cuenta que el sonido que emite la notificación puede ser totalmente personalizado, yo he puesto el que viene por defecto en el sistema, también es posible que se emita la notificación diariamente o semanalmente.
Como veis las posibilidades son muchas.

Ahora vamos a crear una vista y su controlador para mostrar de forma modal los parámetros a elegir de nuestra notificación, esta vez creamos una clase que herede de un UIViewController, y los llamamos IACAddNotificationViewController, añadimos la vista al Storyboard (y la linkamos) y los elementos necesarios dentro de la misma vista;

Mediante el Assistant editor unimos los Outlets a nuestro .h con la tecla control pulsada.

Nuestro .h de la clase IACAddNotificationViewController quedaría de esta forma;

Una vez terminado importamos la nueva clase al controlador de tabla.

Vamos a intentar mantener limpio nuestro código siguiendo la regla de que cada método ha de hacer una sola cosa, por lo que no vamos a cargar nuestro ViewDidLoad del controlador de tabla , vamos hacer que quede más o menos de esta forma:

Bien, como veis hemos añadido un botón en la parte izquierda de edición y otro en la parte derecha de nuestra barra de navegación, con su @selector que vamos a usar para abrir nuestra ventana modal;

Como veis le hemos llamado a través del Storyboard, para que esta llamada funcione tenemos que decirle al Storyboard el ID que tiene el controlador;

Ahora en nuestro controlador de tabla vamos a empezar a darle los datos que necesita nuestra tabla en los métodos delegados del Data Source;

En el método de pintado de las celdas, vamos ha escribir lo siguiente;

Bien si ahora compilamos y ejecutamos vemos que se nos muestra una tabla vacía y si presionamos el botón + se nos abre modalmente la vista para añadir los parámetros de nuestras notificaciones, vamos a hacer que los switch aparezcan por defecto apagados, vamos al Storyboard, seleccionamos los switch y en el inspector de atributos le indicamos OF.

Si vamos al .m de nuestro controlador AddNotification tendríamos que tener un método linkado a un IBAction del botón que hemos añadido antes, en mi caso la acción la he llamado (saveNotification:), en esta acción vamos a guardar la notificación y cerrarla vista modal, vamos a ello;

Primero hemos importado nuestro manager y después hemos llamado a un método de clase del mismo para crear la notificación en base a los controles de la interfaz, después le decimos que se esconda la pantalla modal.

Pero esta acción no actualiza la tabla, así que vamos hacer un delegado para que nuestra tabla se actualice cuando se cierre la vista modal, en nuestra .h del controlador de la vista modal incluimos el delegado siguiendo la conveniencia de cocoa;

Y en el método de guardar la notificación incluimos el siguiente mensaje en el bloque completion;

Ahora en la vista de tabla cuando inicializamos el AddViewController le indicamos que nosotros somos su delegado e implementamos su método;

Ahora solo falta incluir en el delegado de la aplicación (AppDelegate.m) el método para recibir las notificaciones locales, en caso de estar la aplicación activa se ejecutara (application:didReceibeLocalNotification:) y en caso de estar inactiva (application:didFinishLaunchWithOptions), en este caso recuperamos la notificación en el diccionario que nos pasa el método;

Ahora si ejecutamos la aplicación podremos crear notificaciones locales para hacer las pruebas.

Bien vamos a implementar el borrado de cierta notificación desde la vista de la tabla, como visteis insertamos un botón de edición en el lado izquierdo de la barra de navegación, y vamos a implementar los métodos delegados del tableView para la edición de las celdas de esta forma;

Ahora ya podemos borrar las notificaciones manualmente.

Podéis descargar el proyecto aquí;

Dejar respuesta

Please enter your comment!
Please enter your name here