我定义了firebase服务:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
public void onMessageReceived(com.google.firebase.messaging.RemoteMessage remoteMessage) {
mgr.showNotification("X:" + remoteMessage.getNotification().getTitle(), "X:" + remoteMessage.getNotification().getBody(), data);
}
@Override
public void onDeletedMessages() {}
@Override
public void onMessageSent(java.lang.String s) {}
@Override
public void onSendError(java.lang.String s, java.lang.Exception e) {}
}
和android清单:
<service
android:name=".integration.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
我注意到FCM有两种非常奇怪的行为:
有时调用onMessageReceived(),有时不调用。这取决于我的应用程序是否正在运行。无论如何,通知仍然显示(这就是为什么我添加了“X:”)
有时没有通知,根本没有调用onMessageReceived,但我可以在开发者控制台的“FCM诊断”中看到该消息已被确认:
Current Status Acknowledged Collapse Key <key> TTL 2,419,200 TIME CURRENT STATUS 20 Jun 17:35 Device connected 20 Jun 21:23 Accepted 20 Jun 21:23 Delivered 20 Jun 21:28 Acknowledged
有人可以解释一下吗?
答案 0 :(得分:3)
onMessageReceived(...)
方法将不调用,如果该应用位于后台或已杀死 。
但是如果您通过API发送消息,它可以正常工作。无论app是在后台,前台还是已杀死,都会以onMessageReceived(...)
方式传递消息。
FCM中有两种类型的消息:
参考:https://firebase.google.com/docs/cloud-messaging/downstream#sample-receive
更新:
如果您不知道如何使用API发送消息,可以使用名为AdvancedREST Client的工具,其Chrome扩展程序或类似工具,并使用以下参数发送消息。参考链接:https://firebase.google.com/docs/cloud-messaging/downstream
要解决或“定位”下游消息,应用服务器将使用接收客户端应用的注册令牌设置为。您可以使用预定义字段或自定义数据消息发送通知消息;有关有效负载支持的详细信息,请参阅消息有效内容中的通知和数据此页面中的示例显示如何使用HTTP和XMPP协议发送数据消息。
https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{ "data": {
"score": "5x1",
"time": "15:10"
},
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}
您可以从firebase控制台获取服务器密钥(AIzaSyZ-1u ... 0GBYzPu7Udno5aA):您的项目 - &gt;设置 - &gt;项目设置 - &gt;云消息传递 - &gt;服务器密钥