SWIFT 发送本地通知

Posted

技术标签:

【中文标题】SWIFT 发送本地通知【英文标题】:SWIFT send local notification 【发布时间】:2018-06-28 10:12:57 【问题描述】:

我正在尝试按照本教程发送本地通知: https://useyourloaf.com/blog/local-notifications-with-ios-10/

我将此代码添加到我的viewDidLoad()

    let center = UNUserNotificationCenter.current()
    let options: UNAuthorizationOptions = [.alert, .sound];
    center.requestAuthorization(options: options) 
        (granted, error) in
        if !granted 
            print("Something went wrong")
        
    
    let content = UNMutableNotificationContent()
    content.title = "Don't forget"
    content.body = "Buy some milk"
    content.sound = UNNotificationSound.default()
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5,
                                                    repeats: false)

    let identifier = "UYLLocalNotification"
    let request = UNNotificationRequest(identifier: identifier,
                                        content: content, trigger: trigger)
    center.add(request, withCompletionHandler:  (error) in
        if let error = error 
            print("error")
        
    )

但是 5 秒过去了,没有显示任何通知。 CompletionHandler 被调用,errornil

【问题讨论】:

当它应该触发时,你的应用是在前台还是后台?检查***.com/questions/49902505/… ? 两种情况我都想要 在后台应该是正常的。在前台,您需要点击链接。此外,为了进行更好的测试,请至少在 30 秒内启动它。 好的,我刚刚注意到它在应用程序处于后台时确实有效。至于链接,我不明白他们的建议,我不熟悉objective-c ***.com/questions/39868193/… ? 【参考方案1】:

如果您想在应用程序处于前台时收到通知,那么您必须在控制器中添加更多代码,

viewDidLoad()末尾添加下面一行

center.delegate = self

这使您的 ViewController 成为通知命中时可以回调的委托。

向委托确认您的视图控制器,(添加UNUserNotificationCenterDelegate

class ViewController: UIViewController, UNUserNotificationCenterDelegate

现在您可以在 ViewController 中编写回调方法了。

编写回调来显示你的通知,你可以在viewDidLoad()之后添加这个方法

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) completionHandler([.alert, .badge, .sound])

即使应用程序在前台,这也会让您的通知弹出。

注意:强烈建议您在 AppDelegate 而不是 ViewController 中注册通知(本地/远程)。

【讨论】:

谢谢,它成功了。只是为了我的理解:我不明白为什么这个 func 有任何效果,谁调用它? 如果应用程序在前台,通知的默认行为是忽略它。因为预计如果需要,开发人员将提供在前台收到通知时要执行的操作。一些开发人员希望显示时尚的警报或希望执行某些操作。无论您是否调用completionHandler,应用程序都会处理您需要显示横幅的.alert.badge 来更新徽章数量(如果有)以及.sound 来播放声音。

以上是关于SWIFT 发送本地通知的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在后台运行时发送本地通知 Swift 2.0

如何在 swift [iOS] 中从特定时间开始发送本地通知 UNTimeInterval

本地通知 swift 3

后台运行的应用程序发送本地通知

Swift - 在后台在应用程序中接收本地通知时执行功能

多次发送多个通知 (Swift)