将 FCM HTTP v1 API 与 OAuth 2 访问令牌搭配使用

1. 简介

与 FCM 旧版 API 相比,FCM HTTP v1 API 使用短期有效的访问令牌提供更安全的授权模型。为 FCM v1 API 生成访问令牌的步骤与为旧版 API 生成访问令牌的步骤有很大不同。

本 Codelab 将引导您完成客户端和服务器端设置流程,以使用 FCM HTTP v1 API 向 Android 应用发送推送通知。它重点介绍了 v1 API 的凭据生成关键步骤。

如需了解详情,请访问:

前提条件

  • 对 Java 和 Android 开发有基本的了解

学习内容

  • 有关客户端和服务器端设置的详细步骤,可让您使用 FCM HTTP v1 API 向 Android 应用发送推送通知
  • 使用服务账号为 HTTP v1 API 生成凭据
  • 通过 HTTP v1 API 发送测试消息

您需要满足的条件

最新稳定版 Android Studio

以下任一设备:

您选择的 Java 开发环境或代码编辑器

2. Firebase 项目和 Android 应用设置

完成此代码库后,您将能够使用 Firebase Cloud Messaging 向应用发送消息。在此之前,您需要先创建一个 Firebase 项目。此 Codelab 还提供了一个包含示例代码的 Android 应用,用于与 FCM 集成。

Firebase 项目设置

  • 按照“第 1 步:创建 Firebase 项目”中的说明为此 Codelab 创建您自己的 Firebase 项目。

Android 应用设置

此 Codelab 中提供的示例 Android 应用已与 FCM 集成。启动后,它将向 FCM 服务器注册并订阅某个主题。在本 Codelab 的后续步骤中,您将向该主题发送主题消息,而您的应用将收到该消息。

3. 设置应用服务器

现在,您的应用已设置完毕,接下来您需要下载一个服务器端代码示例,以便使用 FCM v1 API 向您的应用发送消息。此代码会加载 API 凭据(下一部分中会介绍),以生成访问令牌。然后,它会使用 FCM 主题消息传递功能向您的应用发送消息。

  • 下载 GitHub 项目,导入起始服务器代码。“messaging”项目是一个基于 Gradle 的 Java 项目,依赖于 firebase-admin SDK,该 SDK 提供发送消息的功能。

如需详细了解应用服务器应如何与 FCM 搭配使用,请参阅您的服务器环境和 FCM 文档。

4. 获取 v1 凭据

FCM HTTP v1 API 根据 OAuth2 安全模型使用只在短时间内有效的访问令牌。与 FCM 旧版 API 中使用的静态 API 密钥相比,短期有效的访问令牌不太容易发生凭据泄露的风险。本部分详细介绍了创建凭据的步骤,该凭据用于生成调用 API 时使用的访问令牌。

  1. 设置 Firebase 服务账号,以便 Firebase Admin SDK 授权对 FCM API 的调用。在 Firebase 控制台中打开项目设置,然后选择服务账号标签页。点击生成新的私钥,下载配置代码段。一张经过裁剪的屏幕截图,突出显示了“项目设置”页面中“服务账号”组件的 Admin SDK 配置代码段
  2. 在下载的 GitHub 项目中,将下载的文件重命名为 service-account.json,然后将其复制到项目的 messaging/ 路径。
  3. Messaging.java 类中的 getAccessToken() 方法(如下所示)会生成一个有效期为 1 小时的 OAuth2 令牌。
private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials.fromStream(new FileInputStream("service-account.json")).createScoped(Arrays.asList(SCOPES));
  googleCredentials.refresh();
  return googleCredentials.getAccessToken().getTokenValue();
}
  1. 将主方法更改为添加以下行:
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. 在终端中前往消息传递/ 项目目录,然后输入:
./gradlew run -Pmessage=common-message

以输出 OAuth2 令牌。

如需了解详情,请参阅授权发送请求

5. 使用 REST API 发送消息

现在,您可以通过 HTTP v1 API 发送消息了。请按以下步骤操作:

  • 如需将访问令牌添加到 HTTP 请求标头中:
  • Authorization: Bearer <access_token> 格式将令牌添加为 Authorization 标头的值
  • 使用 curl 向 FCM v1 API 发出 HTTP 请求:
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $OAuth2_token" -H "X-GFE-SSL: yes" -d  "{\"message\": {\"topic\": \"$topic_name\", \"notification\": {\"title\": \"breaking news\", \"body\": \"This is breaking news\"}}}" https://fcm.googleapis.com/v1/projects/[PROJECT_NAME]/messages:send

上述 $topic_name 可在 Firebase 项目和 Android 应用设置中提及的 Android 应用代码中找到。默认值为 "weather"

  • 成功发送消息后,屏幕上会弹出通知,如下图所示:

54ae84ece22202cd.png

6. 总结

恭喜!您已成功完成以下 Codelab:

  • 设置 Firebase 项目
  • 将 Firebase 与 Android 应用集成
  • 为 FCM HTTP v1 API 创建凭据
  • 通过 FCM HTTP v1 API 向您的应用发送消息

如需了解 FCM 提供的高级功能,以下参考资料非常有用: