iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
Software Development

英國研究顯示,連續30天用Kotlin開發Android將有益於身心健康系列 第 24

Android Kotlin 實作 Day 16:PushMessaging(上)(FCM+FirebaseMessagingService)

使用語言

  • Kotlin

Method:


連接 Firebase 並載入 FCM

因為這次實作為從 Firebase 發送通知至 APP
因此必須先將專案連結至 FireBase 並載入 FCM(Firebase Cloud Messaging)

  1. Tools > Firebase

  2. 會看到 Android Studio 左半邊談出了下圖視窗
    點選 Cloud Messaging

  3. 點選後會看到下面多一行 "Set up Firebase Cloud Messaging"
    點選 "Set up Firebase Cloud Messaging"

  4. 接著會看到視窗變為下圖的樣子,點選 "Connect to Firebase"

  5. 此時會自動開啟瀏覽器,需要選擇要用哪個帳戶來登入 Android Studio

  6. 允許權限

  7. 選擇 Android 專案要使用的服務,點選左邊的 "Firebase"

  8. 點選畫面中的 "GET START" 或右上角的 "前往控制台"

  9. 建立新專案或選擇已建立的專案
    可以從 Firebase 網站新增專案也可以從 Android Studio 新增專案

    • 從 Firebase 網站新增專案
      新增完後可以回到 Android Studio 選擇剛剛已建立的專案

    • 從 Android Studio 新增專案或選擇已建立的專案

  10. 此時會發現第 1 項已顯示綠色的 "Connected"
    表示已成功連接 Android 專案及 Firebase 專案

    接著點選第 2 項的 "Add FCM to your app"
    將 FCM(Firebase Cloud Messaging)導入至 Android 專案中

  11. 點選右下角的 "Accept Changes"

  12. 若成功導入會看到第 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'
    
  13. 完成以上步驟基本上就完成連接 Firebase 及導入 FCM 了!


FirebaseMessagingService

用來接收 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 自己建立的新實例,不會是自己建的實例。

  • onMessageReceived 方法

    用來接收 FCM 發出的訊息。

    • onMessageReceived (message: RemoteMessage)

      override fun onMessageReceived(message: RemoteMessage?) {
          sendBroadcast(message?.notification?.body)
      }
      
    • 當 FCM 發出的訊息類型為 notification 時,
      APP 在前景的話會調用此方法接收 FCM 發出的訊息。
      若不在前景將不會調用此方法。

      若不在前景 Android 系統會自動將收到的通知顯示在裝置上方。

    • 當 FCM 發出的訊息類型為 data 時,
      APP 無論是否在前景都會調用此方法接收 FCM 發出的訊息。

    • 關於 FCM 發出的訊息類型的差異可以參考 官方資料

  • FirebaseMessagingService 中還有其餘 4 個方法:(參考官方說明)

    onDeletedMessages

    onMessageSent

    onSendError

    onNewToken

查看詳細 Code > GitHub

tags: Android Kotlin FCM FirebaseMessagingService

接下來關於 LocalBroadcastManager 及 BroadcastReceiver 請參考下篇(生產中)>>


上一篇
Android Koltin 實作 Day 15:Notification(Notification)
下一篇
Android Kotlin 實作 Day 16:PushMessaging(中)(LocalBroadcastManager+BroadcastReceiver)
系列文
英國研究顯示,連續30天用Kotlin開發Android將有益於身心健康30

尚未有邦友留言

立即登入留言