如果有用 Firebase Cloud Messaging (FCM) 或者其他關於 FCM 的第三方 SDK 的話應該會收到通知說 6 月 21 日會停用舊版的 FCM API(即是供 server 發送 notification 那個 API endpoint)。之後就要轉用 HTTP v1 API。
這個改動主要改變了拿 API token 的方法,以前是直接用 Firebase console 提供的 token 就能 call 那些 endpoint,但現在變成要先拿到 service account 的 JSON 檔案,之後再用 Google 提供的 Auth Library 生成有效期較短的 OAuth 2.0 access token 才能 call 到新的 endpoint。
在 6 月 21 日之後如果要發送 FCM 推送的話(例如想測試自己的 app 能不能正常處理推送),最簡單的方法是用 Firebase Admin SDK 發送推送。
首先要去 Firebase 的 project settings 頁,在 Firebase Admin SDK 分頁會找到「Generate new private key」按鈕,按一下這個按鈕。
![](firebase-project-settings.png)
之後會彈出一個警告,再按「Generate key」。
![](generate-new-key-dialog.png)
按下之後就能下載到一個 JSON 檔案。
之後就可以用 Firebase Admin SDK 來發送通知,以下會用 Java 版的 Admin SDK 及 Kotlin 示範:
val googleCredentials = GoogleCredentials
.fromStream(FileInputStream("credentials.json"))
.createScoped("https://www.googleapis.com/auth/firebase.messaging")
val firebaseOptions = FirebaseOptions.builder()
.setCredentials(googleCredentials)
.build()
val firebaseApp = FirebaseApp.initializeApp(firebaseOptions)
FirebaseMessaging.getInstance(firebaseApp).send(Message.builder()
.setToken("e0xX9...")
.setNotification(Notification.builder()
.setTitle("Title goes here")
.setBody("body message goes here")
.setImage("https://firebase.google.com/static/docs/cloud-messaging/images/Localization_v2.png")
.build())
.build())
留意要先加 com.google.firebase:firebase-admin
這個 library。
由於 Admin SDK 已經封裝了一次 HTTP v1 API,所以可以直接用他們的 function 來寫 request。如果想自己寫 HTTP request 的話,你可以只用開首那個建構 GoogleCredentials
部分,之後再由 GoogleCredentials
拿到加進 Authorization
header 那個 token:
val googleCredentials = GoogleCredentials
.fromStream(/* ... */)
.createScoped(/* ... */)
googleCredentials.refresh()
val accessToken = googleCredentials.accessToken.tokenValue
Authorization
header 的值是 "Bearer $accessToken"
。