firebase - 使用条件显示后台通知 - Flutter
问题描述
我正在开发一个应用程序,如果任何其他用户喜欢他的照片,用户将收到通知。
我能够毫无问题地处理应用内通知并应用我的条件。
不幸的是,我无法处理后台通知。
这是我到目前为止所做的:
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
if (1 > 1) {
print('send it');
return true;
} else {
print('don\'t send it');
return false;
}
}
无论我在 _firebaseMessagingBackgroundHandler 下做什么,无论如何都会显示通知。
我的处理程序被触发,我可以print
在控制台中看到。
我相信 FCM SDK 中有另一个句柄可以处理这个通知,而 FirebaseMessaging.onBackgroundMessage 只是一个选项。
有什么想法吗?谢谢你!
解决方案
您尝试处理后台消息的方式很好,但还有更多要了解 FCM 的真正工作原理。
首先,Firebase 为我们提供了两种消息传递方式
通知消息
FCM 代表客户端应用程序自动向最终用户设备显示消息。通知消息具有一组预定义的用户可见键和自定义键值对的可选数据负载
数据信息
客户端应用程序负责处理数据消息。数据消息只有自定义键值对,没有保留键名
现在,对于您的方案,您应该发送消息,Firebase
然后Data Message
您可以控制它,否则,如果您发送消息Notification Message
,Firebase
通知将自动显示。
以下是两种不同类型的示例示例片段Firebase Message
- 通知消息:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}
- 数据信息
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
最后,我建议你看看官方文档About FCM message。
推荐阅读
- arrays - 使用 for 循环设置按钮的标题
- java - 使用 /usr/libexec/java_home 切换 java home 在 MacOS 升级到 Big Sur 后停止工作
- vue.js - 如何在 web.config 中使用 .env 变量?
- wpf - 如何将 IGrouping 绑定到包含 dataTemplate 的数据网格?
- dll - 用于 dot net core 应用程序的 CI/CD 管道,其中 2 个 DLL 文件存储在 Azure DevOps 存储库的文件夹中 - 构建和发布问题
- c++ - 是否可以在 C++ 中使用容器的大小作为 priority_queue 的优先级?
- ruby-on-rails - 未定义的方法“start_with?” 对于 false:FalseClass on rails 生成 -p
- kotlin - 如何防止 Kotlin 中的类型擦除?
- google-cloud-firestore - 是否有一种简单的方法可以将文档字段值复制到同一文档中的另一个新字段以用于整个 Firestore 集合
- swift - 在 Swift 中,有没有办法知道文件是否正在下载?