Oppo正式构建版设备中FCM通知在应用终止状态下失效
Oppo设备终止状态下Flutter FCM推送无法接收的解决方案
问题:Flutter应用集成FCM后,Oppo设备前台、后台状态可正常接收通知,但正式构建版中应用终止(完全关闭)时无法收到通知。已排查Firebase初始化、通知权限、通知渠道配置、电池优化设置。
1. 开启Oppo设备的自启动权限
Oppo ColorOS默认限制非白名单应用的后台自启动,FCM需要应用具备后台唤醒权限才能接收终止状态的推送。引导用户操作:
- 路径1:「设置」→「电池」→「应用耗电管理」→ 找到目标应用 → 开启「允许自启动」和「允许后台活动」
- 路径2:「设置」→「应用管理」→ 目标应用 →「权限管理」→「自启动」→ 允许
2. 配置FCM后台消息处理回调
应用终止状态下,FCM推送会触发FirebaseMessaging.onBackgroundMessage回调,必须实现该回调才能让系统展示通知。你当前代码缺少这部分配置,按以下步骤补充:
步骤1:添加顶层后台消息处理函数
注意:必须是顶层函数(不能放在类内部):
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); await initializeLocalNotifications(); // 展示本地通知 showLocalNotification( message.notification?.title ?? 'Notification', message.notification?.body ?? '', ); print("处理后台消息: ${message.messageId}"); }
步骤2:在main函数中注册回调
在FirebaseMessaging.instance初始化后添加:
// 注册后台消息处理回调 FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
3. 检查AndroidManifest.xml配置
确保android/app/src/main/AndroidManifest.xml包含FCM服务声明:
<service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
4. 添加正式版混淆规则
如果正式构建开启了代码混淆,在android/app/proguard-rules.pro中添加FCM混淆规则,避免核心代码被混淆:
# Firebase Messaging 混淆规则 -keep class com.google.firebase.messaging.** { *; } -keep class com.google.firebase.iid.** { *; } -dontwarn com.google.firebase.messaging.**
5. 优化推送消息类型
FCM推送分为通知消息和数据消息,终止状态下建议使用混合类型消息,提升送达稳定性:
{ "to": "你的FCM_TOKEN", "notification": { "title": "测试通知", "body": "终止状态测试内容" }, "data": { "title": "测试通知", "body": "终止状态测试内容", "click_action": "FLUTTER_NOTIFICATION_CLICK" }, "priority": "high" }
内容的提问来源于stack exchange,提问作者Chamalka Gunawardena
相关产品推荐
相关产品推荐

