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

同一Firebase项目下Sample App无法接收FCM Data payload问题

解决同一Firebase项目下Sample App无法接收FCM Data消息的问题

看起来你遇到的是个典型的FCM多App同项目的配置细节问题——主App能正常触发onMessageReceived处理Data消息,但Sample App完全没反应,我整理了几个针对性的排查方向,你可以逐一验证:


1. 先移除清单中Service的多余权限配置

你的AndroidManifest.xml里给Messaging和InstanceID Service加了android:permission="android.permission.INTERNET",这是完全不必要且可能触发问题的!

FCM的系统服务需要主动唤起你的AppFirebaseMessagingService来传递消息,而android:permission属性是用来限制哪些组件可以启动这个Service的。添加INTERNET权限后,只有持有该权限的组件才能启动它,但FCM的系统服务并不需要声明这个权限,这就可能导致系统无法触发你的Service。

主App可能因为历史配置或系统适配刚好绕过了这个限制,但Sample App没有。建议立刻移除这两个Service的android:permission属性,修改后的清单代码应该是:

<service android:name=".firebase.AppFirebaseMessagingService" android:enabled="true">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
<service android:name=".firebase.AppFirebaseInstanceIDService" android:enabled="true">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

2. 严格核对Sample App的包名与Firebase配置

虽然你说google-services.json配置无误,但请再仔细检查:

  • Firebase控制台中Sample App的应用包名必须和AndroidManifest.xml根节点的package属性完全一致(包括大小写,Firebase对包名匹配是严格区分的)
  • 如果Sample App使用了Product Flavor或Build Type导致包名后缀变化(比如com.yourapp.sample vs com.yourapp),要确保Firebase控制台里对应的App条目包名完全匹配,并且google-services.json是下载的对应那个App的文件,不是主App的。

3. 验证BaseFirebaseMessagingService的实现逻辑

既然两个App都继承同一个基础服务,要排查Base类是否存在针对主App的特殊逻辑:

  • 检查Base类的onMessageReceived方法是否被标记为final,导致Sample App的重写不生效?
  • 有没有在Base类里加入了包名判断,只处理主App的消息?比如类似if (getPackageName().equals("com.yourapp")) { ... }的逻辑?
  • 确认Sample App的AppFirebaseMessagingService重写onMessageReceived时,有没有添加Logcat打印,避免因为没日志误以为方法没触发。

4. 测试前台状态下的Data消息接收

FCM的纯Data消息在App后台/被杀死时,不会触发onMessageReceived,而是会把Data数据附加到App启动的Intent中。你可以:

  • 把Sample App保持在前台状态,再发送你提供的Data消息结构
  • 查看Logcat中是否有AppFirebaseMessaging标签的日志,确认onMessageReceived是否被调用

如果前台能触发,那问题出在后台消息的送达策略;如果前台也不行,那还是前面的配置问题。


5. 检查Firebase SDK版本一致性

确保主App和Sample App依赖的Firebase SDK版本完全一致,包括firebase-messaging、firebase-core等核心库。版本不一致可能导致Sample App的FCM客户端与Firebase服务器的协议不兼容,进而无法接收Data消息。


最后验证:用Firebase控制台发送纯Data消息

在Firebase控制台的Cloud Messaging模块中,创建一条新消息,选择仅发送Data消息(不要填写Notification标题/内容),然后发送给Sample App的测试设备,看是否能触发onMessageReceived。这可以排除你自己构造的消息结构是否存在隐藏问题。

如果以上步骤都排查过还是不行,可以提供Sample App的Logcat日志(过滤FirebaseMessaging标签),这样能更精准定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:26:12