在我的应用程序中,我正在提供用户之间的视频和语音呼叫。我也在使用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 。
那么,请问有没有办法取消已发送的通知,或者知道这些通知的发送状态,或者采取其他方式取消?这样,我就可以为用户添加未接来电列表。
谢谢!
答案 0 :(得分:2)
在这种情况下,我知道两个选择:
您可以提供FCM消息的属性之一是collapse_key
。当您发送带有collapse_key
的消息时,该消息将用相同的collapse_key
值替换以前的任何消息。
当用户取消呼叫时,您可以使用它发送“不,不用担心”消息。
或者,您可以将FCM消息称为所谓的“挠痒痒”:几乎为空的消息,仅告诉应用程序唤醒并检查其在数据库中的传入消息队列。
这样:如果呼叫仍在数据库中,则应用可以接听。但是,如果数据库中没有调用,它什么也做不了。
您将要在服务中进行这种类型的数据库交互,以便它可以在应用程序后台运行时运行。