有办法删除FCM发送的推送通知数据消息吗?

问题描述 投票:0回答:3

在我的应用程序中,我在用户之间提供视频和语音通话。我也使用 Firebase 实时数据库和 FCM 来执行此操作。

这是我的通知传递的数据:

data: { 
    channel_id: channel_id,
    user_id: user_id
}

在我的 FirebaseMessagingService 类中,我检索数据并打开视频/通话活动,如下所示:

if(remoteMessage.getData().size > 0) {
        Intent intent = new Intent(this, VideoCallActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra("channel_id", remoteMessage.getData().get("channel_id"));
        intent.putExtra("user_id", remoteMessage.getData().get("user_id"));
        getApplicationContext().startActivity(intent);

    }

即使应用程序处于后台,一切也能完美运行。然而,我面临这个问题:

如果用户在被呼叫时没有互联网连接,当他连接到互联网时,即使呼叫已(由呼叫者)中止并且通知已从 Firebase 实时数据库中删除,他的手机也会自动启动 VideoCallActivity。

那么,有没有办法取消已发送的通知,或了解这些通知的发送状态,或其他方法来做到这一点?这将允许我添加用户的未接来电列表。

谢谢!

java firebase firebase-cloud-messaging
3个回答
17
投票

在这种情况下,我知道有两种选择:

  1. 呼叫取消时发送另一条 FCM 消息
  2. 仅使用FCM发送tickle

呼叫取消时发送另一条 FCM 消息

您可以为 FCM 消息提供的属性之一是

collapse_key
。当您发送带有
collapse_key
的消息时,该消息将替换具有相同
collapse_key
值的任何先前消息。

当用户取消呼叫时,您可以使用它发送“不,算了”消息。

仅使用FCM发送tickle

或者,您可以让 FCM 消息只是所谓的“tickle”:一条几乎为空的消息,它只是告诉应用程序唤醒并检查数据库中的传入消息队列。

这样:如果呼叫仍在数据库中,应用程序就可以接听它。但如果数据库中没有调用,它就什么也不做。

您需要在服务中进行这种类型的数据库交互,以便它可以在应用程序后台运行时运行。


1
投票

按照文档中的建议给出过期时间是可行的 查看这里

设置消息的生命周期

在 Android 和 Web/JavaScript 上,您可以指定消息的最长生命周期。该值的持续时间必须为 0 到 2,419,200 秒(28 天),并且它对应于 FCM 存储并尝试传递消息的最长时间段。不包含此字段的请求默认最长期限为四个星期。

以下是此功能的一些可能用途:

  • 视频聊天来电
  • 即将到期的邀请活动
  • 日历活动

0
投票

awesome_notifications_fcm
可让您删除通知。但如果您不购买许可证令牌,它就会受到限制,并且源代码是在商业许可证下提供的。由于源代码已经公开,您可以研究它并了解他们如何在 Android 和 iOS 上分别实现这一目标。

https://github.com/rafaelsetragni/awesome_notifications_fcm

© www.soinside.com 2019 - 2024. All rights reserved.