当应用程序位于前台时,Android GCM消息未调用onMessageReceived

当应用程序位于前台时,Android GCM消息未调用onMessageReceived,android,google-cloud-messaging,sendbird,Android,Google Cloud Messaging,Sendbird,根据报告: 如果您希望前台应用程序接收通知消息或数据消息,则需要编写代码来处理onMessageReceived回调 我所拥有的: 我的服务扩展了FirebaseMessagingService和 如文档中所述,在MessageReceived上覆盖 (也在清单和权限中) 消息的有效负载位于数据地图和 通知对象为空(如预期) 应用程序处于后台时的通知按预期工作 消息由SendBird(第三方聊天解决方案)发送。在他们的终端和我们的其他客户端实现(ios、web和后端)中,一切都很好 问题是当

根据报告:

如果您希望前台应用程序接收通知消息或数据消息,则需要编写代码来处理onMessageReceived回调

我所拥有的:

  • 我的服务扩展了
    FirebaseMessagingService
    和 如文档中所述,在MessageReceived上覆盖
    
    (也在清单和权限中)
  • 消息的有效负载位于
    数据
    地图和
    
    通知
    对象为空(如预期)
  • 应用程序处于后台时的通知按预期工作
  • 消息由SendBird(第三方聊天解决方案)发送。在他们的终端和我们的其他客户端实现(ios、web和后端)中,一切都很好
问题是当应用程序位于前台时,
onMessageReceived
回调没有被调用

我错过什么了吗?对于收到的消息,不应该是处理应用程序的两个应用程序状态的同一服务吗?我不想在应用程序已经打开时显示系统栏通知,但我确实想更改UI中的某些元素,以指示用户他们在聊天中有新消息

代码如下:

服务:

class ChatMessagingService : FirebaseMessagingService() {

override fun onMessageReceived(remoteMessage: RemoteMessage) {
    super.onMessageReceived(remoteMessage)

    Timber.e("----------- MESSAGE RECEIVED -------------")

    displayNotification(remoteMessage)

    sendBroadcastToActivity(remoteMessage) // 
}
}

在舱单上

        <service
        android:name=".notifications.ChatMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
提前谢谢大家

编辑,这种方法是评论者需要的,但它甚至没有达到它,所以我认为这不是问题

private fun sendBroadcastToActivity(remoteMessage: RemoteMessage) {
    val messageData = Gson().fromJson<SendBirdPNPayload>(remoteMessage.data["sendbird"], SendBirdPNPayload::class.java)
    Intent(MESSAGE_RECEIVED_ACTION).also { intent ->
        intent.putExtra("message_id", messageData.messageId)
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
    }
}
私人娱乐发送广播活动(remoteMessage:remoteMessage){
val messageData=Gson().fromJson(remoteMessage.data[“sendbird”],SendBirdPNPayload::class.java)
意图(消息\u已收到\u操作)。另外{Intent->
intent.putExtra(“message_id”,messageData.messageId)
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}
}

扩展FirebaseMessagingService的类名与您在Manifest.xml中定义的服务名称不同。试试这个:

<service
    android:name = ".ChatMessagingService"
    android:stopWithTask="false">
    <intent-filter>
         <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

谢谢大家的帮助。我们已经发现,这不是我们的代码的问题,一切都是它应该的。如果用户连接到聊天室(通过sdk)且应用程序位于前台,则聊天室的第三方解决方案不会发送推送通知。因此,我们必须使用另一种技术来更改UI


再次感谢大家的帮助

请在这里查看答案,是否可以显示函数“sendBroadcastToActivity()”??还要检查您在日志中收到的数据负载。@sadat我一直在读取多个响应,但问题不是如何在前台显示通知,问题是没有调用onMessageReceived。因此它不会输入,因此不会执行任何操作。@Nazimch完成,但流无论如何不会到达该方法检查日志中的“remoteMessage().getData()”,看看它是否提供了一些信息。@Albertogarido我更新了我的答案。请尝试此方法。希望它能起作用是的,是我试图用真实代码隐藏公司名称:D。名称是相同的,对不起。服务的包路径有什么变化吗?我的服务在{$app_id}.notifications.ChatMessagingService中。我应该删除清单中的“通知”部分吗?
<service
    android:name = ".ChatMessagingService"
    android:stopWithTask="false">
    <intent-filter>
         <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>