Android FCM - onMessageReceived未在后台调用

时间:2017-10-31 16:44:27

标签: android firebase notifications firebase-cloud-messaging

我正在使用FCM。通知正常工作,并且在Foreground上调用onMessageReceived,但是当我在应用程序处于后台/已杀死时收到通知时,该方法永远不会被调用。

我使用数据消息作为Firebase文档建议但没有成功......

3 个答案:

答案 0 :(得分:1)

FCM有3种通知

<强> 1。通知消息    Json正文只有notification标签    如果应用程序在后台,FCM将自动在客户端应用程序中显示通知。 onMessageReceived()将在前台调用。在后台,onMessageReceived()将不会被调用。

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

<强> 2。数据信息    Json正文只有data标签    开发者必须显示通知。 onMessageRecieved将在前台和后台都被调用。 json应该只有数据标签

 {
      "message":{
        "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
        "data":{
          "Nick" : "Mario",
          "body" : "great match!",
          "Room" : "PortugalVSDenmark"
        }
      }
    }

第3。通知和数据消息

json正文将包含notificationdata标记。仅当app位于前台时才会调用onMessageReceived()。如果app在后台并且不会调用onMessageReceived(),则会自动显示通知。

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

有关详细信息,请参阅https://firebase.google.com/docs/cloud-messaging/concept-options

答案 1 :(得分:0)

您确定要添加此服务吗? 的AndroidManifest.xml

<service android:name=".services.fcm.FirebaseService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

答案 2 :(得分:0)

这是我发送的通知:

 payload = new JSONObject();
 notification = new JSONObject();

 notification.put("title", "Avisos");
 notification.put("text", "Nuevos avisos disponibles");

 payload.put("data", notification);
 payload.put("to", "/topics/avisos");
 payload.put("priority",10);