如何在我的Android活动中实现FCM onMessageReceived()侦听器

时间:2016-11-03 23:45:52

标签: java android firebase firebase-cloud-messaging pyfcm

我有一台PyFCM服务器通过Firebase(FCM)向我简单的Android应用程序发送通知。当应用程序在后台运行时,我已经测试并获得定期通知消息以显示在托盘中没问题。我现在想在我的应用程序中接收数据消息,并在发生这种情况时触发应用程序功能。我的理解是,在收到数据消息时会触发onMessageReceived(),但我不确定如何在我的代码中正确实现此侦听器。

documentation州:

  

通过覆盖方法FirebaseMessagingService.onMessageReceived,您可以根据收到的RemoteMessage对象执行操作并获取消息数据:

这是什么意思?我看到这个onMessageReceived()位于名为MyFirebaseMessagingService.java的文件中。这个文件在哪里?

假设我的MainActivity.java中有一个函数getLocation(),获取传入的FCM数据消息以触发getLocation()函数的确切步骤是什么?我很难找到具体的例子。

2 个答案:

答案 0 :(得分:0)

当您的应用在用户的设备上处于非活动状态时,可能会调用

onMessageReceived。出于这个原因,它运行在服务中。

首先在documentation section on accessing the device registration token中提及。但是关于如何设置它的大多数解释都在section on handling messages in the documentation

之下

答案 1 :(得分:0)

我一直在做更多的研究,我能够解决我的问题。我了解到FCM作为一项服务运行(与我的活动并行),但它并不真正与我的活动沟通,至少不是直接沟通。这使得从MainActivity.java中调用getLocation()成为一个问题。我能用LocalBroadcastManager来解决这个问题。

示例FCM服务(MyFirebaseMessagingService.java)与MainActivity.java位于同一文件夹中,或多或少与原样(当然更改包名称)。但是,对于要启动的服务,我必须将其添加到我的应用清单文件中。

这就是我的问题所在;我没有在我的清单文件中的正确位置添加服务。它应该看起来像:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.project">

    <application
        .../>

        <activity ...
        </activity>

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

    </application>
</manifest>