我正在使用 Firebase 控制台向用户发送通知。但是我想让用户禁用通知。我怎样才能禁用它们?
只有当应用程序处于前台时,我才能通过 FirebaseMessagingService 处理(和停止)通知。但是当应用程序处于后台时我无法停止通知。
原文由 martinodecarlo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在使用 Firebase 控制台向用户发送通知。但是我想让用户禁用通知。我怎样才能禁用它们?
只有当应用程序处于前台时,我才能通过 FirebaseMessagingService 处理(和停止)通知。但是当应用程序处于后台时我无法停止通知。
原文由 martinodecarlo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我还不能发表评论,但是 racs 的评论 对我帮助很大。
实际上,如果您想完全控制数据的处理方式,Firebase 文档建议使用数据推送而不是通知:firebase.google.com/docs/cloud-messaging/… - 引用:“当您希望 FCM 处理时使用通知代表您的客户端应用程序显示通知。当您希望您的应用程序处理显示或处理 Android 客户端应用程序上的消息时,请使用数据消息…”
所以基本上,我更改了推送通知请求的正文:
{
"data": {
"type" : "mytype"
},
"notification": {
"title": "My Title",
"body": "My Notification Message"
},
"to": "/topics/all"
}
到:
{
"data": {
"type" : "mytype",
"title": "My Title",
"body": "My Notification Message"
},
"to": "/topics/all"
}
现在我的应用程序即使在后台也每次都调用 onMessageReceived() ,我只是更改了方法以在推送数据中使用获得的通知标题和消息。
原文由 Alvin Rusli 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答963 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答840 阅读✓ 已解决
2 回答949 阅读
2 回答889 阅读
1 回答823 阅读
2 回答692 阅读
不确定为什么会发生这种情况(也许是代码片段?),但是有一个重量级的最终解决方案:在清单中定义您自己的 c2dm 接收器并将优先级设置为高(> 0),然后停止处理通知。
GCM 消息作为有序广播处理,因此您可以通过调用此方法来停止处理链:
https://developer.android.com/reference/android/content/BroadcastReceiver.html#abortBroadcast()
如果您不在接收器中执行任何操作,那么下一个接收器将进行处理,这将是 Firebase 接收器。
请注意:Firebase 正在发送远程配置更改的推送通知。因此,如果您使用 Remote Config,则不建议禁止任何数据推送。