iOS 16中点击「保留」后临时推送权限未更新问题排查
iOS 16 临时推送权限(Provisional)交互异常问题解答
问题背景
我们为应用开发了临时推送权限功能,但在iOS 16中测试发现其未按预期工作。当前请求权限的代码如下:
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound, .provisional]) { [weak self] _, _ in // here we register for pushes in case authorizationStatus is provisional or authorised }
实际现象:首次通知带有「保留」操作按钮,点击后弹出「Deliver Immediately」选项,但用户选择该选项后,设置中推送仍标记为「Deliver Quietly」,声音、徽章、锁屏及横幅权限仍处于关闭状态,权限设置未发生任何变更。
问题原因
这是iOS 16的系统行为变更,既不是系统Bug,也不是代码配置遗漏:
- iOS 16调整了临时推送权限的交互逻辑:用户点击「保留」→「Deliver Immediately」,仅作用于当前这条通知,让它从静默状态转为立即展示,并不会直接将权限从
provisional(临时)升级为authorized(完全授权)。 - 临时权限的设计初衷是让用户无需主动授权就能接收通知,但默认静默送达;只有当用户多次主动与通知交互(比如多次点击「Deliver Immediately」,或手动进入设置开启权限),系统才会触发正式的授权弹窗,让用户选择是否开启完整的推送权限。
代码与逻辑优化建议
- 不要依赖一次交互就完成权限升级,当前代码的权限请求逻辑本身是正确的,但回调中仅通过
authorizationStatus判断是否注册推送的逻辑需要注意:即使用户点击了Deliver Immediately,authorizationStatus仍会保持为.provisional,不会立刻变为.authorized。 - 可以在用户点击Deliver Immediately后,在App内添加友好提示,引导用户如果需要持续接收正常推送,可前往系统设置手动开启完整权限。
- 确保正确实现
UNUserNotificationCenterDelegate的相关方法,处理通知交互事件,适配iOS 16的新规则。
内容的提问来源于stack exchange,提问作者Ledio Bidaj
相关产品推荐
相关产品推荐

