我有一个带有聊天室功能的flutter应用程序。Firebase消息用于推送远程通知。如果应用程序在前台,并且恰好在即将到来的通知所属的聊天室,我想隐藏通知弹出窗口。
这是你和某人聊天时的常见行为。该消息直接附加到聊天室,而不是弹出窗口。
我的问题是如何在接收时干扰远程通知?我在收到通知的事件上使用了onMessage回调。但无论应用程序在前台、后台还是终端,它总是会弹出。
在firebaseReact Native版本中,它有一个onNotification回调,这正是我想要的。但是,颤动是不等价的。我的研究使我发送数据和通知类型的消息。通过这种方式,我需要保持应用程序状态与后端服务器同步(我说得对吗?(。
欢迎任何帮助或建议。非常感谢。
p.S.firebase_messaging 8.0.0-dev.10
更新:
正如op所提到的,在使用到最新的稳定版本(7.0.3(时,这个问题已经得到了修复。那么原因是新开发版本中的一个错误。
GitHub相关问题,链接
原始答案:
从您描述的问题来看,您遇到的问题可能是因为您在开发通道上。
你试着用最新的马厩了吗?(撰写本文时为7.0.3(。这可能是开发通道中的一个错误。
如果问题仍然存在,请尝试发送数据消息而不是通知消息。这将阻止firebase在设备上发送通知。但请注意,您必须手动显示通知。这样,您就可以根据屏幕控制通知的显示,而不必像您提到的那样保持状态与服务器同步。
但这可能在iOS上不起作用,因为根据文档,当应用程序进入前台时,onMessage()
将被触发。
查看上面的链接,了解如何在Android和iOS上处理通知消息和数据消息的更多详细信息。
如果onMessage没有处理通知的代码,那么它们就不应该出现。
如果您想在overlay
或In App Notification
中转换onMessage
通知,则效果会更好
我在显示notification
时也遇到了同样的问题,并找到了解决方法,我们可以在我们的应用程序中显示In App Notifications
您可以显示overlay
,而不是在onMessage
方法中显示通知代码,就像instagram在notification
到达时显示的那样,
为了将消息附加到直接聊天室,我使用了一些后台帮助
onMessage: (Map<String, dynamic> message) async {
showOverlayNote(message);
},
现在您可以将overlay
显示为
showOverlayNote(message){
//your code here for showing the overlay
}
你可以从这个链接获得关于如何使用应用内通知覆盖的详细信息
这个家伙已经更好地解释了这个应用内通知的使用,所以请参阅上面的链接
您从错误的角度考虑它。Firebase消息总是会触发您的onMessage
,这取决于您如何在内部处理。
我建议使用状态管理器-Mobx、ChangeNotifier、文件等等-来跟踪用户在哪个屏幕上。当用户进入聊天屏幕时,将其写入您的状态管理器(如有必要,也可以在dispose()
方法中"取消写入"(。
然后,在处理onMessage
的方法中,检查用户的当前屏幕。如果他们在聊天屏幕上,则退出,如果没有,则执行覆盖。