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

未调用Firebase OnMessageReceed

乜清野
2023-03-14

FCM服务:

public class FCMService extends FirebaseMessagingService {


    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {


        Log.i(Constants.TAG,"onMessageReceived");

        Log.i(Constants.TAG, "From: " + remoteMessage.getFrom());

        if (remoteMessage.getData().size() > 0) {
            Log.d(Constants.TAG, "Message data payload: " + remoteMessage.getData());
        }


        if (remoteMessage.getNotification() != null) {
            Log.d(Constants.TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }


    }

}

应用程序分级:

  compile 'com.google.firebase:firebase-messaging:10.2.6'

舱单:

   <service android:name="communications.FCMService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
    </service>

-我从FCM控制台发送消息,但没有到达。FCM控制台在消息发送时显示OK。

-我从java服务器发送消息,但消息没有到达。当消息发送时,Java服务器显示我OK。

-发送消息,我使用生成的令牌在Android设备。

-之前,我在导入FCM库时犯了一个错误,那个错误解决了。当每次发送消息时发生过去的错误时,Android上就会发生异常。现在什么也没收到。

-我在Android设备上有一个互联网连接,我通过GCM(而不是FCM)从我过去实现的另一个应用程序接收消息。

-应用程序在前台。

一些日志与“FCM”过滤器。当我发送消息时,我会得到这个日志。

08-14 12:09:25.640 800-4739/? D/PowerManagerService: acquireWakeLockInternal: lock=862109980, flags=0x1, tag="wake:bidsy.app.bidsy/communications.FCMService", ws=null, uid=10354, pid=24073
08-14 12:09:25.640 800-4739/? D/PowerManagerNotifier: onWakeLockAcquired: flags=1, tag="wake:bidsy.app.bidsy/communications.FCMService", packageName=bidsy.app.bidsy, ownerUid=10354, ownerPid=24073, workSource=null
08-14 12:09:25.683 24073-24073/bidsy.app.bidsy D/ActivityThread: SVC-Creating service: CreateServiceData{token=android.os.BinderProxy@1c269013 className=communications.FCMService packageName=bidsy.app.bidsy intent=null}
08-14 12:09:25.683 24073-24073/bidsy.app.bidsy D/ActivityThread: SVC-CREATE_SERVICE handled : 0 / CreateServiceData{token=android.os.BinderProxy@1c269013 className=communications.FCMService packageName=bidsy.app.bidsy intent=null}
08-14 12:09:25.685 24073-24073/bidsy.app.bidsy D/ActivityThread: SVC-SERVICE_ARGS handled : 0 / ServiceArgsData{token=android.os.BinderProxy@1c269013 startId=1 args=Intent { act=com.google.firebase.MESSAGING_EVENT pkg=bidsy.app.bidsy cmp=bidsy.app.bidsy/communications.FCMService (has extras) }}
08-14 12:09:25.684 24073-24073/bidsy.app.bidsy D/ActivityThread: SVC-Calling onStartCommand: communications.FCMService@3e035250, flags=0, startId=1
08-14 12:09:25.691 800-1592/? D/PowerManagerService: releaseWakeLockInternal: lock=862109980 [wake:bidsy.app.bidsy/communications.FCMService], flags=0x0, total_time=52ms
08-14 12:09:25.691 800-1592/? D/PowerManagerNotifier: onWakeLockReleased: flags=1, tag="wake:bidsy.app.bidsy/communications.FCMService", packageName=bidsy.app.bidsy, ownerUid=10354, ownerPid=24073, workSource=null
08-14 12:09:25.692 24073-24073/bidsy.app.bidsy D/ActivityThread: SVC-Destroying service: communications.FCMService@3e035250

似乎消息到达了服务,但没有显示出来。

当然,我不会在日志中使用任何筛选器来检查消息是否到达onMessageReceived

我在这里发现类似的问题没有答案,有相同的日志:

无法接收推送通知消息

D / FirebaseMessaging: Unknown intent action: com.google.firebase.MESSAGING_EVENT

我的问题的解决方案在这里:

我在使用旧版本的FCM(即10.2.6未知意图操作)时遇到了一个问题:com.google.firebase.messaging_event

共有1个答案

钱星辰
2023-03-14

从某个地方发送的消息需要有一个数据有效负载,而没有通知有效负载,否则它们将不能一致地到达MessagingService中的“OnMessageReceived”中。

通知消息包含一组预定义的用户可见键。相比之下,数据消息只包含用户定义的自定义键值对。通知消息可以包含一个可选的数据负载。

(“通知消息可以包含一个可选的数据负载”,只有当您的应用程序处于前台时,它才会提交给您的服务!)

>

  • 从控制台创建的消息将始终是通知消息!

    您不能发送普通的数据消息,这些消息将始终通过Firebase-Console到达您的服务。这只能通过REST-API(FCM协议)或Admin SDK实现。

    还有一件重要的事:

    如果通知没有可选的数据负载,则单击时将显示通知并打开应用程序。

    数据消息只包含用户定义的自定义键值对。(下文解释)。如果您希望消息一致地调用OnMessageReceed,则它们不应包含通知有效负载,而应包含数据有效负载。

    从文档中:

      "data": {
            "eventId" : "1",
            "flavors" : "alpha",
            "minFcmVersion" : "3",
            "showFallbackOnLowVersion" : "false"
      }
    

    在控制台内部,如果在“Extended Options”字段下面输入一些内容,就可以添加数据负载:

    控制台创建的消息将始终是通知消息!

    首先,通过控制台直接向您的设备发送firebase cloud消息(使用fcm令牌),并添加一个简单的带有示例值的数据有效负载。现在检查是否调用了onMessageReceived服务。(你的应用程序必须在前台!)

    发送到:

    https://fcm.googleapis.com/fcm/send

    com.google.firebase:firebase-messaging:20.0.0<-使用此命令或更高版本

    也就是说,低于'11.0.4'的版本中有一个bug。

    更好的阅读文档:接收消息文档和关于消息类型作为SOF应答的很好的解释:sof-answer-message types

  •  类似资料:
    • 我正在开发一个带有ActionBars的应用程序,它支持姜饼和其他功能。所以基本上我在使用支持库并扩展 行动B活动 对于我所有的活动。除了 onSupportNavigateUp() 方法。它只是不被调用在留档中所述。 每当用户选择从操作栏在应用程序的活动层次结构中向上导航时,就会调用此方法。 这很容易,但我一直不明白为什么它不能像预期的那样工作,谷歌也帮不上忙。这是虫子吗?还是我错过了什么?

    • 运行playstore Build Apk时,未调用Marshmallow Runtime Permissions onRequestPermissionsResult,但正常调试Apk时运行良好。谁来帮帮我。。谢谢 OnRequestPermissionResult方法

    • 我很难让正常工作。无论我怎么努力,我都不能让它被称为。 我的应用程序的体系结构如下所示:我的主活动包含一个片段,其中包含一个ViewPager,而ViewPager又有四个子片段实例。目前,我正在(成功地)用填充活动中的初始选项菜单,但我希望添加一些对应于每个活动子片段的额外选项。 如果有人知道这里发生了什么,我会非常感激,因为我已经被困在这个问题上两天了。 更新--我已经搞清楚了现在的问题是什么

    • CustomDialog 下面是http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample

    • 我使用: null 我正在使用zuul和负载平衡rest模板从另一个微服务调用一个微服务: 请求到达下游服务,但未在ZullFilter中设置头(我使用了不同的头): 我还创建了一个过滤器: 我错过了什么?为什么不能调用筛选器?在我的案件中是否应该引用?

    • 我试图发送一个意图,从一个活动中的创建启动一个意图服务。但是,IntentService的onHandleIntent永远不会被接收。我尝试过用意图过滤器改变清单,但似乎没有任何效果。没有抛出异常,但是根本没有调用IntentService。 这是onCreate 这是IntentService类的创建者和OnHandleContent,我知道它不会被调用,因为logcat从不显示“检索到的意图”

    • 问题内容: 我有一个非常简单的Servlet和一个非常简单的HttpSessionListener: 我的方法从未被调用(没有日志输出),最终我在调用getSession()的那一行上得到一个 我尝试拨打电话时也没有问题,但存在相同的问题。 我不明白- 注释不足以调用我的侦听器吗?Eclipse甚至在下方将其显示为侦听器。 问题答案: 原来这是愚蠢的Eclipse问题之一… Project-> C

    • 问题内容: 我正在使用创建全屏图片库。当用户旋转设备,我执行更新的内 我以模态呈现,并占据了全屏。在中,我将流程布局创建为: 我也有这样的大小: 当我旋转设备时,它永远不会被调用,这将导致无法更新。旋转设备时,确实收到消息: 我已在线阅读可以添加的内容: 到,但已经没有影响。没有任何内容或版块插图。 我也有在函数内的被调用。谁能协助我解决造成此问题的原因? 问题答案: 如果您只关心设备旋转时的布局