我有一个应用程序,我已经实现了推送通知。我与用户核实允许远程通知:
let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.sharedApplication().registerForRemoteNotifications()
我还使用设备令牌将响应存储在DB中。
我还在设置页面中实现了UISwitch以启用/禁用推送通知,但是我只能在DB列中启用/禁用此功能。
我的问题是,如果用户在初始请求中选择了“不允许”,我就无法在手机设置中启用推送通知,因此即使我在数据库中将值设置为启用,通知也不会作为手机设置到达手机仍设置为禁用。
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()
}
}
如果您使用FireBase
向您的设备发送推送通知,则可以使用主题订阅在订阅的设备中启用推送通知,并在您不希望用户在已取消订阅的设备中接收推送通知时取消订阅主题。
要订阅用户主题只需导入Firebase,然后使用此方法:
Messaging.messaging().subscribe(toTopic: "topicName")
并取消订阅用户使用:
Messaging.messaging().unsubscribe(fromTopic: "topicName")