recuperar - Lanzar una notificación local en un momento específico en iOS
recuperar notificaciones iphone (2)
Bueno, en iOS 10, Apple ha dejado de utilizar UILocalNotification, lo que significa que es hora de familiarizarse con un nuevo marco de notificaciones.
Configuración Esta es una publicación larga, así que comencemos fácilmente importando el nuevo marco de notificaciones:
// Swift
import UserNotifications
// Objective-C (with modules enabled)
@import UserNotifications;
Usted administra las notificaciones a través de un objeto UNUserNotificationCenter compartido:
// Swift
let center = UNUserNotificationCenter.current()
// Objective-C
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
Autorización Al igual que con el marco de notificaciones anterior, debe tener el permiso del usuario para los tipos de notificación que su aplicación utilizará. Realice la solicitud al principio de su ciclo de vida de la aplicación, como en la aplicación: didFinishLaunchingWithOptions :. La primera vez que su aplicación solicita autorización, el sistema muestra al usuario una alerta, luego de eso pueden administrar los permisos desde la configuración:
// Swift
let options: UNAuthorizationOptions = [.alert, .sound];
// Objective-C
UNAuthorizationOptions options = UNAuthorizationOptionAlert + UNAuthorizationOptionSound;
Realiza la solicitud de autorización real utilizando el centro de notificaciones compartido:
// Swift
center.requestAuthorization(options: options) {
(granted, error) in
if !granted {
print("Something went wrong")
}
}
// Objective-C
[center requestAuthorizationWithOptions:options
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!granted) {
NSLog(@"Something went wrong");
}
}];
El marco llama al controlador de finalización con un booleano que indica si se otorgó el acceso y un objeto de error que será nulo si no se produjo ningún error.
Nota: El usuario puede cambiar la configuración de notificaciones para su aplicación en cualquier momento. Puede verificar la configuración permitida con getNotificationSettings. Esto llama a un bloque de finalización de forma asincrónica con un objeto UNNotificationSettings que puede usar para verificar el estado de la autorización o las configuraciones de notificación individuales:
// Swift
center.getNotificationSettings { (settings) in
if settings.authorizationStatus != .authorized {
// Notifications not allowed
}
}
// Objective-C
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus != UNAuthorizationStatusAuthorized) {
// Notifications not allowed
}
}];
Crear una solicitud de notificación Una solicitud de notificación UNNotificationRequest contiene contenido y una condición desencadenante:
Contenido de notificación
El contenido de una notificación es una instancia de UNMutableNotificationContent con las siguientes propiedades establecidas según sea necesario:
title: Cadena que contiene el motivo principal de la alerta.
subtítulo: Cadena que contiene un subtítulo de alerta (si es necesario)
cuerpo: Cadena que contiene el texto del mensaje de alerta
insignia: número para mostrar en el ícono de la aplicación.
sonido: un sonido para jugar cuando se entrega la alerta. Use UNNotificationSound.default () o cree un sonido personalizado desde un archivo. launchImageName: nombre de una imagen de inicio para usar si su aplicación se lanza en respuesta a una notificación.
userInfo: un diccionario de información personalizada para pasar los archivos adjuntos de notificación: una matriz de objetos UNNotificationAttachment. Úselo para incluir contenido de audio, imagen o video.
Tenga en cuenta que al localizar las cadenas de alerta como el título, es mejor utilizar localizedUserNotificationString (forKey: arguments :), que demora la carga de la localización hasta que se entregue la notificación.
Un ejemplo rápido:
// Swift
let content = UNMutableNotificationContent()
content.title = "Don''t forget"
content.body = "Buy some milk"
content.sound = UNNotificationSound.default()
// Objective-C
UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.title = @"Don''t forget";
content.body = @"Buy some milk";
content.sound = [UNNotificationSound defaultSound];
Activador de notificaciones
Desencadena una notificación según la hora, el calendario o la ubicación. El disparador puede estar repitiendo:
Intervalo de tiempo: Programe una notificación por unos segundos más tarde. Por ejemplo para activar en cinco minutos:
// Swift
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 300,
repeats: false)
// Objective-C
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:300
repeats:NO];
Calendario: Dispara en una fecha y hora específica. El desencadenante se crea utilizando un objeto de componentes de fecha que facilita ciertos intervalos de repetición. Para convertir una fecha en sus componentes de fecha, use el calendario actual. Por ejemplo:
// Swift
let date = Date(timeIntervalSinceNow: 3600)
let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: date)
// Objective-C
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:3600];
NSDateComponents *triggerDate = [[NSCalendar currentCalendar]
components:NSCalendarUnitYear +
NSCalendarUnitMonth + NSCalendarUnitDay +
NSCalendarUnitHour + NSCalendarUnitMinute +
NSCalendarUnitSecond fromDate:date];
Para crear el activador a partir de los componentes de la fecha:
// Swift
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate,
repeats: false)
// Objective-C
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:triggerDate
repeats:NO];
Para crear un disparador que se repita en un intervalo determinado, use el conjunto correcto de componentes de fecha. Por ejemplo, para que la notificación se repita diariamente al mismo tiempo, solo necesitamos la hora, los minutos y los segundos:
let triggerDaily = Calendar.current.dateComponents([hour,.minute,.second,], from: date)
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDaily, repeats: true)
Para que se repita semanalmente al mismo tiempo, también necesitamos el día de la semana:
let triggerWeekly = Calendar.current.dateComponents([.weekday,hour,.minute,.second,], from: date)
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerWeekly, repeats: true)
Programación
Con el contenido y el desencadenador listos, creamos una nueva solicitud de notificación y la agregamos al centro de notificaciones. Cada solicitud de notificación requiere un identificador de cadena para referencia futura:
// Swift
let identifier = "UYLLocalNotification"
let request = UNNotificationRequest(identifier: identifier,
content: content, trigger: trigger)
center.add(request, withCompletionHandler: { (error) in
if let error = error {
// Something went wrong
}
})
// Objective-C
NSString *identifier = @"UYLLocalNotification";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier
content:content trigger:trigger]
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Something went wrong: %@",error);
}
}];
Intento crear un temporizador que active una notificación local para que se active en el momento que el usuario haya establecido. El problema que estoy teniendo es que no puedo encontrar una manera de poder configurar la notificación local para que suene a las 7:00 p.m. Casi todos los métodos encontrados al investigar este problema involucraron la activación de la notificación local en una cierta cantidad de tiempo a partir de la fecha actual. Estoy tratando de permitir que el usuario seleccione 7:00 PM y luego haga que la notificación se apague en ese momento. Lógicamente tiene sentido que esto se pueda lograr teniendo el tiempo final (valor seleccionado por el usuario) - hora actual que le daría la diferencia de tiempo. Sin embargo, no estoy del todo seguro de cómo hacer esto.
Cualquier ayuda con respecto al tema será muy apreciada, gracias. A continuación se muestra el código que estoy utilizando para activar una notificación local.
let center = UNUserNotificationCenter.current()
content.title = storedMessage
content.body = "Drag down to reset or disable alarm"
content.categoryIdentifier = "alarm"
content.userInfo = ["customData": "fizzbuzz"]
content.sound = UNNotificationSound.init(named: "1.mp3")
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: timeAmount, repeats: false)
let request = UNNotificationRequest(identifier: "requestAlarm", content: content, trigger: trigger)
center.add(request)
center.delegate = self
prueba esto
` let dateformateer = NSDateFormatter()
dateformateer.timeStyle = .ShortStyle
let notification = UILocalNotification()
var datecomponent = NSDateComponents()
datecomponent = NSCalendar.currentCalendar().components([NSCalendarUnit.Day,NSCalendarUnit.Month,NSCalendarUnit.Hour,NSCalendarUnit.Year, NSCalendarUnit.Minute],fromDate: Datepicker.date)
var fixdate = NSDate()
fixdate = NSCalendar.currentCalendar().dateFromComponents(datecomponent)!
notification.fireDate = fixdate
notification.alertTitle = "Title"
notification.alertBody = "Body"
UIApplication.sharedApplication().scheduleLocalNotification(notification)`