Android firebase notification message type

這篇講述自己在開發時遇到的問題,使用方法網路上很多,這邊就不再贅述。

直接進入問題點

問題描述:

FirebaseMessagingServiceonMessageReceived裡面收到推播時,設定大圖示彩色 icon ,還有一個顯示小 icon ,需求是 icon 設定為大圖示彩色 icon 


情況有兩種,一種是App在前景,一種是App在背景或者被殺掉

App在前景情況下,顯示內容正常,大小 icon 正常顯示,如下圖:

App在背景或者被殺掉,只有顯示小 icon 如下圖:

發現問題:

原來是因為App在背景或者被殺掉時接收推播,並沒有觸發onMessageReceived這個方法,而是走預設,直接傳至System tray(系統盤)直接顯示出來,相關資料

需求:

通知icon為彩色大圖icon

解決問題:

原來Firebase API推播傳送訊息有兩種類型的消息,他們稱之為:
  • 通知(Notification)
  • 數據(Data)
  1. Notification - 僅當您的應用程序處於後台/已殺死時才會直接發送到Android的通知托盤的消息,或者onMessageReceived()如果您的應用位於前台,則會將消息發送到方法。
  2. Data - 無論您的應用程序是foreground還是background還是已殺死,這些消息都將始終傳遞給onMessageReceived()方法。
這是傳送notification的消息格式如下:
{
  "message":{
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

這是傳送data的消息格式如下:
{
  "message":{
    "data":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

修改後台傳輸格式,這樣就解決問題了,使用data數據傳輸,可以實現更多自定義的設定。

官方文件:
https://firebase.google.com/docs/cloud-messaging/android/receive

參考連結:
https://stackoverflow.com/questions/37947541/what-is-the-difference-between-firebase-push-notifications-and-fcm-messages
https://stackoverflow.com/questions/39046270/google-fcm-getintent-not-returning-expected-data-when-app-is-in-background-state

留言

這個網誌中的熱門文章

Android - 使用 adb 安装apk

Android ContentProvider 實現多個應用程式共享資料

Android TextView autosizing 自動調整大小