如何处理 Firebase Cloud Messaging 推送通知的点击?

3
Firebase Cloud Messaging(FCM)向我的应用程序发送推送消息。当应用程序关闭时,这些消息会显示在系统托盘中。
任务是:当用户点击托盘中的推送通知时,打开应用程序并执行某些操作(例如打开另一个片段)。
问题在于,我不知道如何重写用户单击推送通知时的默认行为。是否有某种回调、广播接收器等?
我的FirebaseMessagingService:
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)
    }
}

清单中的服务

        <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>
1个回答

5

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

当您的应用程序在后台运行时传递通知消息。 在这种情况下,通知将被传递到设备的系统托盘。用户点击通知会默认打开应用程序启动器。

同时包含通知和数据有效负载的消息,在后台接收时。 在这种情况下,通知将被传递到设备的系统托盘,并且数据有效负载将在启动器 Activity 的意图的额外内容中传递。

enter image description here

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

在这种情况下,当用户点击系统托盘中的推送通知时,默认情况下会打开应用程序。此外,您可以从intent.extras获取所有所需数据。因此,在主活动的onCreate中,您可以简单地从意图中获取额外信息并根据数据执行一些操作,例如打开某个屏幕。

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

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接