Wie kann ich lokale Benachrichtigungen einrichten, damit meine App zum Zeitpunkt der Festlegung eine Benachrichtigung / Warnung mit einer benutzerdefinierten Nachricht generiert?
quelle
Wie kann ich lokale Benachrichtigungen einrichten, damit meine App zum Zeitpunkt der Festlegung eine Benachrichtigung / Warnung mit einer benutzerdefinierten Nachricht generiert?
Hier ist ein Beispielcode für LocalNotification , der für mein Projekt funktioniert hat.
Ziel c:
Dieser Codeblock in der AppDelegate
Datei:
- (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");
}
Dieser Codeblock in der .m-Datei von 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];
}
Der obige Code zeigt eine AlertView nach einem Zeitintervall von 7 Sekunden an, wenn auf eine Schaltfläche gedrückt wird, die bindet. startLocalNotification
Wenn sich die Anwendung im Hintergrund befindet, wird sie BadgeNumber
als 10 und mit Standardbenachrichtigungston angezeigt.
Dieser Code funktioniert gut für iOS 7.x und niedriger, aber für iOS 8 wird auf der Konsole der folgende Fehler angezeigt :
Es wurde versucht, eine lokale Benachrichtigung mit einer Warnung zu planen, aber der Benutzer hat keine Berechtigung zum Anzeigen von Warnungen erhalten
Dies bedeutet, dass Sie sich für die lokale Benachrichtigung registrieren müssen. Dies kann erreicht werden mit:
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
[application registerUserNotificationSettings [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
Sie können auch auf ein Blog verweisen, um eine lokale Benachrichtigung zu erhalten.
Schnell:
Ihre AppDelegate.swift
Datei sollte folgendermaßen aussehen:
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
}
Die schnelle Datei (z. B. ViewController.swift
), in der Sie eine lokale Benachrichtigung erstellen möchten, sollte den folgenden Code enthalten:
//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)
. . .
}
. . .
}
Die Art und Weise, wie Sie mit der lokalen Benachrichtigung in iOS 9 und darunter arbeiten, ist in iOS 10 völlig anders.
Der folgende Screenshot aus den Apple-Versionshinweisen zeigt dies.
Sie können das Apple-Referenzdokument für UserNotification verwenden.
Unten finden Sie den Code für die lokale Benachrichtigung:
Ziel c:
In App-delegate.h
Datei verwenden@import UserNotifications;
Der App-Delegat sollte dem UNUserNotificationCenterDelegate
Protokoll entsprechen
In didFinishLaunchingOptions
Verwendung unter Code:
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:^{
}];
}
Erstellen Sie nun eine Schaltfläche in einem beliebigen Ansichts-Controller und verwenden Sie in IBAction den folgenden Code:
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
Datei verwendenimport UserNotifications
UNUserNotificationCenterDelegate
Protokoll entsprechenIn didFinishLaunchingWithOptions
Verwendung unter Code
// 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)
}
Erstellen Sie nun eine Schaltfläche in einem beliebigen Ansichts-Controller und verwenden Sie in IBAction den folgenden Code:
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)
Schreiben Sie in die Datei appdelegate.m den folgenden Code in applicationDidEnterBackground, um die lokale Benachrichtigung zu erhalten
quelle
Das Erstellen lokaler Benachrichtigungen ist ziemlich einfach. Befolgen Sie einfach diese Schritte.
Bitten Sie den Benutzer in der Funktion viewDidLoad () um die Erlaubnis, dass Ihre Apps Benachrichtigungen anzeigen möchten. Hierfür können wir den folgenden Code verwenden.
Anschließend können Sie eine Schaltfläche erstellen und in der Aktionsfunktion den folgenden Code schreiben, um eine Benachrichtigung anzuzeigen.
Die Benachrichtigung wird angezeigt. Klicken Sie einfach auf die Home-Schaltfläche, nachdem Sie auf die Benachrichtigungsschaltfläche getippt haben. Wie wenn die Anwendung im Vordergrund steht, wird die Benachrichtigung nicht angezeigt. Wenn Sie jedoch das iPhone X verwenden, können Sie Benachrichtigungen auch dann anzeigen, wenn sich die App im Vordergrund befindet. Dazu müssen Sie nur einen Delegaten namens UNUserNotificationCenterDelegate hinzufügen
Weitere Informationen finden Sie in diesem Blogbeitrag: iOS Local Notification Tutorial
quelle
Aktualisiert mit Swift 5 Im Allgemeinen verwenden wir drei Arten von lokalen Benachrichtigungen
Hier können Sie eine einfache Textbenachrichtigung oder mit Aktionsschaltfläche und Anhang senden.
Verwenden Sie das UserNotifications-Paket in Ihrer App, um die Benachrichtigungsberechtigung anzufordern, eine Benachrichtigung gemäß der Benutzeraktion AppDelegate selbst vorzubereiten und zu senden und den View Controller zu verwenden, in dem verschiedene Arten von lokalen Benachrichtigungstests aufgelistet sind.
AppDelegate
und ViewController
quelle
Dies funktioniert, aber in iOS 8.0 und höher muss sich Ihre Anwendung für Benutzerbenachrichtigungen registrieren,
-[UIApplication registerUserNotificationSettings:]
bevor Sie UILocalNotifications planen und präsentieren können. Vergessen Sie dies nicht.quelle
iOS 8-Benutzer und höher fügen dies bitte in den App-Delegaten ein, damit es funktioniert.
Und dann würde das Hinzufügen dieser Codezeilen helfen,
quelle
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ApparelsViewControllerHide) name:@"ApparelsViewControllerHide" object:nil];
quelle
Ich gehe davon aus, dass Sie eine Autorisierung beantragt und Ihre App zur Benachrichtigung registriert haben.
Hier ist der Code zum Erstellen lokaler Benachrichtigungen
quelle