当前位置: 首页 > 知识库问答 >
问题:

有没有办法在后台使用FirebaseMessagingService从推送通知中获取数据?

卞琨
2023-03-14

有什么方法可以获得它吗?因为我需要在应用程序内的对话框窗口中显示它。推送通知不仅仅是文本和标题,它对用户来说不仅仅是信息,它还会起到一定的作用。

FireBaseMessagingService中接收通知标题、正文和有效负载:

override fun onMessageReceived(msg: RemoteMessage?) {
        val pNotification = msg?.notification
        val payload = msg?.data
        if (pNotification != null){
            val ntitle = pNotification.title
            val nMsg = pNotification.body
        }
        //working with payload - creating notification and Intent for LocalBroadcastmanager
}

正在从onResume()内部的附加程序捕获有效负载

private fun maybeFindBackgroundPayload(extras: Bundle?){
        if (extras != null){
            extras.keySet().forEach { key->
                val keyValue = extras[key]
                App.log("BackgroundKeyValues: $keyValue")
                if (key.equals("gcm.notification.body", ignoreCase = true) && keyValue != null){
                    ...
                    //Working with payload data key value - dont have title and body
                }
            }
        }
    }

共有1个答案

冯宏浚
2023-03-14

不幸的是,这是不可能的方式,您希望它的工作。

如果推送通知在有效载荷中有通知部分,而您的app在后台,则永远不会调用onMessageReceived。通知由Firebase自动创建和显示。没有办法截取此信息并修改通知或为此进行任何其他操作。只有点击通知后,您的应用程序才会获得控制权。

当应用程序处于前台时,正如您所提到的,将始终调用onMessageReceived。

{
"registration_ids":[
  "firebase_token"
],
"data":{
    "body":"body of notification",
    "title":"title of notification",
    "otherdatakey":"otherdatavalue"
}
}
@Override
public void onMessageReceived(RemoteMessage message) {
Map<String, String> dataMap = message.getData();
String title = dataMap.get("title");
String body = dataMap.get("body");
String otherdatavalue = dataMap.get("otherdatakey");
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setContentTitle(title)
            .setContentText(body)
            .setContentIntent(pendingIntent);//To handle click of notification

}
 类似资料:
  • 我正在通过GCM在我的项目中执行推送通知。我的应用程序可以在前台接收通知,但不能在后台接收。 我在方法内部收到一条消息 当应用程序在前台,但我没有得到任何调用的方法 当应用程序处于后台模式时。 我在互联网上搜索了很长时间,才知道这是我收到的有效载荷格式的问题。我收到的有效载荷看起来像 [通知:{"body":"any","title":"any title"},优先级: high,content_

  • 我正在开发ionic应用程序,需要使用FCM发送推送通知。我只想测试两个设备的推送通知。因为我已经有了这两个设备的令牌。 有没有办法使用angularjs向FCM发送RESTAPI POST请求,以向设备发送推送通知?

  • 我使用FCM(Firebase Cloud Messaging)在iOS中发送推送通知。 我能够在应用程序处于前台状态时收到通知。但当应用程序处于后台状态时,不会收到通知。每当应用程序进入前台状态时,才会收到通知。 我的代码是: 当App处于后台状态时: --根本不叫。 我在应用程序功能中启用了推送通知和后台模式下的远程通知。但应用程序仍然没有收到通知。 我提到了一些问题,但没能解决这个问题。iO

  • 问题内容: 我试图找到一种方法来查找数据库中的表的名称(如果存在)。我发现从sqlite cli我可以使用: 然后对于字段: 这显然在python中不起作用。有没有办法用python做到这一点,还是我应该只使用sqlite命令行? 问题答案: 您应该能够从表中访问表名称。 列名不能直接访问。获取它们的最简单方法是查询表并从查询结果中获取列名。

  • 我正在制作一个工作应用程序,目的是为Android Studio中使用Java的用户提供一个门户。我已经设置了Firebase云消息传递、身份验证和一个实时数据库来存储用户。我可以很容易地从云控制台发出推送通知,但我在想,有没有一种方法可以在不使用控制台的情况下,将推送通知发送到所有设备? 我的理由是,我不希望有人在人力资源意外删除一个用户,但我希望他们能够发送推送通知的情况,如关闭。有没有办法做

  • 我想在通知屏幕上显示通知,无论应用程序是在后台还是前台。我为寻找解决办法而疲惫不堪。非常感谢任何帮助。