繁体   English   中英

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

[英]How to implement FCM onMessageReceived() listener in my Android activity

我有一个PyFCM服务器通过Firebase(FCM)将通知发送到我的简单android应用。 我已经测试过,并在应用程序在后台运行时正常接收通知消息,该消息会出现在任务栏中。 我现在想在我的应用程序中接收数据消息,并在发生这种情况时触发应用程序功能。 我的理解是,当接收到数据消息时会触发onMessageReceived() ,但是我不确定如何在我的代码中正确实现此侦听器。

文档指出:

通过重写FirebaseMessagingService.onMessageReceived方法,可以基于接收到的RemoteMessage对象执行操作并获取消息数据:

这意味着什么? 我看到此onMessageReceived()位于名为MyFirebaseMessagingService.java的文件中。 这个文件去哪儿了?

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

当您的应用在用户设备上未激活时,可能会调用onMessageReceived 因此,它在服务中运行。

在访问设备注册令牌文档部分中首先提到了它。 但是,有关如何设置此设置的大多数说明在文档中有关处理消息部分下。

我一直在做更多的研究,并且能够解决我的问题。 我了解到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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM