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

React Native应用Android 11退出状态下FCM推送失效问题排查

React Native FCM推送在Android 11后台退出状态下无法接收的问题

我的React Native应用在Android 11设备上遇到FCM推送通知问题:Android 13设备推送正常,但Android 11设备仅在应用前台或后台时能收到推送,应用退出状态下完全无法接收。

已尝试的操作

  • 严格遵循Firebase官方React Native FCM集成指南
  • 验证推送payload格式与结构,已包含高优先级元素
  • 检查AndroidManifest.xml中的必要权限与服务

额外信息

  • Firebase SDK版本:18.5.0
  • React Native版本:0.72.1

Android Manifest代码

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>


    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustPan"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
             <data
      android:scheme="com.locom"
      android:host="oauthredirect" />
        </intent-filter>
      </activity>

      <meta-data  android:name="com.dieam.reactnativepushnotification.notification_foreground" android:value="false"/>
<meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_fcm_notification" />
    
    </application>
</manifest>
解决方案

针对Android 11(API 30)设备应用退出后无法接收FCM推送的问题,从配置和系统限制角度,需要完成以下关键调整:

1. 补充FCM核心服务与接收器配置

你的Manifest缺少FCM后台接收推送必需的服务声明,必须在<application>标签内添加:

<!-- 自定义FCM消息处理服务 -->
<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<!-- FCM实例ID接收器 -->
<receiver
    android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="${applicationId}" />
    </intent-filter>
</receiver>

注:.MyFirebaseMessagingService是你需要自行创建的类,继承自FirebaseMessagingService,用于处理后台消息的接收与通知展示逻辑。

2. 添加Android 11所需的权限

Android 11对后台权限管控更严格,需在<manifest>标签内补充以下权限:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

3. 确认推送payload的优先级与格式

确保推送使用高优先级配置,且payload结构适配Android后台接收:

  • 通知消息(notification类型)需设置priority: "high"
  • 数据消息(data类型)必须附带notification字段,或者在自定义FirebaseMessagingService中主动创建通知

示例有效payload:

{
  "to": "DEVICE_TOKEN",
  "notification": {
    "title": "消息标题",
    "body": "消息内容",
    "sound": "default"
  },
  "data": {
    "customKey": "customValue"
  },
  "priority": "high"
}

4. 处理Android 11的电池优化限制

Android 11默认会限制后台应用的活动,需要引导用户关闭应用的电池优化:

  • 在应用内添加提示,引导用户进入「设置 → 电池 → 电池优化」,将你的应用设置为「不优化」
  • 可通过代码检测状态并跳转设置:
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isIgnoringOptimizations = powerManager.isIgnoringBatteryOptimizations(getPackageName());
if (!isIgnoringOptimizations) {
    Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivity(intent);
}

5. 升级Firebase SDK版本

你当前使用的18.5.0版本存在Android 11兼容性问题,建议升级到最新稳定版(至少20.x以上),可解决部分后台推送接收的遗留bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:30:58