因為這次實作為從 Firebase 發送通知至 APP
因此必須先將專案連結至 FireBase 並載入 FCM(Firebase Cloud Messaging)
Tools > Firebase
會看到 Android Studio 左半邊談出了下圖視窗
點選 Cloud Messaging
點選後會看到下面多一行 "Set up Firebase Cloud Messaging"
點選 "Set up Firebase Cloud Messaging"
接著會看到視窗變為下圖的樣子,點選 "Connect to Firebase"
此時會自動開啟瀏覽器,需要選擇要用哪個帳戶來登入 Android Studio
允許權限
選擇 Android 專案要使用的服務,點選左邊的 "Firebase"
點選畫面中的 "GET START" 或右上角的 "前往控制台"
建立新專案或選擇已建立的專案
可以從 Firebase 網站新增專案也可以從 Android Studio 新增專案
從 Firebase 網站新增專案
新增完後可以回到 Android Studio 選擇剛剛已建立的專案
從 Android Studio 新增專案或選擇已建立的專案
此時會發現第 1 項已顯示綠色的 "Connected"
表示已成功連接 Android 專案及 Firebase 專案
接著點選第 2 項的 "Add FCM to your app"
將 FCM(Firebase Cloud Messaging)導入至 Android 專案中
點選右下角的 "Accept Changes"
若成功導入會看到第 2 項已顯示綠色的 "Dependencies set up correctly"
若有出現錯誤訊息:
Failed to resolve: firebase-messaging-15.0.0
可到左邊目錄中的 build.gradle(Module: app) 中
把下面這行後面的 "15.0.0" 刪掉implementation 'com.google.firebase:firebase-messaging:17.0.0:15.0.0'
變成下面這樣即可
implementation 'com.google.firebase:firebase-messaging:17.0.0'
完成以上步驟基本上就完成連接 Firebase 及導入 FCM 了!
用來接收 Firebase 發出的訊息的類別
首先需要先在 AndroidManifest.xml 加入這個 Service
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
接著我們需要自定義一個類別來繼承這個類別,才可以使用裡面的方法。
class MyFirebaseMessagingService : FirebaseMessagingService() { }
#完成這個自定義類別後,APP 會產生一個新的我們自定義類別的實例來接收訊息。
這表示
1. 我們不需要在其他地方自己實例出這個自定義類別
2. 無法透過自己建實例傳值給該類別的方式從外部設定值給類別中的變數,
因為接收訊息的會是 APP 自己建立的新實例,不會是自己建的實例。
用來接收 FCM 發出的訊息。
onMessageReceived (message: RemoteMessage)
message:從 FCM 發送的訊息
RemoteMessage 物件為 FCM 發出的訊息類型
我們要取得的通知訊息為此物件的 RemoteMessage.Notification 類別中的 body 部分
override fun onMessageReceived(message: RemoteMessage?) {
sendBroadcast(message?.notification?.body)
}
當 FCM 發出的訊息類型為 notification 時,
APP 在前景的話會調用此方法接收 FCM 發出的訊息。
若不在前景將不會調用此方法。
若不在前景 Android 系統會自動將收到的通知顯示在裝置上方。
當 FCM 發出的訊息類型為 data 時,
APP 無論是否在前景都會調用此方法接收 FCM 發出的訊息。
關於 FCM 發出的訊息類型的差異可以參考 官方資料
FirebaseMessagingService 中還有其餘 4 個方法:(參考官方說明)
Android
Kotlin
FCM
FirebaseMessagingService