在Swift中以编程方式更改推送通知

我有一个应用程序,我已经实现了推送通知。 我检查用户是否允许远程通知:

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) UIApplication.sharedApplication().registerUserNotificationSettings(settings) UIApplication.sharedApplication().registerForRemoteNotifications() 

我还将响应存储在带有设备令牌的DB中。

我还在设置页面中实现了UISwitch来启用/禁用推送通知,但是我只能在DB列中启用/禁用此function。

我的问题是,如果用户在初始请求中选择了“不允许”,则无法在手机设置中启用推送通知,因此即使我在数据库中将值设置为启用,通知也不会作为手机设置到达手机仍设置为禁用。

Swift 2中有没有办法在应用程序内更改手机设置中的推送通知,而不是用户必须进入要更改的设置? 或者让UISwitch允许用户切换开/关推送通知是完全多余的?

您无法从程序更改推送通知权限状态。 此外,无法一次又一次地显示要求用户允许推送通知的提示。 您可以参考此https://developer.apple.com/library/ios/technotes/tn2265/_index.html 。

启用推送的应用首次注册推送通知时,iOS会询问用户是否希望接收该应用的通知。 一旦用户响应此警报,除非设备已恢复或应用程序已卸载至少一天,否则不会再次显示该警报。

因此,除非您使用开关状态打开/关闭服务器的远程通知,否则使用UISwitch切换权限状态没有任何意义。

更新了swift 4:

 func switchChanged(sender: UISwitch!) { print("Switch value is \(sender.isOn)") if(sender.isOn){ print("on") UIApplication.shared.registerForRemoteNotifications() } else{ print("Off") UIApplication.shared.unregisterForRemoteNotifications() } }