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