Flutter应用终止时无法接收FCM推送通知的问题求助
Flutter应用终止时无法接收FCM推送通知的问题求助
大家好,我目前在开发一款基于Flutter的应用,使用Firebase Cloud Messaging(FCM)处理推送通知。现在遇到一个棘手的问题:当应用处于后台状态时,推送通知能正常显示,但把应用完全终止(划掉关闭)后,就完全收不到通知了,测试设备是Android 11系统。
我先贴一下相关代码,麻烦大家帮忙看看哪里出了问题:
后端Flask推送代码
这是我用来发送通知的Flask服务代码片段:
import firebase_admin from firebase_admin import auth, messaging, credentials cred = credentials.Certificate("service-account.json") firebase_admin.initialize_app(cred) message = messaging.Message( notification=messaging.Notification( title="Wow!", body="This background push notification actually worked!" ), data={ "foo": "bar" }, android=messaging.AndroidConfig( notification=messaging.AndroidNotification( title="Wow!", body="This background push notification actually worked!", channel_id="high_importance_channel", priority="high" ), priority="high" ), topic="current" ) response = messaging.send(message) print(response)
补充说明:我后来给消息加了data字段,但问题依然存在——后台能收到,终止状态完全收不到。
Flutter端相关代码
后台消息处理入口
@pragma('vm:entry-point') Future<void> notificationHandler(RemoteMessage message) async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); const AndroidNotificationChannel channel = AndroidNotificationChannel( 'high_importance_channel', 'High Importance Notifications', description: 'This channel is used for important notifications.', importance: Importance.high ); final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()?.createNotificationChannel(channel); await flutterLocalNotificationsPlugin.initialize( InitializationSettings( android: AndroidInitializationSettings('background') ) ); await flutterLocalNotificationsPlugin.show( 0, message.notification?.title, message.notification?.body, NotificationDetails( android: AndroidNotificationDetails( 'high_importance_channel', 'High Importance Notifications', importance: Importance.high ) ) ); if (message.notification?.title == 'Awards') { await FirebaseMessaging.instance.unsubscribeFromTopic('current'); } }
主函数初始化代码
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, appleProvider: AppleProvider.appAttest ); if (FirebaseAuth.instance.currentUser == null) { await FirebaseAuth.instance.signInAnonymously(); } final messaging = FirebaseMessaging.instance; await messaging.requestPermission( alert: true, announcement: false, badge: true, carPlay: false, criticalAlert: false, provisional: false, sound: true ); const AndroidNotificationChannel channel = AndroidNotificationChannel( 'high_importance_channel', 'High Importance Notifications', description: 'This channel is used for important notifications.', importance: Importance.high ); final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()?.createNotificationChannel(channel); await flutterLocalNotificationsPlugin.initialize( InitializationSettings( android: AndroidInitializationSettings('background') ) ); FirebaseMessaging.onBackgroundMessage(notificationHandler); }
订阅主题的代码
这部分是在支付流程完成后(用square_in_app_payments处理支付)订阅主题的逻辑:
void _onCardEntryComplete() async { await FirebaseMessaging.instance.subscribeToTopic('current'); if (mounted) Navigator.of(context).pushNamed('/register'); }
我已经尝试过的解决方法
- 之前忘记初始化本地通知插件,现在已经修复,但问题依旧
- 修改过
AndroidManifest.xml配置(比如添加FCM相关的服务、权限) - 检查并关闭了设备的电池优化(确保应用不会被系统休眠)
现在我不确定是后端发送消息的方式不对,还是Flutter端或者Android配置还有遗漏的地方。再明确一下问题:应用终止后,发送推送时,设备通知栏完全看不到任何通知,也没有声音/震动提示,通知历史里也找不到相关记录。
麻烦各位大佬帮忙看看问题出在哪,谢谢!
内容来源于stack exchange




