首页 > 解决方案 > 简单的广播接收器是否足以处理 FCM 事件?

问题描述

我在使用 FCM 时遇到问题,我想从 Notifications composer (Firebase web) 发送通知。并稍微修改它在系统通知中心(系统托盘)中的外观。并且还单击打开完整的通知窗口活动。

只是添加操作来打开我在自定义数据中定义的链接,这没什么好炫耀的。

使用FirebaseMessagingService我无法实现或操作按钮,也无法显示完整的通知信息。

操作按钮你可能明白为什么不能实现,但完整的通知信息?不是那么明显。

让我解释。当应用程序处于后台时,您FirebaseMessagingService.onMessageReceived不会被触发,因此您无法自定义通知的外观或显示的活动。

默认情况下,它会启动默认启动活动并向其添加自定义数据。

这就是问题所在

它只添加我在通知编辑器的“附加选项”部分中定义的自定义数据。通知标题和正文都不会添加到意图附加内容中。

尝试通过在自定义数据中添加这些内容来解决此问题,如果您必须说出超过 200 个符号(自定义数据最大输入长度)的内容,则不起作用。

所以我通过在 android manifest 中声明以下内容来覆盖 FCM 广播接收器:

        <receiver
            android:name=".notifications.FCMOverlordBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
                <category android:name="${applicationId}"/>
            </intent-filter>
        </receiver>

并且还实现了我完美命名的接收器。

class FCMOverlordBroadcastReceiver: BroadcastReceiver(){

    override fun onReceive(context: Context?, intent: Intent) {
        NotificationHandler(context!!).onMessageReceived(RemoteMessage(intent.extras))
        abortBroadcast()
    }
}

我知道如果收到收到的事件,这可能会导致崩溃com.google.android.c2dm.intent.REGISTRATION

据我测试,这个逻辑适用于诺基亚 8(android 9)、android 10 模拟器和 android 11 模拟器(应用程序被杀死)。

我使用 Glide 异步加载通知图像BigPictureStyle,它仍然有效。

我的主要问题

这种做事方式是否会以某种方式导致崩溃或在某些情况下不起作用,当然除了注册事件?

ps 我使用 Firebase-messagingRemoteMessage类来解析intent.extras.

标签: androidfirebasefirebase-cloud-messagingandroid-notification-bar

解决方案


推荐阅读