阅读 312

[SwiftUI 100 天] 安排本地通知

译自 www.hackingwithswift.com/books/ios-s…

更多内容,欢迎关注公众号 「Swift花园」

喜欢文章?不如来个 🔺💛➕三连?关注专栏,关注我 🚀🚀🚀

安排本地通知

iOS 有一个叫 UserNotifications 的框架,它的功能跟你想的一样:让我们创建可以显示在锁定的屏幕上的通知。 通知有两种,基于创建的位置而不同:本地通知是我们本地安排的,远程通知(通常又称为推送通知)是从某个地方的服务器发送的。

远程通知需要用到一个服务器,因为你需要把消息发给 Apple 的推送通知服务(APNS),由它转发给用户。但本地通知相对来说要简单的多,因为只要用户允许,我们可以任何时候发送消息。

为了尝试本地通知,我们需要导入 UserNotifications:

import UserNotifications
复制代码

接下来我们要添加一些基本结构,然后填充本地通知的代码。使用本地通知需要向用户询问权限,然后才能注册我们想展示的通知。我们将这些动作放进独立的按钮,代码如下:

VStack {
    Button("Request Permission") {
        // first
    }

    Button("Schedule Notification") {
        // second
    }
}
复制代码

好了,基本结构就完成了。接下来我们聚焦第一步:请求授权。通知的形式很多样,最常见的动作时请求展示 alert,badge 和 声音的权限 —— 这并不意味着我们要同时使用所有这些形式,但是通过事先请求权限,我们可以稍后选择。

当我们告诉 iOS 我们想要的通知类型之后,它会提示用户我们的应用要使用通知做些什么。当用户做出选择,我们会得到一个闭包调用,并被告知请求成功与否。

把第一个 // first 注释替换成下面的代码:

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
    if success {
        print("All set!")
    } else if let error = error {
        print(error.localizedDescription)
    }
}
复制代码

一旦用户授予权限,我们就可以开始安排通知了。尽管通知看起来很简单,Apple 还是把它们分成了三部分,以便获得最大的灵活性:

  • 要显示的内容,包括标题,子标题,声音,图像,等。
  • 决定通知何时显示的触发器,它可以是从现在开始的某个时间延迟,或者未来某个具体的日期时间,或者某个位置。
  • 请求组合了内容和触发器,并且还添加了一个唯一的标识符,以便你之后可以编辑或者移除特定的 alert。如果你不需要做编辑或者删除的事情,可以用 UUID().uuidString 来获取一个随机的标识符。

当你在学习通知的时候,最简单的触发器类型是 UNTimeIntervalNotificationTrigger,它可以让我们请求从现在开始若干秒数之后显示的通知。把 // second 注释替换为下面的代码:

let content = UNMutableNotificationContent()
content.title = "Feed the cat"
content.subtitle = "It looks hungry"
content.sound = UNNotificationSound.default

// show this notification five seconds from now
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)

// choose a random identifier
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)

// add our notification request
UNUserNotificationCenter.current().add(request)
复制代码

运行应用,点击第一个按钮请求通知权限,然后点击第二个按钮添加一个实际的通知。

接下来是重要的部分:一旦通知被添加: 在模拟器里点击 Cmd+L 锁屏。几秒后,设备会随着一个声音唤醒,并显示我们的消息 —— 漂亮!


我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~

Swift花园微信公众号