#flutter
Вопрос:
В моем приложении flutter есть пользовательский тон уведомления, который отлично работает, когда приложение находится на переднем плане. Но когда я закрываю приложение или оставляю его в фоновом режиме, приходят уведомления, но нет настраиваемого звука уведомления. флаттер версии 2.0, флаттер_local_notifications: ^5.0.0 firebase_messaging: ^10.0.4 . Это мой код. Кто-нибудь может помочь мне избавиться от этой ошибки? Спасибо
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
print('Handling a background message ${message.messageId}');
}
AndroidNotificationChannel channel;
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
if (!kIsWeb) {
channel = const AndroidNotificationChannel(
'high_importance_channel',
'High Importance Notifications',
'This channel is used for important notifications.',
importance: Importance.high,
enableLights: true,
sound: RawResourceAndroidNotificationSound('notification'),
playSound: true,
enableVibration: true,
);
flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(channel);
await FirebaseMessaging.instance
.setForegroundNotificationPresentationOptions(
alert: true,
badge: true,
sound: true,
);
}
runApp(new MaterialApp(
home: MyApp(),
debugShowCheckedModeBanner: false,
routes: <String, WidgetBuilder>{},
));
}
initializeFCM() async {
FirebaseMessaging.onMessageOpenedApp.listen((message) {
print('Message clicked!');
});
messaging = FirebaseMessaging.instance;
messaging.subscribeToTopic("messaging");
messaging.getToken().then((value) async {
print("FirebaseToken:" value);
var token = await getSharedPrefrence('token');
var notiToken = await sharedPrefrence('notiToken', value.toString());
if (token != null) {
var sendToken = await sendNotiTokenApi(value.toString());
}
print(notiToken);
});
final sound = "notification.mp3";
FirebaseMessaging.onMessage.listen(
(RemoteMessage message) {
RemoteNotification notification = message.notification;
AndroidNotification android = message.notification?.android;
if (notification != null amp;amp; android != null amp;amp; !kIsWeb) {
flutterLocalNotificationsPlugin.show(
notification.hashCode,
notification.title,
notification.body,
NotificationDetails(
android: AndroidNotificationDetails(
channel.id,
channel.name,
channel.description,
icon: 'launch_background',
importance: Importance.max,
priority: Priority.max,
enableLights: true,
enableVibration: true,
playSound: true,
sound: RawResourceAndroidNotificationSound('notification'),
),
));
}
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Notification"),
content: Text(message.notification.body),
actions: [
TextButton(
child: Text("Ok"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
});
},
);
}
void showNotification(message) async {
var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
Platform.isAndroid
? 'com.dfa.flutterchatdemo'
: 'com.duytq.flutterchatdemo',
'Flutter chat demo',
'your channel description',
playSound: true,
enableVibration: true,
sound: RawResourceAndroidNotificationSound('notification'),
importance: Importance.max,
enableLights: true,
priority: Priority.high,
);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(
android: androidPlatformChannelSpecifics,
iOS: iOSPlatformChannelSpecifics);
print(
message['notification']['title'].toString(),
);
await flutterLocalNotificationsPlugin.show(
0,
message['notification']['title'].toString(),
message['notification']['body'].toString(),
platformChannelSpecifics,
payload: 'test'
// payload: json.encode(message)
);
}
void configLocalNotification() {
var initializationSettingsAndroid =
new AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = new IOSInitializationSettings();
var initializationSettings = new InitializationSettings(
iOS: initializationSettingsIOS, android: initializationSettingsAndroid);
flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: onSelectNotification);
}
Ответ №1:
Для onMessage вы вручную отправляете настроенное уведомление с помощью flutterLocalNotificationsPlugin.show, но для _firebaseMessagingBackgroundHandler используется толкатель уведомлений по умолчанию.
Исправить:
Вы можете попробовать ввести необходимые объекты и настроить их, как текущий flutterLocalNotificationsPlugin.показать
Комментарии:
1. когда я скопировал flutterLocaNotificationsPlugin. покажите, что я получаю это сообщение об ошибке: Сообщение FlutterFire: Произошла ошибка в вашем обработчике фоновых сообщений: noSuchMethod Ошибка: Идентификатор получателя был вызван с нулевым значением.