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

外汇信号App如何向特定货币订阅用户发送FCM通知

外汇信号APP FCM定向推送实现方案

1. 客户端订阅逻辑开发

你已经实现了SwitchListTile组件,直接将每个开关和FCM主题绑定即可,每个货币对对应唯一的主题名(比如forex_eurusd、forex_gbpusd,统一命名规则避免冲突)。

  • 开关开启时调用FCM的订阅主题接口,关闭时调用退订接口
  • 本地持久化用户订阅状态,APP启动时同步本地状态和FCM订阅状态,避免状态不一致

Flutter示例代码:

SwitchListTile(
  title: const Text("EUR/USD"),
  value: _isEurUsdSubscribed,
  onChanged: (bool value) async {
    const topic = 'forex_eurusd';
    if (value) {
      await FirebaseMessaging.instance.subscribeToTopic(topic);
    } else {
      await FirebaseMessaging.instance.unsubscribeFromTopic(topic);
    }
    setState(() => _isEurUsdSubscribed = value);
    // 保存到本地存储
    final prefs = await SharedPreferences.getInstance();
    prefs.setBool('sub_eurusd', value);
  },
)

2. 服务端触发推送逻辑

直接用Firebase Cloud Functions监听数据库写入事件,无需自建服务端:

  • 监听你存储外汇信号的数据库节点(Firestore/实时数据库均可)的新增数据事件
  • 提取新信号对应的货币对,拼接成和客户端一致的主题名,调用FCM接口给该主题下的所有订阅用户发通知

Cloud Functions(Node.js)示例代码,假设用Firestore存储信号,集合名为forex_signals,每个信号文档包含currency_pair字段标识对应货币对:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

exports.sendSignalNotification = functions.firestore
  .document('forex_signals/{signalId}')
  .onCreate(async (snap) => {
    const signal = snap.data();
    const currency = signal.currency_pair;
    const topic = `forex_${currency.toLowerCase()}`;

    const message = {
      notification: {
        title: `${currency} 新交易信号`,
        body: signal.desc,
      },
      topic: topic,
      // 可选:携带自定义数据,供客户端点击通知跳转到对应信号详情
      data: {
        signalId: snap.id,
        currency: currency
      }
    };

    await admin.messaging().send(message);
    return null;
  });

3. 客户端通知适配

  • 安卓8.0及以上版本需要提前创建通知通道,否则通知无法弹出
  • 监听FirebaseMessaging.onMessage回调,处理APP前台运行时收到通知的逻辑,可自主弹出本地通知
  • 监听FirebaseMessaging.onMessageOpenedApp和getInitialMessage回调,实现用户点击通知跳转到对应货币信号页面的逻辑

可选优化方案

如果你需要做更精细化的推送过滤(比如针对不同用户等级推送不同精度的信号),可以不用FCM主题方案:

  • 用户登录时将自己的FCM设备令牌和订阅的货币列表同步存储到Firebase用户集合
  • Cloud Functions触发时,先查询所有订阅了对应货币的用户令牌,再批量调用FCM接口给这些令牌发通知

注意事项

  • FCM主题订阅存在最多1分钟的延迟,属于官方正常机制,无需额外重试
  • 主题名不要使用特殊字符,建议全小写+下划线分隔,避免客户端和服务端命名不匹配导致推送失败
  • FCM单批推送最多支持1000个设备令牌,用户量较大时需要做分批处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 19:27:11