FCM应用后台无法显示通知弹窗:API26+已解决,求API25-方案
FCM后台通知无弹窗问题的解决思路
我之前也碰到过一模一样的FCM通知痛点:当推送消息包含notification字段,且应用处于后台状态时,通知会被自动投递到系统托盘,消息数据会存在Intent的extras中,但最棘手的是无法修改这类通知的重要性,导致它始终不会弹出通知弹窗。
API 26+版本的解决方案
针对Android 8.0及以上版本,我已经通过创建Notification Channel解决了这个问题:
- 首先创建高优先级的通知通道:
int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel = new NotificationChannel(getString(R.string.default_notification_channel_id), name, importance);
- 然后在AndroidManifest.xml中配置FCM默认通知通道:
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>
API 25及以下版本的处理方案
不过在Android 7.1及以下版本中,上面的方法就失效了。我查了不少相关资料,目前最可行的方案是:移除推送消息中的notification字段,只保留data字段。
这么调整后,无论应用处于前台还是后台状态,FCM都会将消息直接投递到onMessageReceived(RemoteMessage remoteMessage)方法中,这时你就可以完全自定义通知的所有属性——包括设置高优先级让它弹出通知弹窗,完全由自己掌控。
内容的提问来源于stack exchange,提问作者Yuri Popiv
相关产品推荐
相关产品推荐

