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 穩定版
下列其中一種裝置:
- 連接至電腦的實體 Android 裝置
- Android 模擬器 (請參閱「在 Android Emulator 上執行應用程式」)
您選擇的 Java 開發環境或程式碼編輯器
2. 設定 Firebase 專案和 Android 應用程式
完成程式碼研究室後,您就能使用 Firebase 雲端通訊將訊息傳送至應用程式。如要這麼做,您必須先建立 Firebase 專案。本程式碼研究室也提供 Android 應用程式,內含可與 FCM 整合的範例程式碼。
設定 Firebase 專案
- 請按照「步驟 1:建立 Firebase 專案」的說明,為本程式碼研究室建立自己的 Firebase 專案。
設定 Android 應用程式
本程式碼研究室提供的 Android 範例應用程式已整合 FCM。啟動後,應用程式會向 FCM 伺服器註冊,並訂閱主題。在本程式碼研究室的後續步驟中,您會向主題傳送主題訊息,而應用程式會收到該訊息。
- 下載 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,可提供傳送訊息的功能。
如要進一步瞭解應用程式伺服器應如何搭配 FCM 運作,請參閱「您的伺服器環境和 FCM」一文。
4. 取得第 1 版憑證
根據 OAuth2 安全性模型,FCM HTTP v1 API 會使用存取權杖 (效期短)。與 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(); }
- 將主要方法變更為新增下列程式碼:
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>
格式將權杖新增為授權標頭的值 - 使用 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"
。
- 訊息成功傳送後,畫面上會彈出通知,如下圖所示:
6. 結論
恭喜!您已成功完成程式碼研究室,並瞭解如何:
- 設定 Firebase 專案
- 將 Firebase 整合至 Android 應用程式
- 為 FCM HTTP v1 API 建立憑證
- 透過 FCM HTTP v1 API 將訊息傳送至應用程式
如要瞭解 Firebase 雲端通訊提供的進階功能,請參閱下列參考資料: