[SwiftUI 100 天] 推送通知
2020/7/8 23:08:35
本文主要是介绍[SwiftUI 100 天] 推送通知,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
译自 www.hackingwithswift.com/books/ios-s…
更多内容,欢迎关注公众号 「Swift花园」
喜欢文章?不如来个 🔺💛➕三连?关注专栏,关注我 🚀🚀🚀
推送通知
对于应用的最后一部分,我们还将添加一个上下文菜单,让用户可以选择被提醒联络某个特定的人。它会用到 iOS 的 UserNotifications 框架来创建本地通知。
有趣的地方在于我们安排本地通知的方式。记住,第一次使用我们需要使用 requestAuthorization()
来显式地请求在锁定的屏幕上显示通知的权限,后续也要小心用户改变主意,禁用通知权限。
一个选项是每当我们发送通知之前,都调用 requestAuthorization()
。当然,这个方法一定奏效:第一次会显示弹窗,其后每次都会根据结果返回成功或者失败。
不过,在即将完成这个项目的节点,我想向你展示一个更强大的替代方案:我们可以请求当前的授权设置,然后决定是安排通知还是请求授权。采用这个方案的原因是,相比简单重复地请求权限,设置对象可以返回诸如 alertSetting
等检查我们能否显示 alert 的属性 —— 用户可能限制我们只能在应用图标上显示角标。
因此,我们将调用 getNotificationSettings()
来读取当前的通知设置。如果允许展示通知,我们就显示通知,如果不允许,我们就请求权限。相比重复代码计划通知,我们要把它放进闭包,以便在任何场景都可以使用。
先添加下面这条 import 到 ProspectsView.swift:
import UserNotifications 复制代码
然后添加这个方法到 ProspectsView
:
func addNotification(for prospect: Prospect) { let center = UNUserNotificationCenter.current() let addRequest = { let content = UNMutableNotificationContent() content.title = "Contact \(prospect.name)" content.subtitle = prospect.emailAddress content.sound = UNNotificationSound.default var dateComponents = DateComponents() dateComponents.hour = 9 let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false) let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger) center.add(request) } // more code to come } 复制代码
以上就是为当前 prospect 创建通知的闭包,我们可以按需调用。我们使用 UNCalendarNotificationTrigger
作为触发器,它能让我们指定一个自定义的 DateComponents
实例,把小时组件设置为 9,也就是说,下一次到早上 9 点时触发通知。
提示: 出于测试的目的,我建议你先用下面的代码在 5 秒后触发 alert:
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) 复制代码
然后一起使用 getNotificationSettings()
和 requestAuthorization()
,确保我们只在被允许的情况下安排通知。代码如下:
center.getNotificationSettings { settings in if settings.authorizationStatus == .authorized { addRequest() } else { center.requestAuthorization(options: [.alert, .badge, .sound]) { success, error in if success { addRequest() } else { print("D'oh") } } } } 复制代码
然后添加一个按钮到上下文菜单:
if !prospect.isContacted { Button("Remind Me") { self.addNotification(for: prospect) } } 复制代码
到此,我们的整个项目就完成了 —— 运行代码,你可以添加新的 prosect,然后点击屏幕并按住,触发上下文菜单,把它标记为已联络的,或者计划一个联络人的提醒项。
我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~
这篇关于[SwiftUI 100 天] 推送通知的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-10-05Swift语法学习--基于协议进行网络请求
- 2022-08-17Apple开发_Swift语言地标注释
- 2022-07-24Swift 初见
- 2022-05-22SwiftUI App 支持多语种 All In One
- 2022-05-10SwiftUI 组件参数简写 All In One
- 2022-04-14SwiftUI 学习笔记
- 2022-02-23Swift 文件夹和文件操作
- 2022-02-17Swift中使用KVO
- 2022-02-08Swift 汇编 String array
- 2022-01-30SwiftUI3.0页面反向传值