SwiftUI:本地通知

iOS具有一个名为UserNotifications的框架,该框架几乎可以完全满足您的期望:让我们为用户创建可以在锁定屏幕上显示的通知。我们使用两种类型的通知,它们根据创建位置的不同而不同:本地通知是我们在本地调度的通知,远程通知(通常称为推送通知)是从某处的服务器发送的。

远程通知需要服务器才能工作,因为您将消息发送到Apple的推送通知服务(APNS),然后该服务将其转发给用户。但是相比之下,本地通知非常好用,因为只要用户允许,我们就可以随时发送任何消息。

要尝试此操作,请在 ContentView.swift 顶部附近添加一个额外的导入:

import UserNotifications

接下来,我们将建立一些基本结构,并在其中填充本地通知代码。使用本地通知需要先征求用户的许可,然后实际注册我们要显示的通知。我们会将所有这些操作放入VStack内的单独按钮中,因此请立即将其放入ContentView结构体中:

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

    Button("Schedule Notification") {
        // second
    }
}

好的,我们的设置已经完成,因此我们将重点放在两项重要工作中的第一个:请求授权以显示警报。通知可以采用多种形式,但是最常见的做法是要求获得显示横幅,声音和标记的权限——这并不意味着我们需要同时使用所有这些,而是​​要先获得权限前意味着我们以后可以选择。

当我们告诉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仍将通知分为三部分,以使其具有最大的灵活性:

  1. 内容就是应该显示的内容,可以是标题,子标题,声音,图像等。
  2. 触发器确定应在何时显示通知,并且可以是从现在起的秒数,将来的日期和时间或位置。
  3. 该请求结合了内容和触发器,还添加了唯一的标识符,因此您以后可以编辑或删除特定警报。如果您不想编辑或删除内容,请使用UUID().uuidString获取随机标识符。

当您只是在学习通知时,最容易使用的触发器类型是UNTimeIntervalNotificationTrigger,它使我们可以要求从现在起的几秒钟内显示通知。因此,将// second注释替换为:

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

// 从现在起五秒钟显示此通知
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)

// 选择一个随机标识符
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)

// 添加我们的通知请求
UNUserNotificationCenter.current().add(request)

如果您现在运行应用程序,请按第一个按钮以请求通知权限,然后按第二个按钮以添加实际通知。

现在,重要的部分是:一旦添加了通知,请在模拟器中按Cmd + L锁定屏幕。几秒钟后,设备应该会发出声音,并显示我们的信息——nice!

译自 Scheduling local notifications

你可能感兴趣的:(SwiftUI:本地通知)