Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase onMessage回调函数未触发_Firebase_Flutter_Dart_Push Notification_Firebase Cloud Messaging - Fatal编程技术网

Firebase onMessage回调函数未触发

Firebase onMessage回调函数未触发,firebase,flutter,dart,push-notification,firebase-cloud-messaging,Firebase,Flutter,Dart,Push Notification,Firebase Cloud Messaging,这是我的密码: initializeApp() async { FirebaseMessaging firebaseMessaging = FirebaseMessaging(); firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { print("----->onMessage: $message"); },

这是我的密码:

initializeApp() async {
  FirebaseMessaging firebaseMessaging = FirebaseMessaging();
  firebaseMessaging.configure(
    onMessage: (Map<String, dynamic> message) async {
      print("----->onMessage: $message");
    },
    onLaunch: (Map<String, dynamic> message) async {
      print("----->onLaunch: $message");
    },
    onResume: (Map<String, dynamic> message) async {
      print("----->onResume: $message");
    },
  );
  firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));

}

这里也有问题,但没有回答。

将此代码添加到您的AndroidManifest.xml中

<intent-filter>
 <action android:name="FLUTTER_NOTIFICATION_CLICK"/>
 <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

所以这就是斯克雷纳里奥: 我有2个应用程序:在这两个应用程序上,我都测试过有状态小部件处于活动屏幕:

import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';

class FCMTestPage extends StatefulWidget {
  static String name = '/test-fcm';

  @override
  _FCMTestPageState createState() => _FCMTestPageState();
}

class _FCMTestPageState extends State<FCMTestPage> {
  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  final List<Message> messages = [];

  String token;

  @override
  void initState() {
    super.initState();


    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        final notification = message['notification'];
        setState(() {
          messages.add(Message(
              title: notification['title'], body: notification['body']));
        });
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");

        final notification = message['data'];
        setState(() {
          messages.add(Message(
            title: '${notification['title']}',
            body: '${notification['body']}',
          ));
        });
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );
    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(sound: true, badge: true, alert: true));
  }

  @override
  Widget build(BuildContext context) {
    // getToken();
    return Scaffold(
      body: ListView(
        children: messages.map(buildMessage).toList(),
      ),
    );
  }

  Widget buildMessage(Message message) => ListTile(
    title: Text(message.title),
    subtitle: Text(message.body),
  );

  getToken() async {
     token = await _firebaseMessaging.getToken();
     print('********************************************');
     print(token);
     print('********************************************');
  }

}


@immutable
class Message {
  final String title;
  final String body;

  const Message({
    @required this.title,
    @required this.body,
  });
}
*删除了一些不相关的行

有趣的是,相同的代码适用于一个应用程序,而不适用于另一个应用程序。在同一个应用程序中,相同的代码在有状态小部件中工作,而在顶级函数中不工作(我尝试在类中封装,使函数为静态,但没有帮助)

我是如何解决的:

然后,我需要快速解决问题,并决定将我的一个屏幕转换为有状态,并将逻辑迁移到此屏幕。
可能与垃圾收集有关。

不过我有这个
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';

class FCMTestPage extends StatefulWidget {
  static String name = '/test-fcm';

  @override
  _FCMTestPageState createState() => _FCMTestPageState();
}

class _FCMTestPageState extends State<FCMTestPage> {
  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  final List<Message> messages = [];

  String token;

  @override
  void initState() {
    super.initState();


    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        final notification = message['notification'];
        setState(() {
          messages.add(Message(
              title: notification['title'], body: notification['body']));
        });
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");

        final notification = message['data'];
        setState(() {
          messages.add(Message(
            title: '${notification['title']}',
            body: '${notification['body']}',
          ));
        });
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );
    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(sound: true, badge: true, alert: true));
  }

  @override
  Widget build(BuildContext context) {
    // getToken();
    return Scaffold(
      body: ListView(
        children: messages.map(buildMessage).toList(),
      ),
    );
  }

  Widget buildMessage(Message message) => ListTile(
    title: Text(message.title),
    subtitle: Text(message.body),
  );

  getToken() async {
     token = await _firebaseMessaging.getToken();
     print('********************************************');
     print(token);
     print('********************************************');
  }

}


@immutable
class Message {
  final String title;
  final String body;

  const Message({
    @required this.title,
    @required this.body,
  });
}
initializeApp() async {
  FirebaseMessaging firebaseMessaging = FirebaseMessaging();
  firebaseMessaging.configure(

    onMessage: (Map<String, dynamic> message) async {
      print("onMessage: $message");
    },

    onLaunch: (Map<String, dynamic> message) async {
      print("onLaunch: $message");
    },

    onResume: (Map<String, dynamic> message) async {
      print("onResume: $message");
    },

  );

  firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));

}