You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Firebase_messaging的onResume与onLaunch回调未触发

FCM通知点击后onResume/onLaunch未触发,无法跳转指定页面的解决方案

我之前也碰到过一模一样的问题,结合firebase_messaging 6.0.9的版本特性,你可以从以下几个方向排查和修复:


1. 检查FCM消息的Payload结构

当应用处于后台或被完全杀死时,系统会接管通知的展示逻辑。如果只发送纯notification类型的消息,点击后大概率不会触发onResume/onLaunch回调,必须确保消息携带data字段并配置正确的click_action。

示例正确Payload:

{
  "to": "你的设备推送令牌",
  "notification": {
    "title": "新通知提醒",
    "body": "点击查看详情"
  },
  "data": {
    "click_action": "FLUTTER_NOTIFICATION_CLICK",
    "screen": "notifications" // 可选,用来区分不同跳转页面
  }
}

2. 配置AndroidManifest.xml的Intent Filter

需要在MainActivity标签内添加对应的intent-filter,确保系统能把通知点击事件正确传递给Flutter:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTop"> <!-- 避免重复创建页面实例 -->
    <intent-filter>
        <action android:name="FLUTTER_NOTIFICATION_CLICK" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

添加android:launchMode="singleTop"是关键,它能保证点击通知时不会重新创建MainActivity,确保回调能正常触发。

3. 使用GlobalKey确保Navigator上下文有效

你当前代码里直接使用的context可能存在无效的情况(比如初始化时上下文还未完全绑定),建议用全局NavigatorKey来解决:

  • 先定义全局Key:
    final GlobalKey<NavigatorState> _navigatorKey = GlobalKey<NavigatorState>();
    
  • 在MaterialApp中配置这个Key:
    MaterialApp(
      navigatorKey: _navigatorKey,
      home: YourHomeScreen(),
      // 其他页面配置
    )
    
  • 修改回调里的跳转代码:
    onResume: (Map<String, dynamic> message) async {
      print('@onResume: $message');
      _navigatorKey.currentState?.push(
        MaterialPageRoute(builder: (context) => NotificationsScreen())
      );
    },
    onLaunch: (Map<String, dynamic> message) async {
      print('@onLaunch: $message');
      _navigatorKey.currentState?.push(
        MaterialPageRoute(builder: (context) => NotificationsScreen())
      );
    },
    

4. 验证Gradle配置完整性

确保app/build.gradle的末尾已经应用了google-services插件:

apply plugin: 'com.google.gms.google-services'

你现有的firebase-messaging:20.1.0和firebase_messaging:^6.0.9版本是兼容的,这部分不用调整。


完成以上配置后,把应用退到后台或完全杀死,发送符合要求的FCM消息,点击通知应该就能触发对应的回调并成功跳转到NotificationsScreen了。

内容的提问来源于stack exchange,提问作者Haroon khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:27:50