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 專案,匯入範例程式碼伺服器程式碼。「訊息」專案是以 Gradle 為基礎的 Java 專案,其依附元件為 firebase-admin 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(); }
- 將主要方法變更為新增下列程式碼:
public static void main(String[] args) throws IOException { System.out.println(getAccessToken()); ... }
- 前往終端機中的訊息/ 專案目錄,然後輸入:
./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"
。
- 郵件成功送達後,畫面上會彈出通知訊息,如下圖所示:
6. 結論
恭喜!您已成功完成程式碼研究室,以便:
- 設定 Firebase 專案
- 整合 Firebase 與 Android 應用程式
- 建立 FCM HTTP v1 API 的憑證
- 透過 FCM HTTP v1 API 向應用程式傳送訊息
如要探索 FCM 的進階功能,請參閱下列參考資源: