將 FCM HTTP v1 API 與 OAuth 2 存取權杖結合使用

一、簡介

與 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 專案設定

安卓應用程式設定

此 Codelab 中提供的範例 Android 應用已與 FCM 整合。啟動後,它將向FCM伺服器註冊並訂閱主題。在此 Codelab 的後續步驟中,您將向該主題發送主題訊息,您的應用程式將收到該訊息。

3. 設定應用程式伺服器

現在您的應用程式已設定完畢,您需要下載伺服器端程式碼範例,以使用 FCM v1 API 向您的應用程式傳送訊息。此程式碼會載入 API 憑證(在下一節中描述)以產生存取權杖。然後,它使用 FCM 主題訊息傳遞向您的應用程式發送訊息。

  • 透過下載Github 專案導入起始伺服器程式碼。 「messaging」專案是一個基於 Gradle 的 Java 項目,依賴firebase-admin SDK,它提供發送訊息的功能。

有關應用程式伺服器如何與 FCM 配合使用的更多詳細信息,請參閱文件您的伺服器環境和 FCM

4. 取得 v1 憑證

根據 OAuth2 安全模型,FCM HTTP v1 API 使用短期存取權杖。與 FCM 舊版 API 中使用的靜態 API 金鑰相比,短期存取權杖不太容易出現憑證洩漏的風險。本節詳細介紹了建立憑證以產生呼叫 API 時使用的存取權杖的步驟。

  1. 設定 Firebase 服務帳戶,以便 Firebase 管理 SDK 授權對 FCM API 的呼叫。在 Firebase 控制台中開啟「專案設定」 ,然後選擇「服務帳戶」標籤。點擊“產生新私鑰”以下載配置片段。 裁切後的螢幕截圖,突出顯示專案設定頁面的服務帳戶元件的管理 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. 將 main 方法變更為新增以下行:
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. 前往終端機中的 messages/ 專案目錄,然後輸入:
./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

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

  • 訊息成功發送後,您應該會在螢幕上看到一條通知彈出,類似於下圖:

54ae84ece22202cd.png

六,結論

恭喜!您已成功完成 Codelab:

  • 設定 Firebase 項目
  • 將 Firebase 與 Android 應用程式集成
  • 為 FCM HTTP v1 API 建立憑證
  • 透過 FCM HTTP v1 API 向您的應用程式發送訊息

要探索 FCM 提供的進階功能,以下參考資料非常有用: