Flutter Firebase 如何控制通知在应用程序处于前台时不显示

Flutter Firebase how to control notification not to show when the app is in foreground

我有一个带有聊天室功能的 flutter 应用程序。 Firebase 消息传递用于推送远程通知。如果应用程序在前台并且恰好在即将到来的通知所属的确切聊天室中,我想隐藏通知弹出窗口。

这是您与某人聊天时的常见行为。消息直接附加到聊天室而不是弹出窗口。

我的问题是如何干扰接收远程通知?我在通知接收事件上使用了 onMessage 回调。但是无论app在前台还是后台还是终止,它总是弹出。

在 firebase React Native 版本中,它有一个 onNotification 回调,这正是我想要的。但是颤动没有等价物。我的研究让我发送 DataNotification 类型的消息。这样一来,我需要保持应用程序状态与我的后端服务器同步(我说的对吗?)。

欢迎任何帮助或建议。谢谢。

P.S。 firebase_messaging8.0.0-dev.10

如果您的 onMessage 没有处理通知的代码,则它们不应出现。

如果你想转换你的onMessage通知,在overlayIn App Notification中会更好。

我在显示 notification 时也遇到了同样的问题,并找到了解决方法,我们可以在我们的 App 中显示 In App Notifications

您可以显示 overlay,而不是在您的 onMessage 方法中显示通知代码,就像当 notification 到达时 instagram 在顶部显示,

为了将消息附加到直接聊天室,我使用了一些后端帮助。

  onMessage: (Map<String, dynamic> message) async {
    showOverlayNote(message);
  },

现在您可以将 overlay 显示为

  showOverlayNote(message){
    //your code here for showing the overlay
  }

您可以从 this link

获得有关如何为应用内通知使用覆盖的详细信息

这家伙把这个In App Notifications的用法解释得比较好,所以请看上面link。

你想的角度不对。 Firebase 消息传递总是会触发您的 onMessage,这取决于您如何在内部处理它。

我建议使用状态管理器 - Mobx、ChangeNotifier、文件等等 - 来跟踪用户所在的屏幕。当用户进入您的聊天屏幕时,将其写入您的状态管理器(如有必要,也可以在您的 dispose() 方法上“取消写入”)。

然后,在处理 onMessage 的方法中,检查用户的当前屏幕。如果他们在聊天屏幕上则退出,如果没有,则执行覆盖。

更新:

如op所述,使用最新的稳定版(7.0.3)时问题已修复。那么原因是新开发版本中的错误。

相关 GitHub 问题,Link


原答案:

根据您描述的问题判断,您遇到的问题 运行 可能是因为您使用的是开发频道。

您是否尝试使用最新的稳定版? (撰写本文时为 7.0.3)。这可能是开发频道中的错误。

如果问题仍然存在,请尝试发送数据消息而不是通知消息。这将阻止 firebase 在设备上发送通知。但请注意,您必须手动显示通知。这样您就可以根据屏幕控制通知的显示,而不必像您提到的那样与服务器保持状态同步。

但这可能不适用于 iOS,因为根据 docs,当应用程序进入前台时将触发 onMessage()

查看上面的 link,了解有关如何在 Android 和 iOS 上处理通知消息和数据消息的更多详细信息。