Capacitor 4项目Android端接收FCM推送后崩溃求助
问题解决:Capacitor 4 Android接收FCM推送崩溃
核心问题分析
从错误日志可明确,崩溃根源是系统无法找到com.myproject.mobile.java.MyFirebaseMessagingService类,且日志中出现了不匹配的包名com.rovespier.mobile,说明存在类配置错误或旧项目遗留的配置冲突。
解决方案
1. 移除AndroidManifest.xml中无效的服务注册
打开android/app/src/main/AndroidManifest.xml,搜索是否存在以下类似配置:
<service android:name="com.myproject.mobile.java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
若存在则直接删除。你使用的@capacitor-community/fcm插件已内置FCM消息处理服务,无需手动注册自定义服务,重复注册会导致类查找失败。
2. 修正包名不一致问题
错误日志中同时出现com.myproject.mobile和com.rovespier.mobile两个包名,检查以下位置统一包名:
- AndroidManifest.xml的
package属性 - MainActivity的包声明
- 所有自定义类的包路径
3. 清理Cordova遗留配置
由于项目从Cordova迁移而来,检查Android项目中是否存在旧FCM相关文件或配置:
- 删除
java目录下不存在的类文件(比如未创建MyFirebaseMessagingService.java就不要保留对应配置) - 移除build.gradle中冗余的FCM依赖(插件会自动管理依赖)
4. 重新同步插件并重建项目
执行以下命令确保插件配置正确:
npm install @capacitor-community/fcm npx cap sync android
然后在Android Studio中执行:
Build > Clean ProjectBuild > Rebuild Project
5. 可选:自定义消息处理(非必须)
若确实需要自定义FCM消息逻辑,需正确创建MyFirebaseMessagingService类:
在android/app/src/main/java/com/myproject/mobile/java/目录下创建该类,代码示例:
package com.myproject.mobile.java; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { // 自定义消息处理逻辑 super.onMessageReceived(remoteMessage); } }
同时确保AndroidManifest.xml中的服务注册路径与类路径完全一致。
代码优化建议(非崩溃相关)
你的registerFCM方法中,Android和iOS的token获取逻辑可统一使用@capacitor-community/fcm的getToken方法,无需分开处理:
// 替换原平台判断逻辑 await PushNotifications.register(); const { token } = await FCM.getToken(); this.submitFCM(token);
内容的提问来源于stack exchange,提问作者SimonIoa
相关产品推荐
相关产品推荐

