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

puk*_*978 3 notifications ios swift swift2

我有一个应用程序,我已经实现了推送通知.我与用户核实允许远程通知:

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

我还使用设备令牌将响应存储在DB中.

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

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

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

Shi*_*thi 6

用 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()
    }
}
Run Code Online (Sandbox Code Playgroud)


Vis*_*kar 5

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

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

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