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

Flutter+FCM:测试推送正常但点赞触发的推送无法接收

问题描述

正在开发一个类似TikTok的克隆项目,需要实现用户点赞视频时向视频所有者推送通知的功能。通过Firebase Cloud Messaging(FCM)平台发送测试消息时一切正常,但点击点赞按钮触发推送时无法收到通知。相关代码片段如下:

Future<void> handleBackgroundMessage(RemoteMessage message) async {
  if(message == null) return;

  print(message.notification?.title);
}

late AndroidNotificationChannel channel;
late FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
bool isFlutterLocalNotificationsInitialized = false;

class NotificationController {

  final authController = Get.find<AuthenticationController>();
  String uid = FirebaseAuth.instance.currentUser!.uid;

  Future<void> updateFCMToken(String userID) async {
    try {
      String? newToken = await FirebaseMessaging.instance.getToken();
      if (newToken != null) {
        // Update the FCM token in Firestore
        await FirebaseFirestore.instance
            .collection("users")
            .doc(userID)
            .update({'token': newToken});
      }
    } catch (e) {
      print("Error updating FCM token: $e");
    }
  }
}
排查与解决建议
  1. 补全点赞触发推送的核心逻辑
    当前代码仅包含FCM token更新和后台消息处理的基础部分,缺少点赞时获取视频所有者FCM token并发起推送的关键步骤:

    • 点赞操作触发时,从Firestore中读取该视频所有者文档的token字段
    • 推荐通过后端(使用Firebase Admin SDK)向该token发送FCM通知,避免前端暴露敏感密钥;若临时用前端实现,需构建符合FCM要求的请求格式发送
  2. 验证FCM token的有效性与存储状态

    • 确认视频所有者的token已正确写入Firestore的users集合,且与设备当前获取的token一致
    • 在updateFCMToken方法中增加日志输出,检查token是否成功更新到数据库
  3. 完成本地通知初始化配置
    代码中定义了AndroidNotificationChannel等变量,但未完成初始化,这会导致通知无法在设备上弹出,需补充初始化逻辑:

    Future<void> initializeLocalNotifications() async {
      if (isFlutterLocalNotificationsInitialized) return;
    
      channel = const AndroidNotificationChannel(
        'high_importance_channel',
        'High Importance Notifications',
        description: 'This channel is used for important notifications.',
        importance: Importance.high,
      );
    
      flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
    
      await flutterLocalNotificationsPlugin
          .resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()
          ?.createNotificationChannel(channel);
    
      await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
        alert: true,
        badge: true,
        sound: true,
      );
      isFlutterLocalNotificationsInitialized = true;
    }
    
  4. 检查通知发送格式与权限

    • 确保推送的消息包含notification(前台显示)或data(后台处理)字段,格式符合FCM要求
    • 确认已获取设备通知权限:iOS需配置权限描述,Android 13+需申请POST_NOTIFICATIONS权限
    • 前台收到消息时,需通过FlutterLocalNotificationsPlugin手动显示通知,仅依赖handleBackgroundMessage无法处理前台消息场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:17:23