【发布时间】:2020-06-20 09:22:39
【问题描述】:
在我的应用中,即使应用在前台,我也想接收 FCM 消息。所以我都按照https://firebase.google.com/docs/cloud-messaging/android/receive#sample-receive设置好了
然而,当我的应用程序在前台时,onMessageReceived 方法未被调用。请注意,当我的应用处于后台时,它会收到通知,因此与 FCM 本身的连接工作正常。
application 我的 AndroidManifest.xml
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_stat_ic_notification" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
MyFirebaseMessagingService.kt
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage) {
Timber.i("onMessageReceived") // never called
}
}
我使用 FCM 控制台发送通知。知道我做错了什么吗?为什么我的应用在前台时没有调用onMessageReceived?
【问题讨论】:
-
当我需要这样的行为时,我实现数据消息而不是通知消息。如果这样做,每个应用程序状态中的每个通知都将传递给 onMessageReceived 方法。
-
这是一种解决方法,但不是解决方案):
-
我认为提供的解决方法要好得多,因为您将拥有一个处理通知负载的入口点。
-
你的单一入口点是一件好事。但是我想知道为什么我的示例不起作用,因为我正在关注官方文档。
-
我用 FCM 实现了一个简单的例子,在我的例子中它可以工作:当我从 Notification Composer 发送通知消息时,在前台按预期调用 onMessageReceived。也许它是由使用 Kotlin 引起的?我用过 Java。
标签: android firebase firebase-cloud-messaging