如何避免通过 FCM 发送上游消息的延迟



我正在尝试使用 FCM 发送上游消息,如下code-1所示。当我从FCM向应用程序发送消息时,它到达应用程序时伴随着和延迟的上游消息,什么 我的意思是延迟上游消息是,当应用程序已经发送上游消息但应用程序用户从未收到有关其状态的通知时,例如 onMessageSent">

我试图实现的是,当我发送上游消息时,立即通过"FirebaseMessagingService"收到通知。 为了解决这个问题,我使用了小值的setTtl并且值在 1 到 100000 之间很大,但没有任何变化,只有当有从FCM到 App 的下游消息时,我仍然会收到有关上游消息的通知

请让我知道为什么"Firebase消息服务"中的回调没有立即报告从应用程序发送到服务器的消息的状态

代码-1:发送上游消息:

mBtnSendUpstreamMsg = (Button) findViewById(R.id.btn_send_upstream_message);
mBtnSendUpstreamMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder("13xxxxx" + "@gcm.googleapis.com")
.setMessageId("2")
.addData("my_message", "Hello World")
.addData("my_action","SAY_HELLO").setTtl(1000000)
.build());
}
});

MyAndroidFirebaseMsgService.java

public class MyAndroidFirebaseMsgService extends FirebaseMessagingService {
private final static String TAG = MyAndroidFirebaseMsgService.class.getSimpleName();
@Override
public void onMessageSent(String s) {
super.onMessageSent(s);
Log.d(TAG, "onMessageSent: upstream message");
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "onMessageReceived: downstream message");
//Log data to Log Cat
Log.d(TAG, "onMessageReceived->From: " + remoteMessage.getFrom() +" | "+ remoteMessage.getTo());
Log.d(TAG, "onMessageReceived->Notification Message Body: " + remoteMessage.getNotification().getBody());
//create notification
createNotification(remoteMessage.getNotification().getBody());
/*
FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder("135855xx" + "@gcm.googleapis.com")
.setMessageId("2")
.addData("my_message", "Hello World")
.addData("my_action","SAY_HELLO").setTtl(1000000)
.build());
*/
}

你问:...为什么"Firebase消息服务"中的回调没有立即报告从应用程序发送到服务器的消息的状态

该文档解释:

为了优化网络使用,FCM 对 onMessageSent 和 onSendError,因此每个确认可能不会立即生效 消息

正如我在对这个问题前一版的评论中指出的那样,我观察到onMessageSent()被召唤的延迟了大约20分钟。

最新更新