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

Android 12环境下Ionic Capacitor Firebase推送通知失效求助

Android 12(API 31)下Ionic Capacitor Firebase推送通知修复方案

1. 升级依赖插件版本

Android 12对推送通知的API有变更,旧版本的Capacitor和Firebase插件不兼容API 31,需更新到支持的版本:

  • 执行命令更新核心插件:
    npm install @capacitor/push-notifications@latest @capacitor/android@latest
    
  • 同步Android项目:
    npx cap sync android
    
  • 确保firebase-messaging依赖版本适配API 31,可在android/app/build.gradle中检查并更新:
    dependencies {
      implementation 'com.google.firebase:firebase-messaging:23.0.0+'
    }
    

2. 添加并请求Android 12专属通知权限

Android 12引入了POST_NOTIFICATIONS权限,必须显式声明并请求:

  • 在AndroidManifest.xml中添加权限声明:
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
  • 在应用初始化阶段动态请求权限,示例代码:
    import { PushNotifications } from '@capacitor/push-notifications';
    
    async function initPushNotifications() {
      const permStatus = await PushNotifications.requestPermissions();
      if (permStatus.receive === 'granted') {
        PushNotifications.register();
      } else {
        // 处理权限拒绝逻辑,比如提示用户开启权限
      }
    }
    
    // 在app启动时调用
    initPushNotifications();
    

3. 配置Android通知渠道

Android 12要求所有通知必须关联有效的通知渠道,需在原生代码中创建渠道:

  • 打开android/app/src/main/java/[你的包名]/MainActivity.java,在onCreate方法中添加渠道创建逻辑:
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.os.Build;
    import com.google.firebase.messaging.FirebaseMessaging;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
    
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        String channelId = "default_notification_channel";
        String channelName = "Default Notifications";
        String channelDesc = "Channel for general app notifications";
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
    
        NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
        channel.setDescription(channelDesc);
    
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    
        // 设置Firebase Messaging默认渠道
        FirebaseMessaging.getInstance().setAutoInitEnabled(true);
      }
    }
    
  • 推送payload中必须指定channel_id字段,值与创建的渠道ID一致。

4. 确认Android构建配置

在android/app/build.gradle中确保编译和目标SDK版本符合要求:

android {
  compileSdkVersion 33 // 至少31,推荐使用最新稳定版
  defaultConfig {
    targetSdkVersion 33
    // 其他配置...
  }
}

内容的提问来源于stack exchange,提问作者Jhony Perez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:50:29