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

2023-12-01

我在 Android 应用程序中使用 Firebase 作为消息服务。我对 Firebase 研究了很多并且我明白应用程序在前台运行或现在运行是否会更改 onMessageReceived 方法中接收到的数据类型.

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

问题是,当应用程序在后台运行时,我放入 onMessageReceived 中的任何代码never被触发。当应用程序在前台运行时它工作得很好,但如果应用程序在后台则不会检测/接收任何内容。

下面是一些示例代码:

@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);
    }
}

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

谢谢大家!

PS,有机会的话Firebase 地下城主 Frank van Puffelen有想法吗?


从 FCM 消息中删除通知负载,以便将数据负载传递到 onMessageReceived 方法。

Read this and this小心。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当应用程序在后台时,Firebase onMessageReceived 不会被调用 的相关文章

  • 路径中包含空格的 Firestore 安全规则

    我需要为名为 测试用例 的子集合创建一个 firestore 规则 由于 firestore 规则不是用 javascript 编写的 因此我似乎无法在匹配后获取路径来接受空格而不会出现错误 我尝试过引号 转义字符的反斜杠 以及将整个路径放
  • 如何改变android中menuItem的背景颜色?

    我正在以编程方式将菜单项添加到菜单中 我想在选择特定项目时添加背景颜色 如何为 menuItem 添加背景 您的回答将不胜感激 虽然其他答案提供了更改样式 这会影响all菜单项 据我了解 需要更改一个菜单项 我建议你使用android ac
  • doInBackground 运行时是否可以停止 asynctask?

    我正在 ActivityB Oncreate 中创建异步任务 在该任务中 我正在运行无限 while 循环doInBackground 当我转到上一个活动并再次回到该活动时 创建了另一个异步任务 我的问题现在是两个无限 while 循环正在
  • 更改 AChartEngine 中的图例大小

    我想专门更改饼图的图例大小输出 我已经尝试了所有可以找到的 AChartEngine 方法 但没有一个只能更改图例文本大小 我必须重写 onDraw 函数吗 如果是这样 怎么办 要设置图例高度 请使用 renderer setLegendH
  • 无法将 Tesseract OCR 模块添加到 Android Studio

    我按照此处找到的分步指南进行操作 https www codeproject com Articles 840623 Android Character Recognition https www codeproject com Artic
  • layout.xml 的用途是什么?

    人们为什么使用layout xml在他们的resources like
  • Firebase 云消息传递 (FCM) 令牌是否独一无二?

    我在 firebase 文档中找不到任何地方表明收到的令牌是唯一的 如果有人能指出我这样的地方 我将不胜感激 主要问题 我应该在数据库中为此类标记设置唯一约束吗 谢谢 根据文档 它们是唯一的 但您无法将它们绑定到特定设备 因为它们可能会发生
  • Android 手机应用意图

    我想在手机上启动手机应用程序作为意图 我正在使用这个代码 startActivity getPackageManager getLaunchIntentForPackage com android phone 但该函数抛出一个空指针异常 因
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • Flutter / FireStore:如何在 Flutter 中显示 Firestore 中的图像?

    我想将我在应用程序中使用的一些图像放入 Firestore 并从那里显示它们 而不是将它们作为资产捆绑在我的应用程序中 为了做到这一点 我想出了以下解决方案 对于我想要显示图像的项目 我创建了一个 Firebase 文档 其中有一个字段存储
  • Android 在启动时启动服务,如何在设备重启后重新启动服务类?

    我需要在启动时启动一项服务 我搜索了很多 他们正在谈论广播接收器 由于我是 Android 开发新手 所以我对 Android 上的服务并没有清楚的了解 请提供一些源代码 您的接收者 public class MyReceiver exte
  • invalidateOptionsMenu 在片段中不起作用

    显示或隐藏项目ActionBar根据文本中是否有文本EditText or not 所以 我做了以下事情 public class NounSearch extends android app Fragment EditText seach
  • 如何从SurfaceView绘制到Canvas?

    我正在尝试做简单的画家 问题是Android看起来有三个独立的Canvas并给我它来顺序绘制 我用以下方式制作了用户界面SurfaceView 把霍尔德从中拿走 Override protected void onCreate Bundle
  • 点击监听器的公共类

    我的所有 6 项活动中有 7 个按钮 所有 6 个按钮在所有活动中都具有相同的功能 如何为这 6 个按钮执行通用的单击事件侦听器 您可以创建一个实现 View OnClickListener 的新类 如下所示 public class My
  • Android开发:未定义方法

    大家好 我是 Android 和 Eclipse 的新手 我刚刚遵循了developer android com 上的教程 现在我在添加操作栏 http developer android com training basics actio
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 按名称查找视图

    是否可以通过名称而不是 id 来查找视图 findViewById R id someView 但我想做这样的事情 findViewByName someView 在处理 xml 时 您必须通过标识符查找视图 但是您可以使用以下方式查找标识
  • iOS 对 Google 云消息传递的支持

    我在谷歌的开发者控制台中看到 GCM 允许为 iOS 生成 API 密钥 我在网上搜索了有关如何在 iOS 应用程序中通过 GCM 实现推送通知的任何类型的文档 但没有找到答案 真的有可能在 iOS 应用程序中使用 GCM 实现推送通知 j
  • 使用支持库中的 BottomSheet 时如何调暗背景?

    怎样才能让背景像显示的那样变暗here https material design storage googleapis com publish material v 8 material ext publish 0Bzhp5Z4wHba3

随机推荐

  • 对结构队列进行排序

    我目前有一个队列 其中包含用户指定数量的结构 称为Process 进程由 pid 突发和到达组成 我想按到达时间对队列进行排序 但我完全不知道从哪里开始 这是一些伪代码来帮助说明我想说的内容 struct Process int pid i
  • cmake找不到java,但是已经安装了

    我正在尝试使用 cmake 构建一个项目 这个项目主要使用java 问题是在代码中 find package Java REQUIRED 我收到以下错误 CMake Error at usr share cmake 2 8 Modules
  • 将日期字符串格式化为适合 Google 日历作为参数

    我有一个代表 2014 July 2014 等数据的字符串 我正在 javacript 中格式化此日期 以便我可以将其用作 Google 日历图表的参数 E g var x 2014 July 12 var splitted x spilt
  • 从 Blob 保存到本地文件

    我有一个难题要问你 我已经为此苦苦挣扎了一段时间 我正在寻找一种解决方案 我可以将文件保存到用户计算机 而无需本地存储 因为本地存储有 5MB 限制 我想要 保存到文件 对话框 但我想要保存的数据只能在 JavaScript 中使用 我想阻
  • Java String.replace/replaceAll 不工作

    因此 我试图解析 Java 中包含 左 方括号的字符串输入 我有str replace 但这绝对没有任何作用 我试过了replaceAll另外 具有多个不同的正则表达式 但输出始终保持不变 我想知道这是否可能是由于我所有的反斜杠字符都显示为
  • 影响 d3.js 中多个单独图表的交互?

    我正在尝试在 d3 js 中创建一个数据可视化 其中包含两个图表 一个平行轴图和水平颜色条图 我只是起了这个名字 但它基本上是一系列彩色矩形 平行轴图中的每条线都与颜色条图中的一组矩形相关联 现在 将鼠标悬停在给定的线上会突出显示该行 并将
  • 将 docker-compose 与 docker swarm 结合使用

    我在用着docker 1 12 1我有一个简单的 docker compose 脚本 version 2 services jenkins slave build slave image jenkins slave 1 0 restart
  • React-Native:无法在 Android 设备上以发布模式显示远程图像

    我正在我的 Android 设备 三星 9 Android 9 API 28 中运行一个简单的反应本机应用程序 因此在调试模式下 使用此命令行可以正常工作 react native run android 这是结果 但在释放模式下 reac
  • Jersey/REST--NoSuchMethodError:com.sun.jersey.core.reflection.ReflectionHelper.getContextClassLoaderPA()Ljava/security/Privilege

    当尝试使用 jersey 构建 REST 服务时 我收到 NoSuchMethodError 错误 任何帮助将非常感激 我的 POM xml
  • GetExtendedTcpTable 不返回与 netstat -ano 相同的结果

    我使用此代码来获取我的电脑中打开的端口的列表以及使用每个端口的应用程序 string Port GetListOfTcpPorts string ApplicationName string result string aux string
  • 通过测试侦听器删除(重复)失败的 TestNG 结果

    类似于这里发布的解决方案TestNG 重试失败的测试不会输出正确的测试结果 我尝试在 onFinish ITestContext context 期间使用测试侦听器删除 重复的 测试结果 尽管使用 context getFailedTest
  • Visual Studio 2012如何绘制窗口边框?

    如何使用 Windows 窗体实现与新的 Visual Studio 2012 主窗口中看到的相同的 alpha 边框效果 它的窗户似乎在发光 所以我不确定这是否是最好的方法 但是如果您使用 Spy 32 位 并查看窗口 您可以看到在 Vi
  • 使用 Sparklyr 完成时间序列

    我试图在我的时间序列数据集中找到丢失的分钟数 我为一个小样本的本地性能编写了一个 R 代码 test lt dfv gt mutate timestamp as POSIXct DaySecFrom UTC gt complete time
  • 使用枢轴点缩放画布后,x 和 y 坐标错误

    我正在尝试在画布上实现缩放 该缩放应集中在枢轴点上 缩放工作正常 但之后用户应该能够选择画布上的元素 问题是 我的平移值似乎不正确 因为它们的偏移量与我不缩放到枢轴点的值不同 缩放没有枢轴点并拖动效果很好 我使用了一些代码这个例子 相关代码
  • 为什么 python 字符串 split() 不分割

    我有以下 python 代码 class MainPage BaseHandler def post self location id reservations self request get all reservations for r
  • 除了 build/target 文件夹之外,简单的 spring-boot jar 不起作用

    我有一个简单的 spring boot 应用程序 但除了从 target build 文件夹运行之外它不起作用 这是我的所有配置和文件 请帮助我找出为什么它不起作用以及我做错了什么 当我从目标文件夹运行时它工作得很好java jar tar
  • React Router 中 到底有什么用?

    我是 React 学习的新手 并尝试使用react router dom 构建一个应用程序 当我遇到 交换机 这个术语时 我能够实现基本的路由 谁能用我们使用 switch 的用例示例向我解释一下它的用途是什么 由于您是新手 因此我将花费更
  • `$('#form').serialize()` 弄乱了 UTF-8 字符

    我正在使用 AJAX 插入表单并使用 form serialize 获取所有输入并将其发送到 insert php 问题是角色喜欢 become A9等等 在发送之前如何防止这种情况发生 或者当我通过 POST 检索它时如何获取正确的字符
  • 根据时间在 Gmail 中搜索电子邮件

    我想要一份昨天来自 Gmail 的所有电子邮件的列表 我正在尝试使用 google apps 脚本来处理它 方法是在我的收件箱上编写查询 然后使用 GmailApp search gmail 中的 after 和 before 搜索查询会返
  • 当应用程序在后台时,Firebase onMessageReceived 不会被调用

    我在 Android 应用程序中使用 Firebase 作为消息服务 我对 Firebase 研究了很多并且我明白应用程序在前台运行或现在运行是否会更改 onMessageReceived 方法中接收到的数据类型 我想要完成的是解析来自 R