在Swift 3中如何获取通知授权状态?

20

我该如何在iOS 11中检查UNUserNotificationCenter的当前授权状态?我已经找了一段时间,找到了一些代码,但它不是用Swift 3编写的,并且某些函数在iOS 10中已被弃用。有人可以帮忙吗?

2个回答

39

好的,我找到了:

let center = UNUserNotificationCenter.current()
center.getNotificationSettings { (settings) in
    if(settings.authorizationStatus == .authorized)
    {
        print("Push authorized")
    }
    else
    {
        print("Push not authorized")
    }
}

代码作者:Kuba


16

在获取通知授权状态时,实际上有三种可能的状态:

  • 已授权
  • 已拒绝
  • 未确定

检查这些状态的简单方法是使用一个 switch-case 语句,其中 .authorized.denied.nonDeterminedUNAuthorizationStatus 中的枚举。

UNUserNotificationCenter.current().getNotificationSettings { (settings) in
    print("Checking notification status")

    switch settings.authorizationStatus {
    case .authorized:
        print("authorized")

    case .denied:
        print("denied")

    case .notDetermined:
        print("notDetermined")

    }
}

可以在苹果官方文档https://developer.apple.com/documentation/usernotifications/unauthorizationstatus中找到对UNAuthorizationStatus的描述。


1
很高兴听到这个 :) 在某些情况下,区分已授权、已拒绝和未确定状态非常重要,不仅仅是确定是否已被授权。例如,如果状态为未授权,在请求用户再次授权时,未确定和已拒绝请求之间存在很大的差异。当然,这取决于使用情况 ;) - Simon Bøgh
您知道是否可以将 settings.authorizationStatus 重置为 .notDetermined,以便再次向用户显示系统权限对话框? 如果用户注销并有不同的用户登录,则需要此功能。 在这种情况下,我将通过 requestAuthorization() 再次请求 UNUserNotificationCenter 权限,但它不会再次显示警报,因为它已由先前的用户设置(例如 .authorized'.denied)。 - Jose Enrique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接