我正在尝试使用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());
*/
}
答案 0 :(得分:1)
你问: ...为什么“FirebaseMessagingService”中的回调不会立即报告从App发送到服务器的消息的状态
为了优化网络使用,FCM批准对onMessageSent和的响应 onSendError,因此每个都可能不会立即确认 消息
正如我在previous version of this question的评论中所指出的那样,我发现onMessageSent()
的调用延迟了大约20分钟。