Swift UI 2.0: 如何设置这个通知?
Swift UI 2.0: How can to set up this Notification?
首先,我从未在应用程序中使用过通知。我已经完成了教程,但整件事让我很困惑。
我创建了一个名为 Notify.swift 的 SwiftUI 文件。我希望用户能够设置通知时间,提醒他们在指定时间执行任务,如下图所示:
在图像中看到时间的地方,我创建了一个 DatePicker 来选择通知时间:
VStack {
Button(action: {}) {
HStack {
DatePicker(" Select a time ....",
selection: $wakeup, displayedComponents: .hourAndMinute)
.font(.title2)
.accentColor(Color(.white))
}
}.background(Color(.black))
}
.frame(width: .infinity, height: 40, alignment: .center)
.padding()
当用户点击创建按钮设置通知时,它应该在那个特定的时间设置通知(所有时间,除非改变)。这是我需要发生但不知道该怎么做的事情:
如果为 8:30am 设置了通知时间,如图所示,并且用户选择了创建,则会设置一个通知,并应发送给用户执行任何任务,可能带有声音和在指定时间发消息。
我知道有不同类型的通知:本地、用户、Apple 推送等,但我不知道这属于哪种类型或如何操作。
这是通知还是警报?
您可以为此使用本地通知。这里我做了一个函数让你触发通知。首先,检查该时间是否早于当前时间。然后通知将在明天,我们将在日期中增加一天。您可以根据需要更改标题,body。
确保将 DatePicker 包裹在按钮外,否则当您单击 DatePicker 时它总是会触发通知。
func scheduleNotification() -> Void {
let content = UNMutableNotificationContent()
content.title = "Your title"
content.body = "Your body"
var reminderDate = wakeup
if reminderDate < Date() {
if let addedValue = Calendar.current.date(byAdding: .day, value: 1, to: reminderDate) {
reminderDate = addedValue
}
}
let comps = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: reminderDate)
let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: false)
let request = UNNotificationRequest(identifier: "alertNotificationUnique", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print("Uh oh! We had an error: \(error)")
}
}
}
您还需要像这样申请通知权限:
func requestPush() -> Void {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
if success {
print("All set!")
} else if let error = error {
print(error.localizedDescription)
}
}
}
这是你的按钮:
VStack {
Button(action: {
scheduleNotification()
}) {
Text("Save notification")
}
DatePicker("Select a time ....",
selection: $wakeup, displayedComponents: .hourAndMinute)
.font(.title2)
.accentColor(Color(.white))
}
首先,我从未在应用程序中使用过通知。我已经完成了教程,但整件事让我很困惑。
我创建了一个名为 Notify.swift 的 SwiftUI 文件。我希望用户能够设置通知时间,提醒他们在指定时间执行任务,如下图所示:
在图像中看到时间的地方,我创建了一个 DatePicker 来选择通知时间:
VStack {
Button(action: {}) {
HStack {
DatePicker(" Select a time ....",
selection: $wakeup, displayedComponents: .hourAndMinute)
.font(.title2)
.accentColor(Color(.white))
}
}.background(Color(.black))
}
.frame(width: .infinity, height: 40, alignment: .center)
.padding()
当用户点击创建按钮设置通知时,它应该在那个特定的时间设置通知(所有时间,除非改变)。这是我需要发生但不知道该怎么做的事情:
如果为 8:30am 设置了通知时间,如图所示,并且用户选择了创建,则会设置一个通知,并应发送给用户执行任何任务,可能带有声音和在指定时间发消息。
我知道有不同类型的通知:本地、用户、Apple 推送等,但我不知道这属于哪种类型或如何操作。
这是通知还是警报?
您可以为此使用本地通知。这里我做了一个函数让你触发通知。首先,检查该时间是否早于当前时间。然后通知将在明天,我们将在日期中增加一天。您可以根据需要更改标题,body。
确保将 DatePicker 包裹在按钮外,否则当您单击 DatePicker 时它总是会触发通知。
func scheduleNotification() -> Void {
let content = UNMutableNotificationContent()
content.title = "Your title"
content.body = "Your body"
var reminderDate = wakeup
if reminderDate < Date() {
if let addedValue = Calendar.current.date(byAdding: .day, value: 1, to: reminderDate) {
reminderDate = addedValue
}
}
let comps = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: reminderDate)
let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: false)
let request = UNNotificationRequest(identifier: "alertNotificationUnique", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print("Uh oh! We had an error: \(error)")
}
}
}
您还需要像这样申请通知权限:
func requestPush() -> Void {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
if success {
print("All set!")
} else if let error = error {
print(error.localizedDescription)
}
}
}
这是你的按钮:
VStack {
Button(action: {
scheduleNotification()
}) {
Text("Save notification")
}
DatePicker("Select a time ....",
selection: $wakeup, displayedComponents: .hourAndMinute)
.font(.title2)
.accentColor(Color(.white))
}