ios - alertas - ¿Cómo puedo programar una notificación local para el siguiente escenario?
uialertcontroller styles (2)
Expertos, tengo un escenario en el que necesito notificar al usuario tres veces al día (mañana, tarde, noche). Y los horarios de estas notificaciones serán diferentes para cada día, según los valores de la base de datos para cada fecha.
Estas tres notificaciones son configurables. Lo que significa que el usuario puede elegir configurar la tarde y la noche mientras desactiva la notificación de la mañana en la configuración.
Según mi entendimiento, puedo lograr esto utilizando notificaciones locales.
Puedo hacer lo siguiente: - antes de que la aplicación salga, dentro de didFinishLaunchingWithOptions, puedo verificar cuál es la próxima notificación que se debe, está configurada (activar / desactivar). Si está configurado lo programo. Si no, paso al siguiente tipo de notificación y hago lo mismo. Si todas las notificaciones están desactivadas, obviamente, no se programarán notificaciones.
Ahora, cuando aparece la notificación, puedo ver la alerta con dos botones "Cerrar" y "Ver". Si el usuario selecciona "Ver", mi aplicación vuelve a estar activa y antes de que el usuario salga, se programará la próxima notificación.
Hasta ahora tan bueno.
Ahora si el usuario elige seleccionar "Cerrar" ¿Qué hago? ¿No ejecutará mi aplicación y, en consecuencia, no se programará la próxima notificación?
¿Cómo logro esto? ¿Hay alguna manera mejor de hacer esto?
¡Ayuda! ¡Ayuda! ¡Ayuda!
Simplemente puede programar todas las notificaciones (o muchas) a la vez. No es necesario que espere a que el usuario vea su aplicación para programar la próxima notificación.
De los documentos en UILocalNotification ,
Una aplicación solo puede tener un número limitado de notificaciones programadas; el sistema mantiene las 64 notificaciones de activación más rápida (con notificaciones reprogramadas automáticamente contando como una notificación única) y descarta el resto
Por lo tanto, si tiene 3 notificaciones por día, puede programar de antemano 3 semanas de notificaciones a la vez. Supongo que todavía tendría un problema si el usuario no abre su aplicación durante un mes, pero ¿debe preocuparse por ese escenario?
De todos modos, solo quería asegurarme de que está claro que no es necesario programar estas notificaciones una por una.
Ejemplo:
UILocalNotification* n1 = [[UILocalNotification alloc] init];
n1.fireDate = [NSDate dateWithTimeIntervalSinceNow: 60];
n1.alertBody = @"one";
UILocalNotification* n2 = [[UILocalNotification alloc] init];
n2.fireDate = [NSDate dateWithTimeIntervalSinceNow: 90];
n2.alertBody = @"two";
[[UIApplication sharedApplication] scheduleLocalNotification: n1];
[[UIApplication sharedApplication] scheduleLocalNotification: n2];
Por lo tanto, incluso si el usuario elige Cerrar cuando aparece la primera notificación, la segunda seguirá siendo entregada.
Por cierto, el método didFinishLaunchingWithOptions
se llama justo después de que se inicie la aplicación, no justo antes de que se cierre. Dicho esto, puedes programar nuevas notificaciones cuando quieras.
También puede utilizar la propiedad repeatInterval
para que se reprogramen indefinidamente. Sin embargo, está limitado a las unidades en NSCalendarUnit
. Ver los documentos para más información.