有没有办法检查是不是请求过推送通知设置?

Posted

技术标签:

【中文标题】有没有办法检查是不是请求过推送通知设置?【英文标题】:Is there a way to check push notification setting is ever requested?有没有办法检查是否请求过推送通知设置? 【发布时间】:2016-09-14 16:35:43 【问题描述】:

有没有办法通过系统警报检查应用是否获得了推送通知权限?

UIApplication.sharedApplication().currentUserNotificationSettings()?.types.rawValue

当应用从未请求推送通知权限和用户拒绝权限时,它都会返回0

我想在应用从未请求权限时显示系统警报弹出窗口。如果用户拒绝权限,我也想让用户进入设置以控制权限设置。

例如:

let pushNotificationPermissionNeverAcquired: Bool = ???
if (pushNotificationPermissionNeverAcquired) 
    // show system popup to acquire push notification permission
    UIApplication.sharedApplication.registerForRemoteNotificationTypes([ * some types ])

 else if (UIApplication.sharedApplication().currentUserNotificationSettings()?.types.rawValue == 0) 
    // user declined push notification permission, so let user go to setting and change the permission
    UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString))

 else 
    // push notification is allowed


如何查看pushNotificationPermissionNeverAcquired

【问题讨论】:

【参考方案1】:

这就是我现在的做法。

if NSUserDefaults.standardUserDefaults().stringForKey(NOTIFICATION_PERMISSIONS_ASKED) == nil
     
       NSUserDefaults.standardUserDefaults().setObject("true", forKey: NOTIFICATION_PERMISSIONS_ASKED)
       // Request permissions
    
    else
    
      // Show your own alert 
    

如果你愿意,你也可以保存一个布尔值并使用“boolForKey”访问它,如果没有找到密钥,它会返回 false。

也忘记了。

if let enabledTypes = UIApplication.sharedApplication().currentUserNotificationSettings()?.types  
    switch enabledTypes
   
    case UIUserNotificationType.None:
        // Denied permissions or never given
    default:
        // Accepted
    

【讨论】:

这是一个可能的想法,但我需要将它应用于已经发布的应用程序。会有用户允许/禁止推送通知,但没有保存的值。 请求权限,然后检查当前视图控制器是否呈现警报控制器怎么样? (不允许/允许的系统一)。我不确定它是否会成为您的视图层次结构的一部分。

以上是关于有没有办法检查是不是请求过推送通知设置?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户之前是不是在 iOS 中查看过推送通知权限警报视图?

检查用户是不是打开了推送通知

有没有办法让应用程序将通知更改为静默通知(不是服务器)以进行推送通知

推送通知权限

了解过去是不是在 iOS 上显示过推送通知权限提示

如何检查该应用在 PhoneGap Build 上是不是有推送通知?