如何从iOS中的设置处理推送通知允许
Posted
技术标签:
【中文标题】如何从iOS中的设置处理推送通知允许【英文标题】:How to handle push notification allow from settings in iOS 【发布时间】:2017-07-27 06:15:07 【问题描述】:我已经在我的应用程序中集成了推送通知。我在我的AppDelegate
中获取设备令牌,并在我的LoginViewController
中发送到服务器。当用户单击“不允许”时出现警报时,我没有调用我的设备注册服务。但我不知道如何处理这种情况。
如果用户在推送通知警报中单击不允许并进入应用程序,则他打开设备设置并启用推送通知。
在这种情况下,我该如何调用我的设备注册服务? 请帮我 谢谢
【问题讨论】:
每次注册应用时都会调用设备注册方法来获取通知。因此设置更改后,当您再次启动应用程序并注册接收通知时,将调用该方法。 @lostInTransit 谢谢。如果用户更改设置并重新打开应用程序,当它从后台转到前台时,是否也可以注册? 你必须确保你调用了registerForRemoteNotifications
方法
【参考方案1】:
实际上并没有委托来观察用户更改了推送通知的状态。
但是你可以在applicationDidBecomeActive:
这样的方法中使用这个方法来检查
目标 C:
ios 8 及更高版本
if (![[UIApplication sharedApplication] isRegisteredForRemoteNotifications])
NSLog(@"push notifications are disabled");
适用于 iOS 10
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone)
NSLog(@"push notifications are disabled");
斯威夫特:
iOS 8 及更高版本
let isRegisteredForRemoteNotifications = UIApplication.shared.isRegisteredForRemoteNotifications
if isRegisteredForRemoteNotifications
NSLog(@"push notifications are enabled");
else
NSLog(@"push notifications are disabled");
适用于 iOS 10
let current = UNUserNotificationCenter.current()
current.getNotificationSettings(completionHandler: (settings) in
if settings.authorizationStatus == .denied
NSLog(@"push notifications are disabled");
)
希望对你有帮助。
【讨论】:
【参考方案2】:注意
设置中的任何更改都会重新启动应用程序。 因此,如果用户从设置中打开通知,那么您的应用程序将重新启动,您将在 app-delegate 中获得设备令牌,您可以将其发送到您的服务器。如果您的登录信息保存在本地,并且您在登录 api 中发送 device_token,那么您需要使用单独的服务将 device_token 发送到服务器。
【讨论】:
但是当我打开应用程序并更改设置时,它仍然在后台运行。似乎没有重新启动【参考方案3】:在 AppDelegate 中
如果用户允许通知,令牌将在下面的函数中返回,您将调用您的服务发送到您的服务器
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
如果用户不允许通知,您将在下面的函数中收到错误
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error)
【讨论】:
是的,我在我提到的场景中要问什么......然后如何在不关闭和重新打开应用程序的情况下获得通知,因为我没有调用我的服务设备注册服务,因为用户在提示时不允许跨度> 当您打开应用程序时,您总是使用真实设备在 func didRegisterForRemoteNotificationsWithDeviceToken 中收到令牌,您会将令牌发送到您的服务器,当您向用户发送通知时,如果用户允许通知,设备会自动显示通知并且不会显示用户是否不通知以上是关于如何从iOS中的设置处理推送通知允许的主要内容,如果未能解决你的问题,请参考以下文章
iOS 9:如何检测用户何时对推送通知请求说“不允许”? [复制]