如何从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:如何检测用户何时对推送通知请求说“不允许”? [复制]

如何从 WatchOs 中的推送通知中获取数据并处理推送通知操作按钮单击事件

iOS极光推送设置别名

IOS 7 中的推送通知设置

iOS 推送通知策略

如何像 Skype 一样回复推送通知? [关闭]