搭配 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 專案,匯入範例程式碼伺服器程式碼。「訊息」專案是以 Gradle 為基礎的 Java 專案,其依附元件為 firebase-admin 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 標頭的值,格式為 Authorization: Bearer <access_token>
  • 使用 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

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

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

54ae84ece22202cd.png

6. 結論

恭喜!您已成功完成程式碼研究室,以便:

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

如要探索 FCM 的進階功能,請參閱下列參考資源: