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

Firebase推送在独立进程初始化后低版本Android无法接收的兼容需求

Firebase推送独立进程全Android版本兼容方案

问题描述

为优化性能,我将Firebase推送初始化在独立进程中,该方案在Android 10及以上版本运行正常,但在Android低版本中无法显示推送消息,需实现全版本兼容。当前Manifest配置如下:

<receiver
    android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND"
    android:process=":pushprocess"
    tools:node="replace">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</receiver>

<service
    android:name="FirebaseMessagingService"
    android:exported="false"
    tools:node="replace"
    android:process=":pushprocess">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

问题原因

Android 10(API 29)之前的系统依赖系统级广播机制处理C2DM推送,将FirebaseInstanceIdReceiver和FirebaseMessagingService放在独立进程时,低版本系统无法正确将推送消息路由到该进程,导致消息无法被处理、无法显示。

解决方案

通过版本区分配置,低版本保留默认进程的推送组件,高版本使用独立进程组件,同时补充低版本必需权限:

修改后的Manifest配置

<!-- 低版本兼容:默认进程的推送接收器与服务 -->
<receiver
    android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND"
    tools:node="merge"
    tools:targetApi="28">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</receiver>

<service
    android:name="FirebaseMessagingService"
    android:exported="false"
    tools:node="merge"
    tools:targetApi="28">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<!-- Android 10+:独立进程的推送接收器与服务 -->
<receiver
    android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND"
    android:process=":pushprocess"
    tools:node="replace"
    tools:targetApi="29">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</receiver>

<service
    android:name="FirebaseMessagingService"
    android:exported="false"
    tools:node="replace"
    android:process=":pushprocess"
    tools:targetApi="29">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<!-- 低版本必需的C2DM权限 -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />

关键说明

  • tools:targetApi指定配置生效的API级别,自动适配高低版本系统
  • tools:node="merge"避免覆盖Firebase默认配置,保证低版本消息接收逻辑正常
  • 补充的C2DM权限是低版本系统接收推送的必要条件

内容的提问来源于stack exchange,提问作者Темирлан Толегенов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:22:39