0

根据文档

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

是)我有的:

  • 如文档中所述(也在清单和权限中),我有扩展FirebaseMessagingService和覆盖的服务。onMessageReceived
  • 消息的有效负载在data地图中,并且 notification对象为空(如预期的那样)。
  • 应用程序在后台时的通知按预期工作。
  • 消息由 SendBird(第 3 方聊天解决方案)发送。在他们的终端和我们的其他客户端实现(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>

firebase 和 gcm 版本

implementation 'com.google.android.gms:play-services-gcm:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'

谢谢大家

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

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)
    }
}
4

2 回答 2

0

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

<service
    android:name = ".ChatMessagingService"
    android:stopWithTask="false">
    <intent-filter>
         <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
于 2020-01-08T12:50:12.603 回答
0

感谢大家尝试提供帮助。我们发现这不是我们的代码的问题,一切都按预期进行。如果用户连接到聊天(通过 sdk)并且应用程序处于前台,则用于聊天的 3rd 方解决方案不会发送推送通知。所以我们必须使用另一种技术来对 UI 进行更改。

再次感谢大家的帮助!

于 2020-01-09T10:50:11.567 回答