Firebase 当应用程序位于前台时,无法获取要显示的onMessage
我正在写一个应用程序,你可以按下一个按钮,它将发送一个“帮助”通知给每一个应用程序(这将是一个大约100人的封闭组)。我需要弹出通知,无论该应用程序处于何种状态,我有onResume和onLaunch排序,但我无法让它在应用程序位于前台时显示通知。有很多屏幕,我需要通知显示在任何屏幕上的用户 我试过很多教程,但就是不能让它工作。我在主页上的initState中有代码Firebase 当应用程序位于前台时,无法获取要显示的onMessage,firebase,flutter,notifications,firebase-cloud-messaging,Firebase,Flutter,Notifications,Firebase Cloud Messaging,我正在写一个应用程序,你可以按下一个按钮,它将发送一个“帮助”通知给每一个应用程序(这将是一个大约100人的封闭组)。我需要弹出通知,无论该应用程序处于何种状态,我有onResume和onLaunch排序,但我无法让它在应用程序位于前台时显示通知。有很多屏幕,我需要通知显示在任何屏幕上的用户 我试过很多教程,但就是不能让它工作。我在主页上的initState中有代码 void main() { SystemChrome.setPreferredOrientations([DeviceOrie
void main() {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
@override
void initState() {
super.initState();
var initializationSettingsAndroid =
new AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = IOSInitializationSettings();
var initializationSettings = InitializationSettings(
initializationSettingsAndroid, initializationSettingsIOS);
flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: onSelectNotification);
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
showDialog(
context: context,
builder: (context) =>
AlertDialog(
content: ListTile(
title: Text(message['notification']['title']),
subtitle: Text(message['notification']['body']),
),
actions: <Widget>[
FlatButton(
child: Text('Ok'),
onPressed: () => Navigator.of(context).pop(),
),
],
),
);
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
showDialog(
context: context,
builder: (context) =>
AlertDialog(
content: ListTile(
title: Text(message['notification']['title']),
subtitle: Text(message['notification']['body']),
),
actions: <Widget>[
FlatButton(
child: Text('Ok'),
onPressed: () => Navigator.of(context).pop(),
),
],
),
);
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
showDialog(
context: context,
builder: (context) =>
AlertDialog(
content: ListTile(
title: Text(message['notification']['title']),
subtitle: Text(message['notification']['body']),
),
actions: <Widget>[
FlatButton(
child: Text('Ok'),
onPressed: () => Navigator.of(context).pop(),
),
],
),
);
},
);
Future onSelectNotification(String payload) async {
if (payload != null) {
debugPrint('notification payload: ' + payload);
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your channel id', 'your channel name', 'your channel description',
importance: Importance.Max, priority: Priority.High,ticker:'ticker');
var iOSPlatformChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics = NotificationDetails(
androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0, 'plain title', 'plain body', platformChannelSpecifics,
payload: 'item x');
}
}
// @override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Benidorm or Bust',
theme: ThemeData.dark().copyWith(
primaryColor: Color(0xFF0A0E21),
scaffoldBackgroundColor: Color(0xFF0A0E21),
),
initialRoute: '/',
routes: {
'/': (context) => MyHomePage(),
'/setup': (context) => Setup(),
'/dayinit': (context) => Dayinit(),
'/day1': (context) => Day1(),
'/day2': (context) => Day2(),
'/day3': (context) => Day3(),
'/day4': (context) => Day4(),
'/day5': (context) => Day5(),
'/CheckList': (context) => CheckList(),
'/eveinit': (context) => Eveinit(),
'eve1eve': (context) => Eve1Eve(),
// 'push':(context)=> Push(),
},
);
}
}
void main(){
SystemChrome.setPreferredOrientations([DeviceOrientation.GraphicUp]);
runApp(MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
FirebaseMessaging_FirebaseMessaging=FirebaseMessaging();
flatterLocalNotificationsPlugin flatterLocalNotificationsPlugin=flatterLocalNotificationsPlugin();
@凌驾
void initState(){
super.initState();
var初始化设置和ROID=
新的AndroidInitializationSettings(“@mipmap/ic_launcher”);
var initializationSettingsIOS=IOSInitializationSettings();
var initializationSettings=初始化设置(
初始化设置和ROID,初始化设置SIOS);
FlatterLocalNotificationsPlugin.initialize(初始化设置,
onSelectNotification:onSelectNotification);
_firebaseMessaging.configure(
onMessage:(映射消息)异步{
打印(“onMessage:$message”);
显示对话框(
上下文:上下文,
生成器:(上下文)=>
警报对话框(
内容:ListTile(
标题:文本(消息['notification']['title']),
字幕:文本(消息['notification']['body']),
),
行动:[
扁平按钮(
子项:文本('Ok'),
onPressed:()=>Navigator.of(context.pop(),
),
],
),
);
},
onLaunch:(映射消息)异步{
打印(“onLaunch:$message”);
显示对话框(
上下文:上下文,
生成器:(上下文)=>
警报对话框(
内容:ListTile(
标题:文本(消息['notification']['title']),
字幕:文本(消息['notification']['body']),
),
行动:[
扁平按钮(
子项:文本('Ok'),
onPressed:()=>Navigator.of(context.pop(),
),
],
),
);
},
onResume:(映射消息)异步{
打印(“onResume:$message”);
显示对话框(
上下文:上下文,
生成器:(上下文)=>
警报对话框(
内容:ListTile(
标题:文本(消息['notification']['title']),
字幕:文本(消息['notification']['body']),
),
行动:[
扁平按钮(
子项:文本('Ok'),
onPressed:()=>Navigator.of(context.pop(),
),
],
),
);
},
);
未来onSelectNotification(字符串负载)异步{
如果(有效负载!=null){
debugPrint('通知有效负载:'+有效负载);
var androidPlatformChannelSpecifics=AndroidNotificationDetails(
“您的频道id”、“您的频道名称”、“您的频道描述”,
重要性:重要性。最大,优先级:优先级。高,股票代码:'ticker');
var iOSPlatformChannelSpecifics=ioNotificationDetails();
var platformChannelSpecifics=通知详细信息(
androidPlatformChannelSpecifics、iOSPlatformChannelSpecifics);
等待本地通知。显示(
0,“普通标题”,“普通正文”,平台通道详细信息,
有效载荷:“项目x”);
}
}
//@覆盖
小部件构建(构建上下文){
返回材料PP(
标题:“贝尼多姆还是半身像”,
主题:ThemeData.dark().copyWith(
primaryColor:Color(0xFF0A0E21),
脚手架背景颜色:颜色(0xFF0A0E21),
),
initialRoute:“/”,
路线:{
“/”:(上下文)=>MyHomePage(),
“/setup”:(上下文)=>setup(),
“/dayinit”:(上下文)=>dayinit(),
“/day1”:(上下文)=>day1(),
“/day2”:(上下文)=>day2(),
“/day3”:(上下文)=>day3(),
“/day4”:(上下文)=>day4(),
“/day5”:(上下文)=>day5(),
“/CheckList”:(上下文)=>CheckList(),
“/eveinit”:(上下文)=>eveinit(),
“eve1eve”:(上下文)=>eve1eve(),
//“推送”:(上下文)=>push(),
},
);
}
}
我没有收到任何错误,只是什么都没有发生。我面临同样的问题,只要将Firebase相关代码从“应用程序”MyApp移动到MyHomePage小部件。在MyHomePage中,它将具有适当的上下文。 我用这个作为例子