Firebase Cloud Messaging

Firebase Cloud Messaging (FCM) 是一项辅助移动应用和服务器应用程序之间的消息传递的服务。 本文概述了 FCM 的工作原理,并介绍了如何配置 Google Services,以便应用可以使用 FCM。

Firebase Cloud Messaging hero image

本主题简要概述了 Firebase Cloud Messaging 如何在 Xamarin.Android 应用与应用服务器之间路由消息,并提供获取凭据的分步过程,以便应用可以使用 FCM 服务。

概述

Firebase Cloud Messaging (FCM) 是一种跨平台服务,用于处理服务器应用程序和移动客户端应用之间的消息发送、路由和排队。 FCM 是 Google Cloud Messaging (GCM) 的继任者,它基于 Google Play Services 构建。

如下图所示,FCM 充当消息发送方和客户端之间的中介。 客户端应用是一个启用了 FCM 的应用,可在设备上运行。 应用服务器(由你或你的公司提供)是客户端应用通过 FCM 与之通信的已启用 FCM 的服务器。 与 GCM 不同,FCM 允许你直接通过 Firebase 控制台通知 GUI 将消息发送到客户端应用:

FCM sits between the client app and an app server

使用 FCM,应用服务器可以将消息发送到单个设备、一组设备或订阅主题的多个设备。 客户端应用可以使用 FCM 从应用服务器订阅下游消息(例如,接收远程通知)。 有关不同类型的 Firebase 消息的详细信息,请参阅关于 FCM 消息

运行中的 Firebase Cloud Messaging

当下游消息从应用服务器发送到客户端应用时,应用服务器会将该消息发送到 Google 提供的 FCM 连接服务器;FCM 连接服务器反过来会将消息转发到运行客户端应用的设备。 消息可以通过 HTTP 或 XMPP 发送(可扩展消息传送和状态协议)。 由于客户端应用并不总是连接或正在运行,因此 FCM 连接服务器会排队并存储消息,并在它们重新连接并变得可用时将它们发送到客户端应用。 同样,如果应用服务器不可用,FCM 会将来自客户端应用的上游消息排队到应用服务器。 有关 FCM 连接服务器的详细信息,请参阅关于 Firebase Cloud Messaging 服务器

FCM 使用以下凭据来标识应用服务器和客户端应用,并使用这些凭据通过 FCM 授权消息事务:

  • 发送方 ID发送方 ID 是创建 Firebase 项目时分配的唯一数值。 发送方 ID 用于标识可以向客户端应用发送消息的每个应用服务器。 发送方 ID 也是项目编号;注册项目时,将从 Firebase 控制台获取发件人 ID。 发送方 ID 的示例为 496915549731

  • API 密钥API 密钥 使应用服务器能够访问 Firebase 服务;FCM 使用此密钥对应用服务器进行身份验证。 此凭据也称为服务器密钥Web API 密钥。 API 密钥的示例为 AJzbSyCTcpfRT1YRqbz-jIwp1h06YdauvewGDzk

  • 应用 ID – 客户端应用(独立于任何给定设备)的标识,用于注册以从 FCM 接收消息。 应用 ID 的示例为 1:415712510732:android:0e1eb7a661af2460

  • 注册令牌注册令牌(也称为 实例 ID)是给定设备上的客户端应用的 FCM 标识。 注册令牌在运行时生成 – 应用在设备上运行时首次注册 FCM 时会收到注册令牌。 注册令牌授权客户端应用的实例(在特定设备上运行)接收来自 FCM 的消息。 注册令牌的示例是 fkBQTHxKKhs:AP91bHuEedxM4xFAUn0z ... JKZS(非常长的字符串)。

设置 Firebase Cloud Messaging(本指南后面部分)提供了有关创建项目和生成这些凭据的详细说明。 在 Firebase 控制台中创建新项目时,会创建一个名为 google-services.json 的凭据文件 – 将其添加到 Xamarin.Android 项目中,如 FCM 远程通知中所述。

以下部分介绍了当客户端应用通过 FCM 与应用服务器通信时如何使用这些凭据。

使用 FCM 注册

客户端应用必须先注册 FCM,然后才能进行消息传送。 客户端应用必须完成下图所示的注册步骤:

App registration steps diagram

  1. 客户端应用联系 FCM 以获取注册令牌,将发送方 ID、API 密钥和应用 ID 传递给 FCM。

  2. FCM 将注册令牌返回到客户端应用。

  3. 客户端应用(可选)将注册令牌转发到应用服务器。

应用服务器将缓存注册令牌,以便与客户端应用进行后续通信。 应用服务器可以将确认发送回客户端应用,以指示已收到注册令牌。 发生此握手后,客户端应用可以从应用服务器(或向其发送消息)接收消息。 如果旧令牌遭到入侵,客户端应用可能会收到新的注册令牌(有关应用如何接收注册令牌更新的示例,请参阅 FCM 的远程通知)。

当客户端应用不再想要从应用服务器接收消息时,它可以向应用服务器发送请求以删除注册令牌。 如果从设备中卸载客户端应用,FCM 会检测到此情况,并自动通知应用服务器删除注册令牌。

下游消息传送

下图说明了 Firebase Cloud Messaging 如何存储和转发下游消息:

FCM uses store and forward for downstream messaging

当应用服务器向客户端应用发送下游消息时,它将使用以下步骤,如上图所示:

  1. 应用服务器将消息发送到 FCM。

  2. 如果客户端设备不可用,FCM 服务器会将消息存储在队列中供以后传输。 消息在 FCM 存储中保留最多 4 周(有关详细信息,请参阅设置消息的生命周期)。

  3. 当客户端设备可用时,FCM 会将消息转发到该设备上的客户端应用。

  4. 客户端应用从 FCM 接收消息,对其进行处理,并将其显示给用户。 例如,如果消息是远程通知,则会在通知区域中向用户显示该消息。

在此消息传送方案中(应用服务器向单个客户端应用发送消息),消息长度可达 4kB。

有关在 Android 上接收下游 FCM 消息的详细信息,请参阅 FCM 的远程通知

主题消息传送

主题消息传送使应用服务器能够向选择加入特定主题的多个设备发送消息。 还可以通过 Firebase 控制台通知 GUI 撰写和发送主题消息。 FCM 处理主题消息的路由和传送到订阅的客户端。 此功能可用于天气警报、股票报价和头条新闻等消息。

Topic messaging diagram

在主题消息传送中使用以下步骤(在客户端应用获取注册令牌后,如前所述):

  1. 客户端应用通过向 FCM 发送订阅消息来订阅主题。

  2. 应用服务器将主题消息发送到 FCM 进行分发。

  3. FCM 将主题消息转发到订阅该主题的客户端。

有关 Firebase 主题消息传送的详细信息,请参阅 Google 在 Android 上的主题消息传送

设置 Firebase Cloud Messaging

在应用中使用 FCM 服务之前,必须通过 Firebase 控制台创建新项目(或导入现有项目)。 使用以下步骤为应用创建 Firebase Cloud Messaging 项目:

  1. 使用 Google 帐户(即 Gmail 地址)登录到 Firebase 控制台,然后单击“创建新项目”

    Create New Project button

    如果你有现有项目,请单击“导入 Google 项目”

  2. 在“创建项目”对话框中,输入项目的名称,然后单击“创建项目”。 在以下示例中,将创建一个名为 XamarinFCM 的新项目:

    Create a Project dialog

  3. 在 Firebase 控制台概述中,单击“将 Firebase 添加到 Android 应用”

    Add Firebase to your Android app

  4. 在下一个屏幕中,输入应用的包名称。 在此示例中,包名称为 com.xamarin.fcmexample。 此值必须与 Android 应用的包名称匹配。 还可以在“应用昵称”字段中输入应用昵称:

    Entering FCM Example as the app nickname

  5. 如果你的应用使用动态链接、邀请或 Google 身份验证,则还必须输入调试签名证书。 有关查找签名证书的详细信息,请参阅查找密钥存储的 MD5 或 SHA1 签名。 在此示例中,签名证书留空。

  6. 单击“添加应用”:

    Clicking the Add App button

    为应用自动生成服务器 API 密钥和客户端 ID。 此信息打包在单击“添加应用”时自动下载的 google-services.json 文件中。 请务必将此文件保存在安全的位置。

有关如何将 google-services.json 添加到应用项目以在 Android 上接收 FCM 推送通知消息的详细示例,请参阅 FCM 远程通知

延伸阅读

总结

本文概述了 Firebase Cloud Messaging (FCM)。 其中介绍了用于标识和授权应用服务器和客户端应用之间的消息传送的各种凭据。 它演示了注册和下游消息传送方案,并详细介绍了将应用注册到 FCM 以使用 FCM 服务的步骤。