【问题标题】:Flutter - FirebaseMessaging.onMessageOpenedApp.listen is not triggeredFlutter - FirebaseMessaging.onMessageOpenedApp.listen 未触发
【发布时间】:2021-09-08 04:38:08
【问题描述】:

我正在使用:

flutter version 2.2
firebase_messaging: ^10.0.2

我收到推送通知,然后单击它并打开应用程序。 然后我没有看到FirebaseMessaging.onMessageOpenedApp.listen 被调用(回调正在向我发送调试电子邮件,但我没有收到)

我的问题是

  1. (可选)如何使用上面的android studio debugur模拟案例调试android应用程序,所以应用程序被杀死而不是打开,然后通过通知打开

  2. 这可能是什么问题?为什么没有触发该流?我在 main.dart 中初始化它

PS:所有其他方法都可以正常工作,所以如果应用程序在前台,onMessage.listen 效果很好。我需要处理 onMessageOpenedApp 以便我可以根据通知信息将用户重定向到正确的视图

【问题讨论】:

  • 您找到解决方案了吗?你找到解决方法了吗?我有完全相同的问题,不幸的是,您创建的 github 问题也没有答案并且受到限制github.com/FirebaseExtended/flutterfire/issues/6483
  • @Kristi Jorgji 有解决这个问题的运气吗?我一直在努力解决这个问题,连续 3 天没有运气。框架中不可能有这么大的错误,所以我们一定做错了什么?

标签: firebase flutter firebase-cloud-messaging


【解决方案1】:

要在您的情况下查看应用程序被杀死时的日志,您是否尝试过 flutter logs 命令,只需将您的设备插入 USB 调试并在您的终端中运行 flutter logs,您的所有 print 消息都会显示在这里。

关于FirebaseMessaging.onMessageOpenedApp.listen 在应用启动时被调用是因为您需要定义后台消息处理程序

/// Define a top-level named handler which background/terminated messages will
/// call.
///
/// To verify things are working, check out the native platform logs.
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  // If you're going to use other Firebase services in the background, such as Firestore,
  // make sure you call `initializeApp` before using other Firebase services.
  await Firebase.initializeApp();
  print('Handling a background message ${message.messageId}');
}

在此处查看完整的 firebase_messaging 示例 main.dart

【讨论】:

  • 谢谢,我已经注册了 FirebaseMessaging.onMessageOpenedApp 但是在我调用一个 api 来获取应用配置之后?会不会是被调用晚的情况(在升级旧包中的 firebase_messaging 之前可以正常工作),但现在可能缺少一些事件......
  • 现在我马上初始化firebase!在 main.dart 上,然后在一个 api 调用之后执行 FirebaseMessaging.onBackgroundMessage((message) async { _logger.d('onBackgroundMessage: ${message.data}'); _handle(message); });。所以我应该像在提供的示例中那样初始化两次 Firebase.initializeApp(),其中第二次在 _firebaseMessagingBackgroundHandler
  • 是的,进去Future&lt;void&gt; _firebaseMessagingBackgroundHandler(RemoteMessage message)
  • _firebaseMessagingBackgroundHandler 是您的顶级函数,如示例。
  • 我这样做了,但仍然没有工作......,在 main.dart 中运行应用程序之前,我注册了 FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); 并且功能是顶级看起来像 /// Define a top-level named handler which background/terminated messages will /// call. /// Future&lt;void&gt; _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(); getLogger('app_runner').d('Firebase.onBackgroundMessage: ${message.data}'); PushNotificationsManager.handle(message); }
【解决方案2】:

第一个问题:

要查看应用中的日志,您可以使用 Android Studio 或 IntelliJ 中的“Logcat”选项卡:

第二个问题:

如果您的应用程序被终止并且您希望收到通知点击回调,您应该使用:

FirebaseMessaging.instance.getInitialMessage().then((message) {
  if (message != null) {
    // DO YOUR THING HERE
  }
});

,因为根据 Flutter 团队的 cmets for onMessageopenedApp 功能:

 /// If your app is opened via a notification whilst the app is terminated,
  /// see [getInitialMessage].

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 2019-10-21
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多