【问题标题】:How to avoid delay in sending upstream message via FCM如何避免通过 FCM 发送上游消息的延迟
【发布时间】:2017-07-21 11:47:58
【问题描述】:

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

我想要实现的是,在我发送上游消息时立即通过“FirebaseMessagingService”获得通知。为了解决这个问题,我使用了小值的setTtl 并且值在 1 到 100000 之间但没有任何变化,我仍然会在有来自 FCM 的下游消息到应用程序时收到有关上游消息的通知

请告诉我为什么“FirebaseMessagingService”中的回调没有立即将应用程序发送消息的状态报告给服务器

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

【问题讨论】:

  • 检查FCM Token是否生成? @user2121
  • @ChiragTalsaniya 请告诉我生成的 FCM 令牌和延迟的上游消息之间的关系是什么?无论如何,FCM 令牌是生成的,如问题中所述,我收到的下游消息为因为它们被发送,但上游消息传递总是有延迟
  • 糟糕..误解了。让我们检查相同的@user2121
  • 我观察到同样的情况,即使 ttl 为 0

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


【解决方案1】:

你问:...为什么“FirebaseMessagingService”中的回调没有立即将App发送消息的状态报告给服务器

The documentation 解释:

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

正如我在 previous version of this question 的 cmets 中所指出的,我观察到 onMessageSent() 的呼叫延迟大约 20 分钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多