【问题标题】:Cannot get onMessage to show when App is in foreground应用程序在前台时无法显示 onMessage
【发布时间】:2020-01-09 07:52:02
【问题描述】:

我正在编写一个应用程序,您可以在其中按下按钮,它会向每个应用程序发送“帮助”通知(这将是一个大约 100 人的封闭组)我需要通知来弹出应用程序的任何状态在中,我对 onResume 和 onLaunch 进行了排序,但是当应用程序处于前台时,我无法让它显示通知。有很多屏幕,我需要通知显示在用户所在的任何屏幕上。

我尝试了很多教程,但无法让它发挥作用。我在我的主页上的 initState 中有代码。

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(),
  },
);
  }

}

我没有收到任何错误,只是没有任何反应。

【问题讨论】:

    标签: firebase flutter notifications firebase-cloud-messaging


    【解决方案1】:

    我遇到了同样的问题,只需将 Firebase 相关代码从“app”MyApp 移动到 MyHomePage 小部件。在 MyHomePage 中,它将具有适当的上下文。 我用这个作为例子https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_messaging/example/lib/main.dart#L240

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 2020-01-25
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      相关资源
      最近更新 更多