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

Android GCM消息未调用onMessageReceived(当应用程序处于前台时)

穆城
2023-03-14

根据文件:

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

    null

我是不是漏掉了什么?不应该是同一个服务处理应用程序的两个应用程序状态来接收消息吗?我不想在app已经打开时显示系统栏通知,但我确实想改变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>
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)
    }
}

共有1个答案

冯野
2023-03-14

扩展FirebaseMessagingService的类名和您在Manifest.xml中定义的service的名称是不同的。试试看:

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