确定本地通知是不是已被明确拒绝

Posted

技术标签:

【中文标题】确定本地通知是不是已被明确拒绝【英文标题】:Determine if local notifications have been explicitly denied确定本地通知是否已被明确拒绝 【发布时间】:2016-01-28 17:38:51 【问题描述】:

有几个问题接近,但我没有找到任何完全正确的问题:

Determine if local notification is allowed Check if Local Notifications allowed Check if Local Notifications are enabled in ios 8

这与远程通知无关,我只是使用本地通知。


我想确定本地通知权限的当前状态,以便显示三个界面之一:

通知已启用 通知未启用,这里有一个按钮来启用它们(这将触发标准对话框) 通知已被拒绝(因此对话框无法再次显示),这是 Settings.app 的链接,因此可以在那里启用它们。

很容易判断通知是否启用currentUserNotificationSettings(),但我不知道如何确定“未启用,因为我们没有询问”和“未启用,因为用户说不”。

【问题讨论】:

我相信检测它的唯一方法是自己跟踪它,即如果您询问通知保存一些标志,例如 NSUserDefaults 中的一些布尔值。 【参考方案1】:

正如@shpasta 所说,您必须使用NSUserDefaults 进行跟踪。使用NSUserDefaults 非常简单。

在调用registerUserNotificationSettings:之后,添加这段代码:

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "didRegister")

然后,无论您想检查本地通知的当前状态,都可以使用:

if UIApplication.sharedApplication().currentUserNotificationSettings().types == TYPES_YOU_NEED 
    // Code for enabled notifications
 else if NSUserDefaults.standardUserDefaults().boolForKey("didRegister") 
    // Code for denied notifications
 else if !(NSUserDefaults.standardUserDefaults().boolForKey("didRegister")) 
    // Code for non-enabled notifications, can display dialog

上述实现的唯一警告是,如果用户只允许您需要的某些类型,而不是所有类型。你会在第一个条件下检查它,但我没有添加它,因为我不知道你想要什么样的特定情况。

【讨论】:

以上是关于确定本地通知是不是已被明确拒绝的主要内容,如果未能解决你的问题,请参考以下文章

检查用户是不是允许本地通知。 iOS 8. Obj-C

使用 Firebase 的本地通知

一旦确定文件夹不为空,如何获得本地通知?

在特定时间重复本地通知,并在同一时间后每隔一段时间重复一次本地通知

iOS 会限制预定的本地推送通知吗?

如何为 Apple Watch 配置本地通知