flutter_local_notifications onDidReceiveNotificationResponse不生效
时间: 2023-12-20 14:07:13 浏览: 264
flutter_local_notifications..zip
如果 `onDidReceiveNotificationResponse` 方法没有被调用,那么可能是由于以下原因之一:
1. 没有在初始化时设置 `onDidReceiveNotificationResponse` 回调。请确保在 `FlutterLocalNotificationsPlugin` 的初始化方法中设置了此回调,例如:
```dart
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
Future<void> _initNotifications() async {
var initializationSettingsAndroid = AndroidInitializationSettings('app_icon');
var initializationSettingsIOS = IOSInitializationSettings();
var initializationSettings = InitializationSettings(
android: initializationSettingsAndroid, iOS: initializationSettingsIOS);
await flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification);
}
Future<void> onSelectNotification(String payload) async {
// 在此处处理通知点击事件
}
// 设置 onDidReceiveNotificationResponse 回调方法
flutterLocalNotificationsPlugin.onDidReceiveNotificationResponse.listen((event) async {
await onSelectNotification(event.payload);
});
```
2. 在 Android 平台上,需要在 `AndroidManifest.xml` 文件中注册 `NotificationReceiver`,并将其与 `FlutterLocalNotificationsPlugin` 相关联。请确保在 `AndroidManifest.xml` 文件中添加以下代码:
```xml
<application ...>
<receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
</application>
```
3. 在 iOS 平台上,需要在 `AppDelegate.swift` 文件中添加以下代码:
```swift
import UIKit
import Flutter
import UserNotifications
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate, UNUserNotificationCenterDelegate {
override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 在此处初始化 FlutterLocalNotificationsPlugin
// 设置 UNUserNotificationCenterDelegate
UNUserNotificationCenter.current().delegate = self
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
// 实现 didReceive response 方法
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let flutterChannel = FlutterMethodChannel(name: "com.example.app/notification", binaryMessenger: self.window.rootViewController as! FlutterViewController)
flutterChannel.invokeMethod("onSelectNotification", arguments: response.notification.request.content.userInfo)
completionHandler()
}
}
```
上述代码中,我们通过实现 `UNUserNotificationCenterDelegate` 协议的 `didReceive response` 方法来处理通知的点击事件,并且调用了 `FlutterMethodChannel` 方法来将通知的 payload 发送给 Flutter 端的 `onSelectNotification` 方法。
希望这些信息能对你有所帮助!
阅读全文