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