这是我的 void main 函数:
Future<void> remoteMessageHandler(RemoteMessage message) async {}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(remoteMessageHandler);
LocalNotificationService.initialize();
NotificationSettings settings =
await FirebaseMessaging.instance.requestPermission(
alert: true,
badge: true,
sound: true,
);
runApp(MyApp());
}
这是我的本地通知服务:
class LocalNotificationService {
static final FlutterLocalNotificationsPlugin _notificationsPlugin =
FlutterLocalNotificationsPlugin();
@pragma('vm:entry-point')
static void onDidReceiveBackgroundNotificationResponse(
NotificationResponse notificationResponse) async {
print('background');
}
static Future<void> initialize() async {
// initializationSettings for Android
const InitializationSettings initializationSettings =
InitializationSettings(
android: AndroidInitializationSettings("@mipmap/ic_launcher"),
);
// Create the default notification channel here
const AndroidNotificationChannel channel = AndroidNotificationChannel(
'default_notification_channel_id',
'Default Notification Channel',
importance: Importance.max,
);
_notificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(channel);
await _notificationsPlugin.initialize(
initializationSettings,
onDidReceiveBackgroundNotificationResponse:
onDidReceiveBackgroundNotificationResponse,
onDidReceiveNotificationResponse: (NotificationResponse response) async {
print('normal');
},
);
}
static void createanddisplaynotification(RemoteMessage message) async {
try {
final id = DateTime.now().millisecondsSinceEpoch ~/ 1000;
const NotificationDetails notificationDetails = NotificationDetails(
android: AndroidNotificationDetails(
"pushnotificationapp",
"pushnotificationappchannel",
importance: Importance.max,
priority: Priority.high,
),
);
await _notificationsPlugin.show(
id,
message.notification!.title,
message.notification!.body,
notificationDetails,
payload: message.data['_id'],
);
} on Exception catch (e) {
print(e);
}
}
}
我问了chatgpt、bard等,但他们都说调用onDidReceiveBackgroundNotificationResponse并且它会起作用。大多数人说使用onselectnotificaiotn而不是onDidReceiveBackgroundNotificationResponse,但我没有参数onselectnotificaiotn。
这对我有用。将 AppDelegate.swift 更新为以下代码:
import UIKit
import Flutter
import flutter_local_notifications
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// This is required to make any communication available in the action isolate.
FlutterLocalNotificationsPlugin.setPluginRegistrantCallback { (registry) in
GeneratedPluginRegistrant.register(with: registry)
}
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}