API调用发送FCM通知,后台点击无法打开安卓应用问题求助
解决ReactJS + Capacitor安卓应用FCM后台通知点击无法打开应用的问题
针对你遇到的后台状态下Firebase控制台发送的通知可正常点击打开应用,但Postman调用API发送的通知点击无反应的问题,结合你提供的Payload,可从以下几个方向排查解决:
1. 确保click_action与AndroidManifest.xml配置匹配
FCM后台通知的点击动作依赖click_action值匹配对应的Activity intent-filter。你Payload里notification.click_action设为home,需要在安卓项目的AndroidManifest.xml中给主Activity(通常是MainActivity)添加对应的intent-filter:
<activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:launchMode="singleTask" android:label="@string/title_activity_main" android:theme="@style/AppTheme.NoActionBarLaunch"> <!-- 原有主入口的intent-filter --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 添加匹配click_action的intent-filter --> <intent-filter> <action android:name="home" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
注意:如果你的Capacitor项目主Activity类名自定义过,要对应修改android:name的值。
2. 调整Payload的click_action位置(可选)
当同时发送notification和data字段时,部分场景下FCM对后台通知的处理优先级不同。可以尝试把click_action移到data字段中,同时保留notification字段的基础内容:
{ "to": "--mytoken--", "notification": { "title": "Title Notification", "body": "Body Notification" }, "data": { "click_action": "home", "body": "Body of Your Notification in Data", "title": "Title of Your Notification in Title", "type": "edit_profile", "id_reference": "0", "badger": "1", "inbox_subject": "", "news_title": "YYY", "url": "https://yamie2.co.id/news/webview/3", "icon": "https://yamie.co.id/images/icon.png" } }
这种方式下,Capacitor的FCM插件可通过监听notificationActionPerformed事件捕获点击动作,同时确保Activity被唤起。
3. 确认Capacitor FCM插件的事件监听
在React应用的入口文件(比如App.tsx/App.jsx)中,确保正确监听通知点击事件,即使应用在后台,该事件也应触发:
import { FirebaseMessaging } from '@capacitor-firebase/messaging'; // 组件挂载时监听通知点击事件 useEffect(() => { const unsubscribe = FirebaseMessaging.addListener('notificationActionPerformed', async (action) => { console.log('Notification clicked:', action); // 可根据data字段添加自定义跳转逻辑,比如根据type跳转到对应页面 if (action.notification.data.type === 'edit_profile') { // 处理跳转逻辑 } }); return () => unsubscribe(); }, []);
4. 检查Activity的launchMode
确保MainActivity的launchMode设置为singleTask(Capacitor默认配置),不要设置为singleInstance,否则可能导致应用无法正常从后台唤起。
内容的提问来源于stack exchange,提问作者Toto Prasetyo
相关产品推荐
相关产品推荐

