有很多需要推送通知的情况,但是关于SwiftUI的通知推送说的人却不多,这里就说一些相关内容。一方面是为了自己能以后再查阅,另外一方面也是想能帮到有需要的人。
本文将讲述:
- 基础款推送(最常见的通知)
- 定时型推送(例如闹铃,纪念日等)
在讲述具体操作之前,需要注意一点:通知不能出现在app打开的时候。测试的时候使用模拟器或者实机测试,按完按钮要退出app一下。
基础款推送
首先来讲述一下最基础的推送,也是最常用的。样式如下: 代码如下:
import SwiftUI
import UserNotifications
func setNotification(){
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granted, _) in
if granted {
print("用户同意我们推送通知")
}else{
print("用户不同意")
}
}
}
func makeNotification(){
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let content = UNMutableNotificationContent()
content.title = "通知的标题"
content.body = "通知的内容"
content.sound = UNNotificationSound.default
let request = UNNotificationRequest(identifier: "通知名称", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
struct ContentView: View {
var body: some View {
VStack {
Button(action: {
setNotification()
}) {
Text("获取推送权限")
.padding()
}
Button(action: {
makeNotification()
}) {
Text("推送通知")
.padding()
}
}
}
}
定时推送通知
有时候闹钟或者To-Do类型的软件需要定时推送通知,样式和实现基础款差不多,只是触发器和提示音部分有点区别(需要注意这个自定义的提示音不能超过30秒,不然系统会播放默认声音),代码如下:
import SwiftUI
import UserNotifications
func setNotification(){
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granted, _) in
if granted {
print("用户同意我们推送通知")
}else{
print("用户不同意")
}
}
}
func makeNotification(){
var dateComponents = DateComponents()
dateComponents.hour = 6
dateComponents.minute = 30
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let content = UNMutableNotificationContent()
content.title = "通知的标题"
content.body = "通知的内容"
content.sound = UNNotificationSound.init(named: UNNotificationSoundName("ring.m4a"))
let request = UNNotificationRequest(identifier: "通知名称", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
struct ContentView: View {
var body: some View {
VStack {
Button(action: {
setNotification()
}) {
Text("获取推送权限")
.padding()
}
Button(action: {
makeNotification()
}) {
Text("推送通知")
.padding()
}
}
}
}
我们还可以调整通知音量等等属性,自己可以看看哦~
|