es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo enviar notificaciones push locales en un intervalo de tiempo.

Recientemente comencé a trabajar en el desarrollo de iOS, y actualmente estoy trabajando en agregar nueva funcionalidad a una aplicación existente. Para la característica actual, necesito programar notificaciones push en un intervalo de tiempo predefinido, para un número específico de veces; digamos entre las 8:00 y las 20:00, cada ~2 horas. Además, me gustaría definir un comportamiento personalizado cuando se toca la notificación (abrir una vista específica).

Actualmente puedo usar el servicio de notificación existente para enviar notificaciones push basadas en texto a pedido, pero aún no puedo definir este intervalo/comportamiento personalizado.

¿Cuál es la mejor manera de manejar este escenario?

private func sendLocalNotification() {

let content = UNMutableNotificationContent()
content.title = "Título"
content.body  = "Cuerpo"

// definiendo un activador para comportamiento personalizado
// var trigger: UNNotificationTrigger?

let request = UNNotificationRequest(identifier: TestNotification.identifier, content: content, trigger: .none)
userNotificationCenter.add(request, withCompletionHandler: nil)
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para programar notificaciones push en un intervalo de tiempo predefinido y definir un comportamiento personalizado cuando se toca la notificación, deberá usar una combinación de UNNotificationTrigger y UNNotificationContent.

    En primer lugar, defina el contenido de la notificación estableciendo el título y el cuerpo.

    A continuación, cree un UNTimeIntervalNotificationTrigger con el intervalo de tiempo deseado y configúrelo como el disparador de la notificación.

    Para programar la notificación en el momento deseado, use el método add de UNUserNotificationCenter para agregar la solicitud de notificación.

    Para manejar un comportamiento personalizado cuando se toca la notificación, puede configurar la propiedad userInfo de la notificación para incluir cualquier dato adicional que necesite y luego manejar esos datos en la implementación de la aplicación del método userNotificationCenter(_:didReceive:withCompletionHandler:) de UNUserNotificationCenterDelegate.

    Aquí hay un ejemplo de implementación de la función sendLocalNotification() que programa una notificación push cada dos horas entre las 8 a. m. y las 8 p. m. y abre una vista específica cuando se toca:

    private func sendLocalNotification() {
        let content = UNMutableNotificationContent()
        content.title = "Título"
        content.body = "Cuerpo"
        content.userInfo = ["openView": "identificadorDeVistaEspecífica"]
    
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 7200, repeats: true)
    
        var dateComponents = DateComponents()
        dateComponents.hour = 8
        dateComponents.minute = 00
    
        let calendar = Calendar.current
        let startDate = calendar.date(from: dateComponents)!
    
        let request = UNNotificationRequest(identifier: TestNotification.identifier, content: content, trigger: trigger)
    
        UNUserNotificationCenter.current().add(request) { error in
            if let error = error {
                print("Error: \(error)")
            } else {
                print("Programada notificación cada 2 horas entre las 8 a.m. y las 8 p.m.")
            }
        }
    }
    
    // Implemente el método `userNotificationCenter(_:didReceive:withCompletionHandler:)` para manejar la notificación
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo
    
        if let viewIdentifier = userInfo["openView"] as? String {
            // Abrir la vista especificada utilizando el identificador de vista
        }
    
        completionHandler()
    }
    

Comments are closed.