iOS通知权限被拒绝后如何再次唤起授权申请弹窗
iOS通知权限被拒绝后无法再次唤起授权弹窗的解决方案
iOS 系统原生规则限制:用户首次拒绝通知权限申请后,应用主动调用
requestAuthorization方法将直接返回拒绝状态,无法再次触发系统授权弹窗,只有用户手动在系统设置中修改权限,或者通过引导跳转的方式让用户操作。
具体可落地的处理方案如下:
- 先判断当前权限状态,不要直接调用申请接口
先通过UNUserNotificationCenter.current().getNotificationSettings方法获取当前权限状态,只有状态为notDetermined时才调用申请接口,其余状态走引导逻辑,参考代码如下:UNUserNotificationCenter.current().getNotificationSettings { settings in switch settings.authorizationStatus { case .notDetermined: // 还未申请过权限,正常调用申请接口 UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) { granted, error in if granted { print("Notification permission Granted") } else { print("Notification permission Denied") } } case .denied: // 已经被拒绝,弹出自定义引导弹窗,引导用户去系统设置开启权限 DispatchQueue.main.async { // 此处可弹出自定义提示,告知用户开启权限的收益,用户确认后跳转应用设置页 if let settingUrl = URL(string: UIApplication.openSettingsURLString) { UIApplication.shared.open(settingUrl) } } case .authorized, .provisional, .ephemeral: // 已经有权限,正常走业务逻辑 break @unknown default: break } } - 自定义引导弹窗的内容要清晰说明开启权限的实际收益,比如可以接收订单提醒、活动通知等和用户利益相关的内容,降低用户抵触感。
没有任何方法可以绕开系统限制主动唤起第二次原生授权弹窗,所有实现二次弹窗效果的方案都是自定义的引导弹窗,最终还是需要用户手动到系统设置页修改权限。
内容的提问来源于stack exchange,提问作者Amogam
相关产品推荐
相关产品推荐

