一、簡介
與 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最新穩定版本
以下設備之一:
- 連接到您的電腦的實體 Android 設備
- Android 模擬器(請參閱在 Android 模擬器上執行應用程式)
您選擇的 Java 開發環境或程式碼編輯器
2.Firebase專案和Android應用程式設定
在程式碼實驗室結束時,您將能夠使用 Firebase Cloud Messaging 向您的應用程式發送訊息。在此之前,您需要建立一個 Firebase 專案。此 Codelab 還提供了一個 Android 應用程序,其中包含與 FCM 整合的範例程式碼。
Firebase 專案設定
- 請依照「步驟 1:建立 Firebase 專案」為此 Codelab 建立您自己的 Firebase 專案。
安卓應用程式設定
此 Codelab 中提供的範例 Android 應用已與 FCM 整合。啟動後,它將向FCM伺服器註冊並訂閱主題。在此 Codelab 的後續步驟中,您將向該主題發送主題訊息,您的應用程式將收到該訊息。
- 下載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. 取得 v1 憑證
根據 OAuth2 安全模型,FCM HTTP v1 API 使用短期存取權杖。與 FCM 舊版 API 中使用的靜態 API 金鑰相比,短期存取權杖不太容易出現憑證洩漏的風險。本節詳細介紹了建立憑證以產生呼叫 API 時使用的存取權杖的步驟。
- 設定 Firebase 服務帳戶,以便 Firebase 管理 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(); }
- 將 main 方法變更為新增以下行:
public static void main(String[] args) throws IOException { System.out.println(getAccessToken()); ... }
- 前往終端機中的 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"
。
- 訊息成功發送後,您應該會在螢幕上看到一條通知彈出,類似於下圖:
六,結論
恭喜!您已成功完成 Codelab:
- 設定 Firebase 項目
- 將 Firebase 與 Android 應用程式集成
- 為 FCM HTTP v1 API 建立憑證
- 透過 FCM HTTP v1 API 向您的應用程式發送訊息
要探索 FCM 提供的進階功能,以下參考資料非常有用: