如何处理点击推送通知(Firebase 云消息传递)?

And*_*rew 3 android push-notification firebase-cloud-messaging

Firebase Cloud Messaging 将推送发送到我的应用程序。当应用程序关闭时,它们会出现在系统托盘中。

任务是当用户单击托盘中的推送通知时打开应用程序并执行某些操作(例如打开另一个片段)。

问题是我不知道当用户单击推送通知时如何覆盖默认行为。是否有某种回调、广播接收器等?

我的 Firebase 消息服务

class FCMHandlerService : FirebaseMessagingService() {

    private val intercomPushClient = IntercomPushClient()

    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        logd("onMessageReceived $remoteMessage")
        val notification = remoteMessage.notification ?: return
        logd("Remote message body${notification.body} channel id${notification.channelId} message id${remoteMessage.messageId}")
        
        //you can create here your custom notification when the app receives push being foreground
    }

    override fun onNewToken(token: String) {
        super.onNewToken(token)
        logd("onNewToken $token")
        instance.sendFirebasePushRegistrationToken(token)
    }
}
Run Code Online (Sandbox Code Playgroud)

清单中的服务

        <service
            android:name=".old.push.FCMHandlerService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
Run Code Online (Sandbox Code Playgroud)

And*_*rew 5

首先,重要的是要了解应用程序以两种不同的方式处理推送通知,具体取决于应用程序是在前台还是后台

\n
\n

当您的应用程序处于后台时发送的通知消息。在这种情况下,通知将传送到设备\xe2\x80\x99s 系统托盘。\n默认情况下,用户点击通知会打开应用启动器。

\n

在后台接收时包含通知和数据负载的消息。\n 在这种情况下,通知将传递到\n设备\xe2\x80\x99s 系统托盘,并且数据负载将在启动器活动的意图的附加\n中传递。

\n
\n

在此输入图像描述

\n

应用程序在后台时的解决方案

\n

在这种情况下,当用户单击系统托盘中的推送通知时,默认情况下会打开该应用程序。并且您将从intent.extras. 因此,基本上在您的主要活动中,onCreate您可以简单地从意图中获取额外内容,并根据数据执行一些操作,例如打开一些屏幕。

\n

重要的是,在这种情况下不会调用onMessageReceived您的方法。FirebaseMessagingService您可能会在互联网上找到有关它的误导性信息,但我认为过去的行为有所不同。

\n

应用程序在前台时的解决方案

\n

默认行为是打开应用程序时推送通知不会出现在系统托盘中。但您可以创建自己的FirebaseMessagingService并在 mo 中接收通知信息onMessageReceived

\n

您可以使用 PendingIntent 显示自定义通知。在 PendingIntent 中,您可以放置​​必须使用所需数据打开的活动。然后,当用户单击通知时,将打开包含数据的活动。

\n

您将再次在intent.extras. 因此,基本上在您的主要活动中,onCreate您可以简单地从意图中获取额外内容,并根据数据执行一些操作,例如打开一些屏幕。

\n