iOS 11.2.2调用移除通知API后通知仍留存于通知中心的问题求助
看起来你碰到的是iOS 11.2.2版本特有的通知中心bug,毕竟在iOS 11.1上功能完全正常,升级后才出现异常,而且手动删除一条就触发同应用通知全清的现象也很典型。下面给你几个可行的排查和解决方向:
尝试全局移除代替指定标识符
先暂时替换掉按标识符移除的代码,改用全局移除方法测试:UNUserNotificationCenter.current().removeAllDeliveredNotifications() UNUserNotificationCenter.current().removeAllPendingNotificationRequests()如果这个操作能正常清空通知中心,说明问题出在标识符匹配的系统逻辑上,而非你的代码逻辑错误。
严格校验通知标识符的一致性
虽然你提到每条通知都有不同的标识符,但还是要仔细核对:添加通知请求时设置的identifier字符串,和移除时传入的是否完全一致(包括大小写、特殊字符、空格等)。建议在添加和移除时都打印日志,对比两个场景下的标识符是否完全匹配——iOS的通知标识符是大小写敏感的,哪怕一个字符差异都可能导致移除失败。给移除操作加短暂延迟
有时候系统通知中心的状态更新存在延迟,你可以尝试把移除代码放在延迟队列里执行:DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: yourIdentifiersArray) UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: yourIdentifiersArray) }给系统一点时间同步通知状态后再执行移除,可能会解决这个异常。
重置通知权限并重启设备
这是修复系统通知异常的通用步骤:- 进入「设置」->「通知」-> 找到你的应用,关闭所有通知权限;
- 重启设备;
- 重新打开应用的通知权限,再测试移除功能。
向苹果提交Bug报告
由于问题仅出现在iOS 11.2.2,且iOS 11.1正常,这大概率是系统层面的bug。你可以通过苹果的Feedback Assistant提交问题,附上你的代码片段、设备型号、系统版本,以及复现步骤,帮助苹果定位修复。
另外,你提到手动删除一条通知后同应用其余通知也被移除,这说明系统内部其实把这些通知标记为了同一组,哪怕你设置了不同的标识符——这也进一步佐证了是iOS 11.2.2的通知中心逻辑出现了问题。
内容的提问来源于stack exchange,提问作者Saleh

