Flutter 颤振本地通知中的颤振选择通知方法不';行不通
我试图在我的应用程序中处理FCM消息,但它位于后台。我正在为此使用数据消息,在global myBackgroundMessageHandler函数中处理它,并使用Flatter_local_notifications插件创建本地通知,如果应用程序进程被终止,我将接收并向用户显示推送通知事件。但当用户通过此推送通知打开应用程序时,我无法捕获事件。这是我的fcm初始化:Flutter 颤振本地通知中的颤振选择通知方法不';行不通,flutter,firebase-cloud-messaging,Flutter,Firebase Cloud Messaging,我试图在我的应用程序中处理FCM消息,但它位于后台。我正在为此使用数据消息,在global myBackgroundMessageHandler函数中处理它,并使用Flatter_local_notifications插件创建本地通知,如果应用程序进程被终止,我将接收并向用户显示推送通知事件。但当用户通过此推送通知打开应用程序时,我无法捕获事件。这是我的fcm初始化: void initFirebasePushNotifications(){ _firebaseMessaging.
void initFirebasePushNotifications(){
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
Fluttertoast.showToast(msg: "onMessage $message");
// _showItemDialog(message);
},
onBackgroundMessage: myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
Fluttertoast.showToast(msg: "onLaunch $message");
// _navigateToItemDetail(message);
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
Fluttertoast.showToast(msg: "onResume $message");
// _navigateToItemDetail(message);
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(
sound: true, badge: true, alert: true, provisional: true));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
_firebaseMessaging.getToken().then((String token) {
assert(token != null);
pushNotificationManager.subscribe(MyApp.user);
print("Push Messaging token: $token");
});
}
void initFirebasePushNotifications(){
_firebaseMessaging.configure(
onMessage:(映射消息)异步{
打印(“onMessage:$message”);
showtoost(消息:“onMessage$message”);
//_showItemDialog(消息);
},
onBackgroundMessage:myBackgroundMessageHandler,
onLaunch:(映射消息)异步{
打印(“onLaunch:$message”);
showtoots(消息:“onLaunch$message”);
//_导航项目详细信息(信息);
},
onResume:(映射消息)异步{
打印(“onResume:$message”);
showtoots(msg:“onResume$message”);
//_导航项目详细信息(信息);
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(
声音:真,徽章:真,警报:真,临时:真);
_firebaseMessaging.onissettings已注册
.listen((IONotificationSettings){
打印(“已注册设置:$Settings”);
});
_firebaseMessaging.getToken().then((字符串标记){
断言(令牌!=null);
pushNotificationManager.subscribe(MyApp.user);
打印(“推送消息传递令牌:$token”);
});
}
和myBackgroundMessageHandler:
import 'dart:io';
import 'dart:math';
import 'package:didiservicekiosk/ui/main/main_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:rxdart/rxdart.dart';
// Streams are created so that app can respond to notification-related events since the plugin is initialised in the `main` function
final BehaviorSubject<ReceivedNotification> didReceiveLocalNotificationSubject =
BehaviorSubject<ReceivedNotification>();
final BehaviorSubject<String> selectNotificationSubject =
BehaviorSubject<String>();
Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) {
print('AppPushs myBackgroundMessageHandler : $message');
_showNotification(message);
return Future<void>.value();
}
Future _showNotification(Map<String, dynamic> message) async {
var pushTitle;
var pushText;
var action;
if (Platform.isAndroid) {
var nodeData = message['data'];
var notification = message['notification'];
pushTitle = nodeData['title'];
pushText = nodeData['body'];
action = nodeData['action'];
} else {
pushTitle = message['title'];
pushText = message['body'];
action = message['action'];
}
print("AppPushs params pushTitle : $pushTitle");
print("AppPushs params pushText : $pushText");
print("AppPushs params pushAction : $action");
var initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/launcher_icon');
var initializationSettingsIOS = IOSInitializationSettings(onDidReceiveLocalNotification:
(int id, String title, String body, String payload) async {
print("onDidReceiveLocalNotification");
didReceiveLocalNotificationSubject.add(ReceivedNotification(
id: id, title: title, body: body, payload: payload));
});
var initializationSettings = InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);
// @formatter:off
var platformChannelSpecificsAndroid = new AndroidNotificationDetails(
'234', 'Chat notifications', 'Notifications from chat',
playSound: true,
enableVibration: true,
importance: Importance.Max,
priority: Priority.High);
// @formatter:on
var platformChannelSpecificsIos =
new IOSNotificationDetails(presentSound: false);
var platformChannelSpecifics = new NotificationDetails(
platformChannelSpecificsAndroid, platformChannelSpecificsIos);
FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
await _flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: selectNotification);
new Future.delayed(Duration.zero, () {
_flutterLocalNotificationsPlugin.show(
Random().nextInt(1000),
pushTitle,
pushText,
platformChannelSpecifics,
payload: 'No_Sound',
);
});
}
Future selectNotification(String payload) async {
// if (payload != null) {
print('selectNotification notification payload: ' + payload);
// }
}
class ReceivedNotification {
final int id;
final String title;
final String body;
final String payload;
ReceivedNotification({
@required this.id,
@required this.title,
@required this.body,
@required this.payload,
});
}
导入'dart:io';
导入“dart:math”;
导入“package:didiservicekiosk/ui/main/main_screen.dart”;
进口“包装:颤振/材料.省道”;
导入“package:flatter_local_notifications/flatter_local_notifications.dart”;
导入“包:rxdart/rxdart.dart”;
//创建流是为了让应用程序能够响应通知相关事件,因为插件是在“main”函数中初始化的
最终行为主体未收到本地通知主体=
行为主体();
最终行为主体选择通知主体=
行为主体();
未来myBackgroundMessageHandler(映射消息){
打印('AppPushs myBackgroundMessageHandler:$message');
_显示通知(消息);
返回Future.value();
}
Future\u showNotification(映射消息)异步{
标题;
文本;
var作用;
if(Platform.isAndroid){
var nodeData=消息['data'];
var通知=消息['notification'];
pushTitle=nodeData['title'];
pushText=nodeData['body'];
动作=节点数据[‘动作’];
}否则{
pushTitle=消息['title'];
pushText=消息['body'];
action=消息['action'];
}
打印(“AppPushs参数pushTitle:$pushTitle”);
打印(“AppPushs参数pushText:$pushText”);
打印(“AppPushs参数pushAction:$action”);
var initializationSettingsAndroid=AndroidInitializationSettings(“@mipmap/launcher_图标”);
var initializationSettingsIOS=IOSSinitializationSettings(onDidReceiveLocalNotification:
(int-id、字符串标题、字符串正文、字符串有效负载)异步{
打印(“onDidReceiveLocalNotification”);
didReceiveLocalNotificationSubject.add(ReceivedNotification(
id:id,title:title,body:body,payload:payload));
});
var initializationSettings=initializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
//@formatter:off
var platformChannelSpecificsAndroid=新的AndroidNotificationDetails(
“234”、“聊天通知”、“聊天通知”,
playSound:没错,
使能振动:正确,
重要性:重要性,马克斯,
优先级:优先级高);
//@formatter:on
var平台=
新的IOSNotificationDetails(当前声音:false);
var platformChannelSpecifics=新通知详细信息(
platformChannelSpecificsAndroid,platformChannelSpecificsIos);
flatterLocalNotificationsPlugin_flatterLocalNotificationsPlugin=flatterLocalNotificationsPlugin();
等待本地通知pugin.initialize(初始化设置,onSelectNotification:selectNotification);
新未来。延迟(Duration.zero,(){
_flatterLocalNotificationsPlugin.show(
随机().nextInt(1000),
pushTitle,
pushText,
平台通道细节,
有效载荷:“没有声音”,
);
});
}
未来选择通知(字符串负载)异步{
//如果(有效负载!=null){
打印('selectNotification notification payload:'+payload);
// }
}
收到通知的班级{
最终int id;
最后的字符串标题;
最终管柱体;
最终管柱有效载荷;
收到通知({
@需要这个.id,
@需要这个标题,
@需要这个机构,
@需要这个有效载荷,
});
}
有什么建议吗