1. 为什么iOS通知权限检测会翻车?
最近在做一个Flutter项目时,遇到了一个让人抓狂的问题:使用permission_handler插件检测iOS通知权限时,结果永远返回PermissionStatus.denied。明明用户已经开启了通知权限,代码却死活检测不到。这个问题困扰了我整整两天,直到发现了背后的猫腻。
首先需要明确的是,permission_handler插件在Android上表现良好,但在iOS上却存在这个顽固的问题。经过反复测试和查阅资料,我发现这其实与iOS系统的权限机制有关。iOS的通知权限检测需要通过特定的API实现,而permission_handler插件当前版本(截至2023年10月)的实现方式存在缺陷。
具体来说,iOS系统提供了UNUserNotificationCenter来管理通知权限,而permission_handler插件却没有正确使用这个API。这就导致无论用户是否授权,插件都返回拒绝状态。这个问题在GitHub上已经有不少开发者报告,但尚未得到官方修复。
2. 临时解决方案:使用flutter_local_notifications插件
在等待官方修复的同时,我们可以使用flutter_local_notifications插件作为临时解决方案。这个插件专门用于处理通知相关功能,对iOS的通知权限检测实现得更为准确。
Future<bool> checkIOSNotificationsStatus() async {
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
final bool? granted = await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()
?.requestPermissions(alert: t


314

被折叠的 条评论
为什么被折叠?



