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

Pan*_*007 1 java firebase firebase-cloud-messaging

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

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

data: { 
    channel_id: channel_id,
    user_id: user_id
}
Run Code Online (Sandbox Code Playgroud)

在我的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);

    }
Run Code Online (Sandbox Code Playgroud)

即使应用程序在后台,一切都可以正常运行。但是,我面临着这个问题:

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

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

谢谢!

Fra*_*len 5

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

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

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

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

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

仅使用FCM发送挠痒痒

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

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

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