ios - 当应用程序从 Swift 5 中的设置返回时,如何检测通知是否打开?
问题描述
我有一个会触发通知警报的开关按钮。我能够实现请求通知权限(用户第一次触发开关),我还能够实现当用户再次单击开关按钮时让用户打开应用程序的通知设置(如果用户拒绝第一次要求)。但我在如何让通知打开信息回到应用程序方面遇到问题。
- 应用程序启动,用户点击切换开关(将弹出通知请求对话框)。
- 如果用户拒绝初始请求并再次单击切换开关,则会弹出一个对话框并建议/将用户带到应用程序的设置。(应用程序进入后台,设置在前面)
- 当用户打开通知设置,然后返回应用程序(设置进入后台,应用程序进入前台)。
在这个阶段,如何检测应用程序的通知设置是否打开并将开关按钮显示为“打开”?
我尝试了覆盖 func viewWillAppear(这不起作用,因为当您从设置返回应用程序时,viewcontroller 永远不会再次调用/重新加载。)我还尝试了 AppDelegate、applicationWillEnterForeground 和 applicationDidBecomeActive,两者都没有工作。
我希望这是有道理的。谢谢你的任何建议。
解决方案
将 UserNotifications 导入您的 ViewController
import UserNotifications
创建一个检查当前通知状态的方法
private func hasNotificationPermission(completion: @escaping (Bool) -> Void) {
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
completion(settings.authorizationStatus == .authorized)
}
}
添加观察者以检测应用何时变为活动状态
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.openactivity), name: NSNotification.UIApplicationDidBecomeActive, object: nil)
}
从后台返回时检查通知状态并更新您的 UI
@objc func appBecomeActive() {
if hasNotificationPermission {
// Notifications are enabled
} else {
// Notifications are not enabled
}
}
推荐阅读
- c# - C# 按键查找 JWT 声明
- asp.net - 当我在调试时打开它时,我的 asp.net MVC 程序看起来不正确
- windows - WindowsPE - 如何运行电子应用程序,缺少 dll
- r - R:对应于 15 年的 12 个月的数据时间序列的条形图
- kotlin - CardStackView 空
- java - JavaFX - 需要通过初始化预填充字段,但不允许出现异常。有什么办法吗?
- redis - 如何在 Redis 中同时设置不同的持久性选项
- java - 在画布上按下按钮时 JavaFX MouseMove
- dropzone.js - 将鼠标悬停在 dropzone.js 中的图像预览顶部时移除模糊效果
- amazon-web-services - 如何查询不是 EC2 的最新 AMI 映像 ID?