有没有办法删除FCM中的推送通知?

时间:2019-02-02 23:30:03

标签: java firebase firebase-cloud-messaging

在我的应用程序中,我正在提供用户之间的视频和语音呼叫。我也在使用Firebase Realtime数据库和FCM。

以下是我的通知传递的数据:

data: { 
    channel_id: channel_id,
    user_id: user_id
}

在我的FirebaseMessagingService类中,我检索数据并打开Video / Call活动,如下所示:

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 。

那么,请问有没有办法取消已发送的通知,或者知道这些通知的发送状态,或者采取其他方式取消?这样,我就可以为用户添加未接来电列表。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

  1. 取消通话时发送另一条FCM消息
  2. 仅使用FCM发送痒痒

取消通话时发送另一条FCM消息

您可以提供FCM消息的属性之一是collapse_key。当您发送带有collapse_key的消息时,该消息将用相同的collapse_key值替换以前的任何消息。

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

仅使用FCM发送痒痒

或者,您可以将FCM消息称为所谓的“挠痒痒”:几乎为空的消息,仅告诉应用程序唤醒并检查其在数据库中的传入消息队列。

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

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