¿Cómo puedo configurar notificaciones locales para que, en el momento que establezca, mi aplicación genere una notificación / alerta con un mensaje personalizado?
fuente
¿Cómo puedo configurar notificaciones locales para que, en el momento que establezca, mi aplicación genere una notificación / alerta con un mensaje personalizado?
Aquí hay un código de muestra para LocalNotification que funcionó para mi proyecto.
C objetivo:
Este bloque de código en el AppDelegate
archivo:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
// Override point for customization after application launch.
return YES;
}
// This code block is invoked when application is in foreground (active-mode)
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
UIAlertView *notificationAlert = [[UIAlertView alloc] initWithTitle:@"Notification" message:@"This local notification"
delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[notificationAlert show];
// NSLog(@"didReceiveLocalNotification");
}
Este bloque de código en el archivo .m de cualquier ViewController
:
-(IBAction)startLocalNotification { // Bind this method to UIButton action
NSLog(@"startLocalNotification");
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:7];
notification.alertBody = @"This is local notification!";
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.soundName = UILocalNotificationDefaultSoundName;
notification.applicationIconBadgeNumber = 10;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
El código anterior muestra un AlertView después de un intervalo de tiempo de 7 segundos cuando se presiona el botón que se une. startLocalNotification
Si la aplicación está en segundo plano, se muestra BadgeNumber
como 10 y con el sonido de notificación predeterminado.
Este código funciona bien para iOS 7.xy versiones anteriores, pero para iOS 8 mostrará el siguiente error en la consola:
Intentando programar una notificación local con una alerta, pero no ha recibido permiso del usuario para mostrar alertas
Esto significa que debe registrarse para recibir notificaciones locales. Esto se puede lograr usando:
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
[application registerUserNotificationSettings [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
También puede consultar el blog para recibir notificaciones locales.
Rápido:
Su AppDelegate.swift
archivo debería verse así:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Badge | UIUserNotificationType.Alert, categories: nil))
return true
}
El archivo rápido (por ejemplo ViewController.swift
) en el que desea crear una notificación local debe contener el siguiente código:
//MARK: - Button functions
func buttonIsPressed(sender: UIButton) {
println("buttonIsPressed function called \(UIButton.description())")
var localNotification = UILocalNotification()
localNotification.fireDate = NSDate(timeIntervalSinceNow: 3)
localNotification.alertBody = "This is local notification from Swift 2.0"
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.repeatInterval = NSCalendarUnit.CalendarUnitMinute
localNotification.userInfo = ["Important":"Data"];
localNotification.soundName = UILocalNotificationDefaultSoundName
localNotification.applicationIconBadgeNumber = 5
localNotification.category = "Message"
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}
//MARK: - viewDidLoad
class ViewController: UIViewController {
var objButton : UIButton!
. . .
override func viewDidLoad() {
super.viewDidLoad()
. . .
objButton = UIButton.buttonWithType(.Custom) as? UIButton
objButton.frame = CGRectMake(30, 100, 150, 40)
objButton.setTitle("Click Me", forState: .Normal)
objButton.setTitle("Button pressed", forState: .Highlighted)
objButton.addTarget(self, action: "buttonIsPressed:", forControlEvents: .TouchDown)
. . .
}
. . .
}
La forma en que trabaja con la notificación local en iOS 9 y versiones anteriores es completamente diferente en iOS 10.
A continuación, la captura de pantalla de las notas de la versión de Apple muestra esto.
Puede consultar el documento de referencia de Apple para la notificación de usuario.
A continuación se muestra el código para la notificación local:
C objetivo:
En App-delegate.h
uso de archivos@import UserNotifications;
El delegado de la aplicación debe ajustarse al UNUserNotificationCenterDelegate
protocolo
En didFinishLaunchingOptions
uso debajo del código:
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
[self showAlert];
}
}];
-(void)showAlert {
UIAlertController *objAlertController = [UIAlertController alertControllerWithTitle:@"Alert" message:@"show an alert!" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"Ok clicked!");
}];
[objAlertController addAction:cancelAction];
[[[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController] presentViewController:objAlertController animated:YES completion:^{
}];
}
Ahora cree un botón en cualquier controlador de vista y en IBAction use el siguiente código:
UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@“Notification!” arguments:nil];
objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@“This is local notification message!“arguments:nil];
objNotificationContent.sound = [UNNotificationSound defaultSound];
// 4. update application icon badge number
objNotificationContent.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
// Deliver the notification in five seconds.
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:10.f repeats:NO];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@“ten” content:objNotificationContent trigger:trigger];
// 3. schedule localNotification
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@“Local Notification succeeded“);
} else {
NSLog(@“Local Notification failed“);
}
}];
Swift 3:
AppDelegate.swift
uso de archivosimport UserNotifications
UNUserNotificationCenterDelegate
protocoloEn didFinishLaunchingWithOptions
uso debajo del código
// Override point for customization after application launch.
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
if error != nil {
print("Request authorization failed!")
} else {
print("Request authorization succeeded!")
self.showAlert()
}
}
func showAlert() {
let objAlert = UIAlertController(title: "Alert", message: "Request authorization succeeded", preferredStyle: UIAlertControllerStyle.alert)
objAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
//self.presentViewController(objAlert, animated: true, completion: nil)
UIApplication.shared().keyWindow?.rootViewController?.present(objAlert, animated: true, completion: nil)
}
Ahora cree un botón en cualquier controlador de vista y en IBAction use el siguiente código:
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey: "Hello!", arguments: nil)
content.body = NSString.localizedUserNotificationString(forKey: "Hello_message_body", arguments: nil)
content.sound = UNNotificationSound.default()
content.categoryIdentifier = "notify-test"
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
let request = UNNotificationRequest.init(identifier: "notify-test", content: content, trigger: trigger)
let center = UNUserNotificationCenter.current()
center.add(request)
En el archivo appdelegate.m escriba el siguiente código en applicationDidEnterBackground para obtener la notificación local
fuente
Crear notificaciones locales es bastante sencillo. Solo sigue estos pasos.
En la función viewDidLoad (), pida permiso al usuario para que sus aplicaciones quieran mostrar notificaciones. Para ello podemos utilizar el siguiente código.
Luego puede crear un botón, y luego en la función de acción puede escribir el siguiente código para mostrar una notificación.
Se mostrará la notificación, simplemente haga clic en el botón de inicio después de tocar el botón de notificación. Como cuando la aplicación está en primer plano, la notificación no se muestra. Pero si está usando iPhone X. Puede mostrar notificaciones incluso cuando la aplicación está en primer plano. Para esto, solo necesita agregar un delegado llamado UNUserNotificationCenterDelegate
Para obtener más detalles, visite esta publicación de blog: Tutorial de notificación local de iOS
fuente
Actualizado con Swift 5 Generalmente usamos tres tipos de notificaciones locales
Donde puede enviar una notificación de texto simple o con un botón de acción y un archivo adjunto.
Usando el paquete UserNotifications en su aplicación, el siguiente ejemplo Solicite permiso de notificación, prepare y envíe una notificación según la acción del usuario AppDelegate y use el controlador de vista que enumera diferentes tipos de prueba de notificación local.
AppDelegate
y ViewController
fuente
Esto está funcionado, pero en iOS 8.0 y posteriores , su aplicación debe registrarse para
-[UIApplication registerUserNotificationSettings:]
recibir notificaciones de usuario antes de poder programar y presentar UILocalNotifications, no lo olvide.fuente
Usuarios de iOS 8 y superior, inclúyalo en el delegado de la aplicación para que funcione.
Y luego agregar estas líneas de código ayudaría,
fuente
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ApparelsViewControllerHide) name:@"ApparelsViewControllerHide" object:nil];
fuente
Supongo que solicitó autorización y registró su aplicación para notificación.
Aquí está el código para crear notificaciones locales
fuente