Creando notificaciones locales en IOS

Las notificaciones push son una funcionalidad en las aplicaciones móviles que estamos más que acostumbrados a ver en la mayoría de aplicaciones que instalamos, y en algunos casos a sufrir. 

Estas notificaciones push, lo más usual es que se envían desde un servidor remoto en función de ciertos eventos, pero también es posible lanzarlas localmente. Es decir, tu aplicación podría lanzar una notificación, que tiene exactamente el mismo aspecto que la que se muestra cuando llega desde el servidor un push.

Notificar tareas realizadas, eventos próximos, sucesos que se están produciendo en tu aplicación, etc…, podrían ser algunos de los casos donde se podrían utilizar estas notificaciones locales.

Para este menester existe un framework, y en general para todas las notificaciones, de nombre: UserNotifications.

Como crear una notificación local en IOS

En IOS para poder mostrar una notificación al usuario, este debe de dar su consentimiento y por tanto debemos de preguntar primero si no los da para que desde nuestra aplicación se puedan crear y mostrar las notificaciones.

Para ello lo primero que tenemos que hacer es solicitar esta autorización, debemos importar la clase UserNotifications

import UserNotifications

Ahora solicitamos el permiso

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
    if granted {
        print("Permiso concedido")
    } else if let error = error {
        print(error.localizedDescription)
    }
}

Con este código en Swift estamos solicitando permiso para mostrar notificaciones y esto lo debemos de hacer siempre que deseemos mostrar una notificación, ya que el usuario puede haber revocado el permiso a nuestra aplicación en cualquier momento. 

El array de opciones que se pasan como parámetro al método requestAuthorization, son las funciones que deseamos utilizar en las notificaciones. 

Deseamos mostrar alertas, poder añadir un número al icono de nuestra aplicación y reproducir un sonido cuando se muestre la notificación.

Creando el contenido de la notificación

Una vez que el usuario nos da el permiso tenemos que crear la notificación a mostrar.

   //1
   let content = UNMutableNotificationContent()
    content.title = "Este es el título de la notificación"
    content.subtitle = "un Subtítulo"
    content.body = "El cuerpo de la notificación"
    
    // 2
    let imageName = "applelogo"
    guard let imageURL = Bundle.main.url(forResource: imageName, withExtension: "png") else { return }
        
    let attachment = try! UNNotificationAttachment(identifier: imageName, url: imageURL, options: .none)
        
    content.attachments = [attachment]
    
    // 3
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 2, repeats: false)
    let request = UNNotificationRequest(identifier: UUID().uuidString
, content: content, trigger: trigger)
    
    // 4  
    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

El código creo que es bastante claro:

  1. Creamos el contenido de la notificación, título, subtítulo y cuerpo de la misma
  2. Podemos añadir una imagen a la notificación.
  3. Creamos el momento en el que la notificación va a ser mostrada. En esta caso la notificación se mostrará 2 segundos después de ejecutarse este código y solamente una vez por cada ejecución del código. Aquí podríamos crear una fecha concreta y que se repitiese de forma indefinida en esa fecha en el futuro.
// Configurar la fecha recurrente
var dateComponents = DateComponents()
dateComponents.calendar = Calendar.current


dateComponents.weekday = 3  // Tuesday
dateComponents.hour = 14    // 14:00 hours
 
// Se crea el evento y se sesea a true el flag repeats 
let trigger = UNCalendarNotificationTrigger(
        dateMatching: dateComponents, repeats: true)

En este código todos los martes a las dos de la tarde se mostraría una notificación.

  1. Por último añadimos la notificación al sistema para que se ejecute según la configuración que hayamos creado.

Si ejecutamos este código veremos la notificación enviada desde nuestra aplicación en pantalla.

Todo el código, como siempre, lo tenéis en Github.

Comparte si lo consideras interesante
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.