Como posso configurar notificações locais para que, no momento em que configurei, meu aplicativo gere uma notificação / alerta com uma mensagem personalizada?
fonte
Como posso configurar notificações locais para que, no momento em que configurei, meu aplicativo gere uma notificação / alerta com uma mensagem personalizada?
Aqui está o código de amostra para LocalNotification que funcionou para meu projeto.
Objective-C:
Este bloco de código no AppDelegate
arquivo:
- (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 bloco de código no arquivo .m de qualquer 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];
}
O código acima exibe um AlertView após um intervalo de tempo de 7 segundos quando pressionado no botão que liga. startLocalNotification
Se o aplicativo estiver em segundo plano, ele exibeBadgeNumber
como 10 e com som de notificação padrão.
Este código funciona bem para iOS 7.xe inferior, mas para iOS 8 ele exibirá o seguinte erro no console:
Tentativa de agendar uma notificação local com um alerta, mas não recebeu permissão do usuário para exibir alertas
Isso significa que você precisa se registrar para receber notificações locais. Isso pode ser alcançado usando:
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
[application registerUserNotificationSettings [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
Você também pode consultar o blog para notificação local.
Rápido:
Seu AppDelegate.swift
arquivo deve ter a seguinte aparência:
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
}
O arquivo swift (digamos ViewController.swift
) no qual você deseja criar a notificação local deve conter o código abaixo:
//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)
. . .
}
. . .
}
A maneira como você usa a Notificação local no iOS 9 e versões anteriores é completamente diferente no iOS 10.
Abaixo a captura de tela das notas de versão da Apple mostra isso.
Você pode consultar o documento de referência da apple para UserNotification.
Abaixo está o código para notificação local:
Objective-C:
Em App-delegate.h
uso de arquivo@import UserNotifications;
O delegado do aplicativo deve estar em conformidade com o UNUserNotificationCenterDelegate
protocolo
Em didFinishLaunchingOptions
uso o código abaixo:
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:^{
}];
}
Agora crie um botão em qualquer controlador de visualização e no IBAction use o código abaixo:
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 arquivoimport UserNotifications
UNUserNotificationCenterDelegate
protocoloEm didFinishLaunchingWithOptions
uso abaixo do 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)
}
Agora crie um botão em qualquer controlador de visualização e no IBAction use o código abaixo:
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)
No arquivo appdelegate.m, escreva o código a seguir em applicationDidEnterBackground para obter a notificação local
fonte
Criar notificações locais é muito fácil. Basta seguir estas etapas.
Na função viewDidLoad (), peça ao usuário permissão para que seus aplicativos exibam notificações. Para isso, podemos usar o seguinte código.
Em seguida, você pode criar um botão e, em seguida, na função de ação, você pode escrever o código a seguir para exibir uma notificação.
A notificação será exibida, basta clicar no botão home após tocar no botão de notificação. Como quando o aplicativo está em primeiro plano, a notificação não é exibida. Mas se você estiver usando o iPhone X. Você pode exibir notificações mesmo quando o aplicativo está em primeiro plano. Para isso, você só precisa adicionar um delegado chamado UNUserNotificationCenterDelegate
Para obter mais detalhes, visite esta postagem do blog: Tutorial de notificação local do iOS
fonte
Atualizado com Swift 5 Geralmente usamos três tipos de notificações locais
Onde você pode enviar notificação de texto simples ou com botão de ação e anexo.
Usando o pacote UserNotifications em seu aplicativo, o exemplo a seguir Solicita permissão de notificação, prepara e envia notificação de acordo com a ação do usuário AppDelegate em si e usa o controlador de exibição listando diferentes tipos de teste de notificação local.
AppDelegate
e ViewController
fonte
Isso funcionou, mas no iOS 8.0 e posterior , seu aplicativo deve se registrar para
-[UIApplication registerUserNotificationSettings:]
receber notificações do usuário antes de poder agendar e apresentar UILocalNotifications, não se esqueça disso.fonte
Usuários do iOS 8 e superior, inclua isso no delegado do aplicativo para que funcione.
E adicionar essas linhas de código ajudaria,
fonte
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ApparelsViewControllerHide) name:@"ApparelsViewControllerHide" object:nil];
fonte
Estou supondo que você solicitou autorização e registrou seu aplicativo para notificação.
Aqui está o código para criar notificações locais
fonte