2017-07-28 179 views
1

當火力地堡服務收到RemoteMessage,和應用程序之前已經通過滑開殺了,我必須做什麼,以使應用程序仍然會處理消息?火力地堡服務生命週期

這是一個數據報文,所以行爲是過程,而不是付諸GUI的通知。

+0

你的應用程序將在onMessageReceived方法接收數據的消息,即使應用有 –

+0

@UsmanRana事實並非如此,如果應用程序是在後臺火力地堡自己處理通知,並跳過onMessageReceived – mhenryk

+0

@mhenryk請仔細閱讀問題,他是使用在這兩種情況下都會調用「數據消息」併爲此onMessageReceived調用 –

回答

1

編輯以下解決方案適用於舊的谷歌播放服務(即11.0.2),像(11.6.0)這樣的新版本將handleIntent聲明爲final,這使得此解決方案不再有效。


您必須覆蓋handleIntent(Intent)不調用它super.handleIntent(Intent)。這種方法的問題是沒有創建RemoteMessage對象。我親手創造我自己是這樣的:

RemoteMessage message = new RemoteMessage.Builder(FirebaseInstanceId.getInstance().getToken()) 

並將數據傳遞到地圖,然後onMessageReceived(RemoteMessage)自己(這顯然是可選的,你不需要該對象的話)。

這顯然不是最好的方法,但它是我發現的唯一途徑,讓我打造的通知對我自己或者完全忽略它。

0

你可以註冊一個後臺守護進程服務,但我認爲它會被終止過,當用戶滑開,所以基本上是沒有辦法做到這一點,你應該處理這似乎是一個例外。

0

你可以把任務的onDestroy方法在背景異步服務來處理消息。

你的應用程序的異步服務將始終在後臺通過聽BroadcastReceiver運行,然後,一旦任務完成,你可以finish活動,以終止該應用

+0

將其擦除並立即發送FireBase通知後,它甚至不會進入'onMessageReceived(RemoteMessage remoteMessage)'方法。即使在刷完它後,我如何使它調用該方法? – user3635998

+0

如果您將FireBase通知服務註冊爲在後臺運行的異步任務(使用'BroadcastReceiver'),並從 火災基站發出推送通知,它應該被觸發並開始處理消息。 參考文獻見GCM,推子彈等... – vikytech

+0

組爲'<接收機機器人:名稱=「 receiver.MyReceiver」機器人出口=‘真’><意圖濾波器><動作機器人:名稱=「COM。 google.firebase.MESSAGING_EVENT「/>'但我沒有得到通知如果刷掉 – user3635998

0

當firebase消息到達時,android操作系統(也許是google服務)廣播MESSAGING_EVENT意圖。

<action android:name="com.google.firebase.MESSAGING_EVENT"/> 

您可以實現廣播接收器有意向過濾器上面的意圖,並在它的的onReceive()方法過濾,你適當的服務應啓動(如果沒有運行)。只有廣播接收器才能夠響應,而不管其應用程序的運行狀態如何。

+0

設置爲'< action android:name =「com.google.firebase.MESSAGING_EVENT」/>'但我沒有收到通知,如果刷掉。 – user3635998