搭配 OAuth 2 存取權杖使用 FCM HTTP v1 API

1. 簡介

相較於 FCM 舊版 API,FCM HTTP v1 API 採用短期存取權杖,提供更安全的授權模式。產生 FCM v1 API 存取權杖的步驟,與舊版 API 的步驟有明顯差異。

本程式碼研究室會逐步說明如何設定用戶端和伺服器,以便使用 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 雲端通訊將訊息傳送至應用程式。如要這麼做,您必須先建立 Firebase 專案。本程式碼研究室也提供 Android 應用程式,內含可與 FCM 整合的範例程式碼。

設定 Firebase 專案

  • 請按照「步驟 1:建立 Firebase 專案」的說明,為本程式碼研究室建立自己的 Firebase 專案。

設定 Android 應用程式

本程式碼研究室提供的 Android 範例應用程式已整合 FCM。啟動後,應用程式會向 FCM 伺服器註冊,並訂閱主題。在本程式碼研究室的後續步驟中,您會向主題傳送主題訊息,而應用程式會收到該訊息。

3. 設定應用程式伺服器

應用程式設定完成後,請下載伺服器端程式碼範例,以便使用 FCM v1 API 將訊息傳送至應用程式。這段程式碼會載入 API 憑證 (下一節會說明),以產生存取權杖。然後使用 FCM 主題訊息功能,將訊息傳送至您的應用程式。

  • 下載 GitHub 專案,匯入範例伺服器程式碼。「messaging」專案是以 Gradle 為基礎的 Java 專案,依附於 firebase-admin SDK,可提供傳送訊息的功能。

如要進一步瞭解應用程式伺服器應如何搭配 FCM 運作,請參閱「您的伺服器環境和 FCM」一文。

4. 取得第 1 版憑證

根據 OAuth2 安全性模型,FCM HTTP v1 API 會使用存取權杖 (效期短)。與 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. 在終端機中前往 messaging/ 專案目錄,然後輸入:
./gradlew run -Pmessage=common-message

列印 OAuth2 權杖。

詳情請參閱「授權傳送要求

5. 使用 REST API 傳送訊息

現在您已準備好透過 HTTP v1 API 傳送訊息。步驟如下:

  • 如要在 HTTP 要求標頭中加入存取權杖,請按照下列步驟操作:
  • Authorization: Bearer <access_token> 格式將權杖新增為授權標頭的值
  • 使用 curl 向 FCM 第 1 版 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

您可以在 Firebase 專案和 Android 應用程式設定中提及的 Android 應用程式程式碼中找到上述 $topic_name。預設值為 "weather"

  • 訊息成功傳送後,畫面上會彈出通知,如下圖所示:

54ae84ece22202cd.png

6. 結論

恭喜!您已成功完成程式碼研究室,並瞭解如何:

  • 設定 Firebase 專案
  • 將 Firebase 整合至 Android 應用程式
  • 為 FCM HTTP v1 API 建立憑證
  • 透過 FCM HTTP v1 API 將訊息傳送至應用程式

如要瞭解 Firebase 雲端通訊提供的進階功能,請參閱下列參考資料: