当应用在后台时,不会调用Firebase onMessageReceived

Sil*_*los 9 android push-notification firebase firebase-cloud-messaging

我在Android应用中使用Firebase作为我们的消息服务.我已经对Firebase进行了相当多的研究,我理解无论应用程序是在前台运行还是现在运行都会改变onMessageReceived方法中收到的数据类型.

我想要完成的是解析来自Remotemessage的传入数据,并根据自定义标记执行与它不同的操作.IE,如果数据映射包含一个名为"My_Custom_Tag"的字段,我想完全覆盖弹出的标准firebase消息并编写一个自定义消息.

问题是,当应用程序在后台运行时,我放入onMessageReceived的任何代码都不会被触发.当应用程序在前台运行时,它可以正常工作,但如果应用程序在后台,则无法检测/接收任何内容.

以下是一些示例代码:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

    Map<String, String> aMap = remoteMessage.getData();
    //Custom object here for easier parsing
    PushNotificationsPojo pojo = this.convertResponseToPojo(aMap);

    if(pojo == null){
        passToFirebase(remoteMessage);
        return;
    }

    if(pojo.getData().getCustomTag().equals(PushNotificationsPojo.ID_TAG_CHAT_MESSAGE)) {
        createCustomNotification1(pojo);

    } else if (pojo.getData().getCustomTag().equals(PushNotificationsPojo.ID_TAG_SOME_OTHER_MESSAGE)){
        createCustomNotification2(pojo);

    } else if (pojo.getData().getCustomTag().equals(PushNotificationsPojo.ID_TAG_STUFF_AND_WHATNOT)) {
        createCustomNotification3(pojo);

    } else {
        passToFirebase(remoteMessage);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何编辑MyFirebaseMessagingService以便我可以检查传入的数据,确定标记信息,并决定将其传递给firebase,以便它可以使用标准处理或不将其传递给firebase并编写我的我的应用程序在后台运行时,我自己的自定义显示通知?

谢谢大家!

PS,Firebase-Dungeon-Master Frank van Puffelen有什么机会?

小智 30

从FCM消息中删除通知有效内容,以便将数据有效负载传递给onMessageReceived方法.

阅读这个这个认真.

当您的应用程序位于后台时,仅当没有通知有效负载时,才会将数据有效负载传递到onMessageReceived方法.(标出单词)

如果两个有效载荷都存在,则系统自动处理通知部分(系统托盘),并且您的应用程序在启动器活动的意图的额外内容中获取数据有效负载(在用户点击通知之后).

为了能够成功地为Android和iOS两个平台提供服务,您可能必须根据客户端的操作系统发送不同的FCM消息.


sss*_*ock 5

Guyz请仔细听,我经过许多链接,终于在这里找到了解决方案。

  1. 当应用程序处于后台时,应调用onMessageReceived方法

此有效载荷将起作用...

{
  "data":{
    "title": "hello",
    "body": "this is body"
  },
  "to": "c5iuJ7iDnoc:APA91bG6j2c5tiQ3rVR9tBdrCTfDQYxkPwLuNFWzRuGHrBpWiOajR-DKef9EZEEVKA-kUBfXVcqHT-mClYfad06R_rBjhRZFKVdBL7_joXE5hFEwR45Qk8wgQdia2b-LmjI1IheFGZS8"
}
Run Code Online (Sandbox Code Playgroud)

此有效负载将无法使用...

{
  "notification":{
    "title": "hello",
    "body": "this is body"
  },
  "to": "c5iuJ7iDnoc:APA91bG6j2c5tiQ3rVR9tBdrCTfDQYxkPwLuNFWzRuGHrBpWiOajR-DKef9EZEEVKA-kUBfXVcqHT-mClYfad06R_rBjhRZFKVdBL7_joXE5hFEwR45Qk8wgQdia2b-LmjI1IheFGZS8"
}
Run Code Online (Sandbox Code Playgroud)

因为当加载包含“通知”时,onMessageReceived不会调用


归档时间:

查看次数:

19000 次

最近记录:

8 年,6 月 前