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

时间:2017-07-21 11:47:59

标签: android firebase google-cloud-platform firebase-cloud-messaging gcmlistenerservice

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

我想要实现的目标是立即通过" FirebaseMessagingService"当我发送上游消息时。为了解决这个问题,我使用setTtl小值 并且在1到100000之间的大值但没有任何变化的情况下,仅当存在从FCM到应用程序的下游消息时,我仍然会收到有关上游消息的通知

请让我知道为什么" FirebaseMessagingService"不要立即报告从App发送到服务器的消息的状态

code-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());
            */
}

1 个答案:

答案 0 :(得分:1)

你问: ...为什么“FirebaseMessagingService”中的回调不会立即报告从App发送到服务器的消息的状态

The documentation解释说:

  

为了优化网络使用,FCM批准对onMessageSent和的响应   onSendError,因此每个都可能不会立即确认   消息

正如我在previous version of this question的评论中所指出的那样,我发现onMessageSent()的调用延迟了大约20分钟。