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

FCM onNotification在APP未激活时点击通知不触发问题求助

解决Cordova FCM插件后台点击通知时onNotification不触发的问题

针对你遇到的「APP后台接收通知正常,但点击通知打开APP时onNotification处理器无响应,前台则正常触发」的问题,结合你的配置和代码细节,给你几个实用的排查和修复方向:

1. 确认click_action与AndroidManifest的匹配性

你在Payload中设置了click_action":"FCM_PLUGIN_ACTIVITY",这个值需要和Android项目的AndroidManifest.xml中的Activity配置完全对应:

  • 检查Manifest里是否声明了FCM_PLUGIN_ACTIVITY,并且添加了android:exported="true"(Android 12及以上版本强制要求):
    <activity
        android:name="FCM_PLUGIN_ACTIVITY"
        android:exported="true"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="FCM_PLUGIN_ACTIVITY" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    
  • 如果你的APP主Activity已经是singleTop或singleTask模式,也可以把click_action改成主Activity的完整类名(比如com.yourcompany.yourapp.MainActivity),有时候这种方式比依赖插件默认的FCM_PLUGIN_ACTIVITY更稳定。

2. 统一并升级Firebase依赖版本

你手动指定的11.4.2版本比较老旧,这类早期版本存在后台通知点击事件传递的已知bug。建议:

  • 升级到较新的稳定版本(比如19.0.0系列,避免直接跳转到最新版本引发兼容性问题)
  • 确保所有Firebase和Google Play服务的版本完全一致,包括firebase-core、firebase-messaging、play-services-auth、play-services-identity
  • 避免手动修改插件的gradle文件后被cordova prepare覆盖,可以用Cordova钩子脚本自动注入依赖配置,或者直接安装适配目标版本的插件版本。

3. 确保插件初始化时机正确

你的onNotification订阅代码要放在Cordova平台就绪之后执行,否则可能错过后台点击的事件监听。调整代码到platform.ready()的回调中:

import { Platform } from '@ionic/angular';
import { FCM } from '@ionic-native/fcm/ngx';

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html'
})
export class AppComponent {
  constructor(
    private platform: Platform,
    private fcm: FCM
  ) {
    this.initializeApp();
  }

  initializeApp() {
    this.platform.ready().then(() => {
      // 平台就绪后再订阅通知事件
      this.fcm.onNotification().subscribe(data => {
        console.log('通知数据:', JSON.stringify(data));
        if(data.wasTapped){
          console.log('后台点击通知触发:', JSON.stringify(data));
          // 这里可以添加你的跳转逻辑
        } else {
          console.log('前台接收通知');
        }
      });
    });
  }
}

4. 调整Payload的消息结构

当Payload同时包含notification和data字段时,Android后台状态下系统会接管通知展示,点击时的data参数传递可能受系统限制。可以尝试两种调整方式:

  • 完全使用data消息:把notification里的内容移到data字段中,这种情况下无论前台后台,onNotification都会被触发,你可以在代码中自行处理通知弹窗:
    {
      "to": "YOUR_DEVICE_TOKEN",
      "data": {
        "title": "Message",
        "body": "From XXX",
        "sound": "default",
        "notificationKey": "XXX",
        "goto": "messageForBidder",
        "evid": "XXX",
        "id": "XXX"
      },
      "click_action": "FCM_PLUGIN_ACTIVITY"
    }
    
  • 保留notification但补充content_available:在Payload中添加"content_available": true,确保后台状态下APP能唤醒处理事件。

5. 检查插件修改是否被覆盖

你手动修改了FCMPlugin.gradle和project.properties,但每次执行cordova prepare android时,插件的原始配置文件可能会覆盖你的修改。建议:

  • 使用Cordova的after_prepare钩子脚本,自动修改gradle配置
  • 或者安装指定版本的cordova-plugin-fcm-with-dependency-updated插件,确保插件默认依赖版本符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:06:58