Ios 如何创建本地通知?

Ios 如何创建本地通知?,ios,Ios,如何设置本地通知,以便在设置时,我的应用程序生成带有自定义消息的通知/警报?在appdelegate.m文件中,在ApplicationIdentinterBackground中编写以下代码以获取本地通知 - (void)applicationDidEnterBackground:(UIApplication *)application { UILocalNotification *notification = [[UILocalNotification alloc]init]; n

如何设置本地通知,以便在设置时,我的应用程序生成带有自定义消息的通知/警报?

在appdelegate.m文件中,在ApplicationIdentinterBackground中编写以下代码以获取本地通知

- (void)applicationDidEnterBackground:(UIApplication *)application
{
   UILocalNotification *notification = [[UILocalNotification alloc]init];
   notification.repeatInterval = NSDayCalendarUnit;
   [notification setAlertBody:@"Hello world"];
   [notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:1]];
   [notification setTimeZone:[NSTimeZone  defaultTimeZone]];
   [application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
}
下面是适用于我的项目的LocalNotification的示例代码

目标-C:

AppDelegate
文件中的此代码块:

- (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");
    }
任何
ViewController
的.m文件中的此代码块:

-(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];    
}
当按下绑定
startLocalNotification
的按钮时,上述代码在7秒的时间间隔后显示AlertView。如果应用程序位于后台,则将
BadgeNumber
显示为10,并带有默认通知声音

此代码适用于iOS 7.x及以下版本,但对于iOS 8,它将在控制台上提示以下错误:

正在尝试安排带有警报的本地通知,但尚未收到用户显示警报的权限

这意味着您需要注册本地通知。这可以通过以下方式实现:

if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){

    [application registerUserNotificationSettings [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
您还可以参考本地通知

Swift:

您的
AppDelegate.swift
文件应如下所示:

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
}
要在其中创建本地通知的swift文件(例如
ViewController.swift
)应包含以下代码:

//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)

        . . .
    }

    . . .
}
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:^{            
    }];

}
您在iOS 9及以下版本中处理本地通知的方式与iOS 10完全不同。

下面是苹果发行说明中的屏幕抓图

您可以参考UserNotification

以下是本地通知的代码:

目标-C:

  • App delegate.h
    文件中使用
    @import UserNotifications

  • 应用程序委派应符合
    UnuseNotificationCenterDelegate
    协议

  • didfishlaunchingoptions
    中,使用以下代码:

    //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)
    
            . . .
        }
    
        . . .
    }
    
    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:^{            
        }];
    
    }
    
  • 现在,在任何视图控制器中创建一个按钮,并在iAction中使用以下代码:

    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“);
        }
    }];
    
    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)
    
  • Swift 3:

  • AppDelegate.swift
    文件中使用
    import UserNotifications
  • Appdelegate应符合
    UnuseNotificationCenterDelegate
    协议
  • didfishlaunchingwithoptions中
    使用下面的代码

    // 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)
    }
    
  • 现在,在任何视图控制器中创建一个按钮,并在iAction中使用以下代码:

    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“);
        }
    }];
    
    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)
    
  • [[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(ApparelViewControllerHide)名称:@“ApparelViewControllerHide”对象:nil]

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
       UILocalNotification *notification = [[UILocalNotification alloc]init];
       notification.repeatInterval = NSDayCalendarUnit;
       [notification setAlertBody:@"Hello world"];
       [notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:1]];
       [notification setTimeZone:[NSTimeZone  defaultTimeZone]];
       [application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
    }
    

    这是可行的,但在iOS 8.0及更高版本中,您的应用程序必须使用
    -[UIApplication registerUserNotificationSettings:][/code>注册用户通知,才能安排和显示UILocalNotifications,请不要忘记这一点。

    iOS 8及更高版本的用户,请将此应用程序内委托包括在内,以使其正常工作

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)])
        {
            [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
        }
    
        return YES;
    }
    
    然后添加这些代码行会有所帮助

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        UILocalNotification *notification = [[UILocalNotification alloc]init];
        notification.repeatInterval = NSDayCalendarUnit;
        [notification setAlertBody:@"Hello world"];
        [notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:1]];
        [notification setTimeZone:[NSTimeZone  defaultTimeZone]];
        [application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
    
    }
    

    创建本地通知非常简单。只需遵循以下步骤

  • 函数的作用是:请求用户允许您的应用程序显示通知。为此,我们可以使用以下代码

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge], completionHandler: {didAllow, error in
    })
    
  • 然后可以创建一个按钮,然后在action函数中编写以下代码来显示通知

    //creating the notification content
    let content = UNMutableNotificationContent()
    
    //adding title, subtitle, body and badge
    content.title = "Hey this is Simplified iOS"
    content.subtitle = "iOS Development is fun"
    content.body = "We are learning about iOS Local Notification"
    content.badge = 1
    
    //getting the notification trigger
    //it will be called after 5 seconds
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
    
    //getting the notification request
    let request = UNNotificationRequest(identifier: "SimplifiedIOSNotification", content: content, trigger: trigger)
    
    //adding the notification to notification center
    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
    
  • 将显示通知,点击通知按钮后只需单击主页按钮。当应用程序位于前台时,不会显示通知。但如果您使用的是iPhone X,则即使应用程序位于前台,也可以显示通知。为此,您只需添加一个名为UNUserNotificationCenterDelegate的委托

  • import UIKit
    import UserNotifications
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    
        let notificationCenter = UNUserNotificationCenter.current()
        var window: UIWindow?
    
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
            //Confirm Delegete and request for permission
            notificationCenter.delegate = self
            let options: UNAuthorizationOptions = [.alert, .sound, .badge]
            notificationCenter.requestAuthorization(options: options) {
                (didAllow, error) in
                if !didAllow {
                    print("User has declined notifications")
                }
            }
    
            return true
        }
    
        func applicationWillResignActive(_ application: UIApplication) {
        }
        func applicationDidEnterBackground(_ application: UIApplication) {
        }
        func applicationWillEnterForeground(_ application: UIApplication) {
        }
        func applicationWillTerminate(_ application: UIApplication) {
        }
        func applicationDidBecomeActive(_ application: UIApplication) {
            UIApplication.shared.applicationIconBadgeNumber = 0
        }
    
    
        //MARK: Local Notification Methods Starts here
    
        //Prepare New Notificaion with deatils and trigger
        func scheduleNotification(notificationType: String) {
    
            //Compose New Notificaion
            let content = UNMutableNotificationContent()
            let categoryIdentifire = "Delete Notification Type"
            content.sound = UNNotificationSound.default
            content.body = "This is example how to send " + notificationType
            content.badge = 1
            content.categoryIdentifier = categoryIdentifire
    
            //Add attachment for Notification with more content
            if (notificationType == "Local Notification with Content")
            {
                let imageName = "Apple"
                guard let imageURL = Bundle.main.url(forResource: imageName, withExtension: "png") else { return }
                let attachment = try! UNNotificationAttachment(identifier: imageName, url: imageURL, options: .none)
                content.attachments = [attachment]
            }
    
            let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
            let identifier = "Local Notification"
            let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
    
            notificationCenter.add(request) { (error) in
                if let error = error {
                    print("Error \(error.localizedDescription)")
                }
            }
    
            //Add Action button the Notification
            if (notificationType == "Local Notification with Action")
            {
                let snoozeAction = UNNotificationAction(identifier: "Snooze", title: "Snooze", options: [])
                let deleteAction = UNNotificationAction(identifier: "DeleteAction", title: "Delete", options: [.destructive])
                let category = UNNotificationCategory(identifier: categoryIdentifire,
                                                      actions: [snoozeAction, deleteAction],
                                                      intentIdentifiers: [],
                                                      options: [])
                notificationCenter.setNotificationCategories([category])
            }
        }
    
        //Handle Notification Center Delegate methods
        func userNotificationCenter(_ center: UNUserNotificationCenter,
                                    willPresent notification: UNNotification,
                                    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
            completionHandler([.alert, .sound])
        }
    
        func userNotificationCenter(_ center: UNUserNotificationCenter,
                                    didReceive response: UNNotificationResponse,
                                    withCompletionHandler completionHandler: @escaping () -> Void) {
            if response.notification.request.identifier == "Local Notification" {
                print("Handling notifications with the Local Notification Identifier")
            }
            completionHandler()
        }
    }
    

    有关更多详细信息,请访问此博文:

    更新为Swift 5通常我们使用三种本地通知

  • 简单本地通知
  • 带操作的本地通知
  • 带内容的本地通知
  • 在这里,您可以发送简单的文本通知,也可以使用操作按钮和附件

    在应用程序中使用UserNotifications包,如下示例 请求通知权限,根据用户操作AppDelegate本身准备和发送通知,并使用列出不同类型本地通知测试的视图控制器

    AppDelegate

    import UIKit
    import UserNotifications
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    
        let notificationCenter = UNUserNotificationCenter.current()
        var window: UIWindow?
    
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
            //Confirm Delegete and request for permission
            notificationCenter.delegate = self
            let options: UNAuthorizationOptions = [.alert, .sound, .badge]
            notificationCenter.requestAuthorization(options: options) {
                (didAllow, error) in
                if !didAllow {
                    print("User has declined notifications")
                }
            }
    
            return true
        }
    
        func applicationWillResignActive(_ application: UIApplication) {
        }
        func applicationDidEnterBackground(_ application: UIApplication) {
        }
        func applicationWillEnterForeground(_ application: UIApplication) {
        }
        func applicationWillTerminate(_ application: UIApplication) {
        }
        func applicationDidBecomeActive(_ application: UIApplication) {
            UIApplication.shared.applicationIconBadgeNumber = 0
        }
    
    
        //MARK: Local Notification Methods Starts here
    
        //Prepare New Notificaion with deatils and trigger
        func scheduleNotification(notificationType: String) {
    
            //Compose New Notificaion
            let content = UNMutableNotificationContent()
            let categoryIdentifire = "Delete Notification Type"
            content.sound = UNNotificationSound.default
            content.body = "This is example how to send " + notificationType
            content.badge = 1
            content.categoryIdentifier = categoryIdentifire
    
            //Add attachment for Notification with more content
            if (notificationType == "Local Notification with Content")
            {
                let imageName = "Apple"
                guard let imageURL = Bundle.main.url(forResource: imageName, withExtension: "png") else { return }
                let attachment = try! UNNotificationAttachment(identifier: imageName, url: imageURL, options: .none)
                content.attachments = [attachment]
            }
    
            let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
            let identifier = "Local Notification"
            let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
    
            notificationCenter.add(request) { (error) in
                if let error = error {
                    print("Error \(error.localizedDescription)")
                }
            }
    
            //Add Action button the Notification
            if (notificationType == "Local Notification with Action")
            {
                let snoozeAction = UNNotificationAction(identifier: "Snooze", title: "Snooze", options: [])
                let deleteAction = UNNotificationAction(identifier: "DeleteAction", title: "Delete", options: [.destructive])
                let category = UNNotificationCategory(identifier: categoryIdentifire,
                                                      actions: [snoozeAction, deleteAction],
                                                      intentIdentifiers: [],
                                                      options: [])
                notificationCenter.setNotificationCategories([category])
            }
        }
    
        //Handle Notification Center Delegate methods
        func userNotificationCenter(_ center: UNUserNotificationCenter,
                                    willPresent notification: UNNotification,
                                    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
            completionHandler([.alert, .sound])
        }
    
        func userNotificationCenter(_ center: UNUserNotificationCenter,
                                    didReceive response: UNNotificationResponse,
                                    withCompletionHandler completionHandler: @escaping () -> Void) {
            if response.notification.request.identifier == "Local Notification" {
                print("Handling notifications with the Local Notification Identifier")
            }
            completionHandler()
        }
    }
    
    ViewController

    import UIKit
    
    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
        var appDelegate = UIApplication.shared.delegate as? AppDelegate
        let notifications = ["Simple Local Notification",
                             "Local Notification with Action",
                             "Local Notification with Content",]
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        // MARK: - Table view data source
    
         func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return notifications.count
        }
    
         func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
            cell.textLabel?.text = notifications[indexPath.row]
            return cell
        }
    
         func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let notificationType = notifications[indexPath.row]
            let alert = UIAlertController(title: "",
                                          message: "After 5 seconds " + notificationType + " will appear",
                                          preferredStyle: .alert)
            let okAction = UIAlertAction(title: "Okay, I will wait", style: .default) { (action) in
                self.appDelegate?.scheduleNotification(notificationType: notificationType)
            }
            alert.addAction(okAction)
            present(alert, animated: true, completion: nil)
        }
    }
    

    我假设您已请求授权并注册了应用程序以获得通知

    下面是创建本地通知的代码

    @available(iOS 10.0, *)
        func send_Noti()
        {
            //Create content for your notification 
            let content = UNMutableNotificationContent()
            content.title = "Test"
            content.body = "This is to test triggering of notification"
    
            //Use it to define trigger condition
            var date = DateComponents()
            date.calendar = Calendar.current
            date.weekday = 5 //5 means Friday
            date.hour = 14 //Hour of the day
            date.minute = 10 //Minute at which it should be sent
    
    
            let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
            let uuid = UUID().uuidString
            let req = UNNotificationRequest(identifier: uuid, content: content, trigger: trigger)
    
            let notificationCenter = UNUserNotificationCenter.current()
            notificationCenter.add(req) { (error) in
                print(error)
            }
        }
    

    当您仅使用setScheduledLocalNotifications:计划一个通知时:是不必要的。scheduleLocalNotification方法接受一个参数-要调度的通知:我是否需要在按下按钮时运行funcButtonIsPressed?如果我希望应用程序在默认情况下每周发出通知,我是否应该将其添加到初始VC的viewDidLoad中?另外,为什么您的AppDelegate.swift文件有两次DidFinishLaunchWithOptions?“导入用户通知”将其导入到您的ViewController-[UIApplication registerUserNotificationSettings:]将覆盖推送通知设置。因此,如果使用推送可操作通知,请小心。是否可以在太平洋时间每天重复通知,直到应用程序打开为止?@Kashfakhan您能告诉我,当应用程序处于后台且应用程序处于接收通知状态时,会执行哪种方法?