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
下列任一设备:
- 一台连接到计算机的 Android 实体设备
- 一个 Android 模拟器(请参阅在 Android 模拟器上运行应用)
您选择的 Java 开发环境或代码编辑器
2. Firebase 项目和 Android 应用设置
在本 Codelab 结束时,您将能够使用 Firebase Cloud Messaging 向应用发送消息。在此之前,您需要创建一个 Firebase 项目。此 Codelab 还提供了一个 Android 应用,其中包含与 FCM 集成的示例代码。
Firebase 项目设置
- 按照“第 1 步:创建 Firebase 项目”操作为本 Codelab 创建您自己的 Firebase 项目。
Android 应用设置
此 Codelab 中提供的示例 Android 应用已与 FCM 集成。启动后,它会向 FCM 服务器注册并订阅某个主题。在此 Codelab 的后续步骤中,您将向主题发送一条主题消息,您的应用也会收到该消息。
- 下载 Firebase Android 快速入门示例。
- 将 https://github.com/firebase/quickstart-android/tree/master/messaging 下的项目导入 Android Studio。
- 在 Firebase 控制台中注册该应用。应用名称为
com.google.firebase.quickstart.fcm
。按照“第 2 步:在 Firebase 中注册您的应用”部分中的步骤,在 Firebase 项目中注册此应用。 - 按照“第 3 步:添加 Firebase 配置文件”中的第 1 部分操作下载
google-services.json
并将其添加到您的项目。构建并运行项目。
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 的访问令牌而创建凭据的步骤。
- 设置 Firebase 服务账号,以便 Firebase Admin SDK 授权对 FCM API 的调用。在 Firebase 控制台中打开项目设置,然后选择服务账号标签页。点击生成新的私钥以下载配置代码段。
- 在下载的 GitHub 项目中,将下载的文件重命名为
service-account.json
,然后将其复制到项目的messaging/
路径。 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(); }
- 更改 main 方法,并添加以下代码行:
public static void main(String[] args) throws IOException { System.out.println(getAccessToken()); ... }
- 在终端中前往 messaging/ 项目目录,然后输入以下命令:
./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"
。
- 消息成功传送后,屏幕上应该会弹出一条通知,如下图所示:
6. 总结
恭喜!您已成功完成此 Codelab,并完成以下操作:
- 设置 Firebase 项目
- 将 Firebase 与 Android 应用集成
- 为 FCM HTTP v1 API 创建凭据
- 通过 FCM HTTP v1 API 向应用发送消息
要探索 FCM 提供的高级功能,以下参考文档很有用: