android - 简单的广播接收器是否足以处理 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
.
解决方案
推荐阅读
- javascript - Twitter-Bootstrap 5 轮播指示器和控件不起作用。为什么?
- api - 无法显示子回收站视图
- python - 在 scikit-learn 中创建一个添加集群标签的自定义转换器
- python - 如何从每行删除特定模式
- python - snakemake - python 字典中的通配符
- c# - ASP.NET 托管在 Centos7 上,具有 Windows 身份验证 - GSSAPI:功能不可用
- assembly - MIPS 架构中的零寄存器如何保持为零?
- python - 异步函数中的循环抛出 StopIteration
- entity-framework-6 - 使用投影的 Automapper 自定义解析逻辑
- java - 如何将元组编码为输出参数以在 java 中使用 web3j 运行