如何通过iOS中的设置处理推送通知

时间:2017-07-27 06:15:07

标签: ios swift3 apple-push-notifications

我在我的应用中集成了推送通知。我在AppDelegate中获取了设备令牌,并通过LoginViewController发送到服务器。当用户点击“不允许”时发出警报我没有打电话给我的设备注册服务。但我不知道如何处理这种情况。

  

如果用户在推送通知提醒中单击“不允许”并进入应用程序内部,则他会打开设备设置并启用推送通知。

在这种情况下,如何调用我的设备注册服务? 请帮我 感谢

3 个答案:

答案 0 :(得分:3)

实际上没有代表可以观察用户是否更改了推送通知的状态。

但您可以在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");
    }
})

希望它有所帮助。

答案 1 :(得分:0)

<强> 注意

设置中的任何更改都会重新启动应用。 因此,如果用户从设置中打开通知,那么您的应用程序将重新启动,您将在app-delegate中获取设备令牌,然后您可以将其发送到您的服务器。如果您的登录名是本地保存而您是在login api中发送device_token,那么您需要使用单独的服务将device_token发送到服务器。

答案 2 :(得分:-1)

在AppDelegate中

如果用户允许通知,则会在func bellow中返回令牌,您将调用您的服务发送到您的服务器

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
}

如果用户不允许通知,您将收到func bellow中的错误

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {

}