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

Flutter项目Firebase Messaging通知延迟消失、发送失败问题求助

问题分析与解决方案

可能的原因

  • 通知类型差异:如果发送的是纯数据消息,而非系统级的通知消息,App后台时系统不会持久化通知,进程被回收后通知会直接消失;只有通知消息会由系统托盘托管,稳定性更高。
  • 系统后台限制:Android厂商(小米、华为、OPPO等)的电池优化、后台进程限制会杀死Firebase Messaging的推送进程,导致通知延迟或丢失;iOS的后台刷新权限未开启也会影响投递。
  • 通知优先级过低:发送时优先级设置为normal(Android)或5(iOS),系统会在资源紧张时延迟投递甚至丢弃通知。
  • 配置/权限缺失:google-services.json/GoogleService-Info.plist配置错误、未请求推送权限(如Android 13+的POST_NOTIFICATIONS权限)会导致通知无法正常送达。
  • 网络与TTL限制:设备离线时通知暂存于Firebase服务器,超过TTL(默认4周)会被丢弃;弱网环境下也会出现延迟投递。

优化措施与解决方法

1. 正确使用通知消息类型

优先发送通知消息(或通知+数据负载的组合),由系统托盘处理展示,避免纯数据消息依赖App进程存活。Flutter中处理通知的示例:

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  RemoteNotification? notification = message.notification;
  AndroidNotification? android = message.notification?.android;
  if (notification != null && android != null) {
    flutterLocalNotificationsPlugin.show(
      notification.hashCode,
      notification.title,
      notification.body,
      NotificationDetails(
        android: AndroidNotificationDetails(
          channel.id,
          channel.name,
          channel.description,
          icon: android.smallIcon,
        ),
      ),
    );
  }
});

2. 解除系统后台限制

  • Android:引导用户将App加入电池优化白名单、开启自启动权限,可通过代码跳转设置页:
    await AndroidIntent(
      action: 'android.settings.APPLICATION_DETAILS_SETTINGS',
      data: 'package:$packageName',
    ).launch();
    
  • iOS:确保开启“后台App刷新”,并在Info.plist中添加UIBackgroundModes包含remote-notification。

3. 设置高优先级通知

  • Android:发送时指定priority: "high"或priority: "max";
  • iOS:设置apns-priority: 10(即时投递);
    服务器端发送示例(Firebase Admin SDK):
const message = {
  notification: {
    title: '紧急通知',
    body: '这是一条高优先级推送'
  },
  android: { priority: 'high' },
  apns: {
    headers: { 'apns-priority': '10' },
    payload: { aps: { sound: 'default' } }
  },
  token: registrationToken
};

4. 检查配置与权限

  • 确认google-services.json/GoogleService-Info.plist的包名/Bundle ID与Firebase控制台完全一致;
  • Android 13+主动请求通知权限:
    if (Platform.isAndroid) {
      await FirebaseMessaging.instance.requestPermission(
        alert: true, badge: true, sound: true
      );
      await Permission.notification.request();
    }
    
  • iOS在Info.plist中添加NSUserNotificationUsageDescription权限描述,并请求推送权限。

5. 优化网络与TTL设置

  • 根据业务需求调整通知TTL,延长离线设备的通知保留时间;
  • 确保设备网络稳定,避免频繁切换网络导致通知丢失。

内容的提问来源于stack exchange,提问作者Emir Bolat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:55:25