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

Ionic5 Android12/13后台Firebase推送通知异常问题求助

Ionic 5 项目 Android 12/13 后台无法接收 Firebase 推送的解决方案

核心原因

Android 12(API 31)及以上系统收紧了后台启动限制和通知权限申请逻辑,同时 Firebase Messaging(FCM)的后台推送接收依赖特定的服务配置与权限声明,旧版本的适配配置在新系统下不再生效。

具体解决步骤

1. 更新 Firebase 相关插件依赖

确保项目中使用的 FCM 插件版本适配 Android 12+:

  • 若使用 Cordova 插件:
    cordova plugin remove cordova-plugin-firebase-messaging
    cordova plugin add cordova-plugin-firebase-messaging@latest
    
  • 若使用 Capacitor 插件:
    npm install @capacitor-firebase/messaging@latest
    npx cap sync android
    

2. 调整 AndroidManifest.xml 配置

在 platforms/android/app/src/main/AndroidManifest.xml 中补充以下配置:

  • 声明 Android 13+ 必需的通知权限:
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
  • 为 Firebase 消息服务添加 android:exported="true" 属性(Android 12+ 要求组件必须显式声明导出状态):
    <service
        android:name="com.google.firebase.messaging.FirebaseMessagingService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
  • 可选:添加后台唤醒相关权限,提升 FCM 连接稳定性:
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    

3. 动态申请通知权限(Android 13+)

在 Ionic 启动逻辑中主动请求通知权限,否则后台推送无法正常展示:

import { Platform } from '@ionic/angular';
import { FirebaseMessaging } from '@capacitor-firebase/messaging'; // 对应所用插件的API

async requestNotificationPermission() {
  if (this.platform.is('android') && parseInt(this.platform.version().number) >= 13) {
    const permissionResult = await FirebaseMessaging.requestPermissions();
    if (permissionResult.receive === 'granted') {
      // 权限授予成功,可继续执行FCM注册逻辑
    }
  }
}

若使用 Cordova 插件,对应 API 为 firebase.messaging.requestPermission()。

4. 调整 FCM 消息推送格式

后台状态下,仅数据消息会触发应用内的 onMessageReceived 回调,通知消息由系统直接处理(权限未授予时不会显示)。推送 payload 需按数据消息格式构造:

{
  "data": {
    "title": "新通知",
    "body": "后台可接收的数据消息内容",
    "click_action": "FCM_PLUGIN_ACTIVITY"
  },
  "to": "<目标设备令牌>"
}

5. 替换弃用的 FCM 服务组件

Android 12+ 中 FirebaseInstanceIdService 已被弃用,需改用 FirebaseMessagingService 的 onNewToken 方法获取设备令牌:

public class CustomFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        // 处理新生成的设备令牌
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        // 处理后台收到的推送消息
    }
}

关键配置说明

  • Android 12+ 组件导出规则:所有四大组件(Activity、Service、Receiver、Provider)必须显式声明 android:exported 属性,值为 true 或 false。
  • Android 13 通知权限:POST_NOTIFICATIONS 为运行时权限,必须动态申请,默认状态下未授予。
  • FCM 消息类型区分:通知消息由系统后台处理,数据消息需应用自行处理逻辑,后台状态下仅数据消息能触发应用内回调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:25:20