主题消息传递 (Flutter)

基于其发布/订阅的模式,FCM 主题消息传递功能可让您将消息发送至已经选择加入特定主题的多台设备。您只需根据需要撰写主题消息,FCM 会负责确定发送路径并将消息可靠地传送至正确的设备。

例如,某个本地潮汐预报应用的用户可选择加入“潮汐警报”主题,并接收关于特定区域最佳海水捕鱼条件的通知。体育应用的用户可以订阅他们心仪球队的实时比分自动更新。

关于主题,请注意以下事项:

  • 主题消息传递适合传递天气或其他可通过公开途径获得的信息。

  • 主题消息的优化重心是吞吐量而非延迟。如需将消息快速安全地传送到单台设备或小规模设备组,应将消息定位至注册令牌,而非主题。

  • 如果您需要向每位用户的多台设备发送消息,请考虑为这类场景使用设备组消息传递

  • 主题消息传递不限制每个主题的订阅数。但是,FCM 在以下方面有强制性限制:

    • 一个应用实例最多只能订阅 2000 个主题。
    • 如果您通过批量导入来订阅应用实例,则每次请求仅限订阅 1000 个应用实例。
    • 每个项目新增订阅的频率存在限制。如果您在短时间内发送过多订阅请求,FCM 服务器将给出 429 RESOURCE_EXHAUSTED(“已超出配额”)响应。请使用指数退避算法重试。

为客户端应用订阅主题

客户端应用可以订阅任何现有主题,也可创建新主题。当客户端应用订阅新的主题名称(您的 Firebase 项目中尚不存在的主题)时,系统会在 FCM 中使用这个名称创建一个新主题,随后任何客户端都可订阅该主题。

如需订阅主题,请使用主题名称调用 subscribeToTopic()。此方法会返回一个 Future,它会在订阅成功时进行解析:

await FirebaseMessaging.instance.subscribeToTopic("topic");

如需退订,请使用主题名称调用 unsubscribeFromTopic()

Web 客户端不支持 subscribeToTopic()unsubscribeFromTopic()。如需了解如何管理 Web 用户的订阅,请参阅在 Web/JavaScript 上向主题发送消息

后续步骤