1

在Firebase文檔中,在您的應用程序在MainActivity的onCreate中打開時,訂閱主題是安全的。何時正確訂閱Firebase中的主題

MainActivity.java

FirebaseMessaging.getInstance().subscribeToTopic("announcement"); 

最有可能當應用程序在後臺(按下HOME鍵),您會收到您的通知/前景。

問題是當我關閉應用程序(應用程序被銷燬)或者我重新啓動手機時,我的應用程序似乎沒有收到Firebase控制檯的通知(通過主題發送)。雖然我認爲我需要在手機重新啓動時實現廣播接收器。

無論如何,我從我的擴展FirebaseMessagingService的onCreate訂閱主題,但它始終調用onDestroy。從調試看來,當從FirebaseMessagingService接收到通知時,它會通過onCreate - > onMessage - > onDestroy進行每次通知。

據我所知,我的擴展FirebaseMessagingService應該活着,即使應用程序被銷燬,所以它不應該每次都調用onCreate。

因爲如果應用程序被破壞

所以我不知道,我應該把我的訂閱主題我的Android代碼服務甚至應該努力這樣,即使應用程序被破壞它會仍然收到通知等通知。

預先感謝您。

+0

可能的重複[Android:訂閱Firebase雲消息傳遞(FCM)主題](http://stackoverflow.com/questions/40055051/android-subscribe-to-firebase-cloud-messagingfcm-topic) –

+0

另請參閱*鏈接*帖子(中右側)上面的鏈接。 –

+0

感謝您提供的信息,但實際上我在提問之前已經閱讀了該鏈接。是的,在每個應用程序啓動時訂閱都可以,但是即使我沒有調用unsubscribeToTopic,當應用程序被終止時,問題仍然沒有被訂閱。所以問題是我應該在哪裏放置我的訂閱,這樣即使應用程序被殺死,我仍然會收到通知。因爲我假設FirebaseMessagingService應該照顧這一點。 – bumblebeen

回答

0

FirebaseMessagingService不需要處於活動狀態,您的應用程序才能收到通知。

服務僅執行處理傳入消息或令牌請求。

如果服務停止,請不要擔心。當新的通知到達時,Android會重新啓動它。


您可以在您的應用程序的任何位置訂閱主題。 訂閱將被存儲直到您取消訂閱。

+0

好吧,這樣的行爲解釋了服務的重啓週期。 即使應用程序被銷燬,我現在也可以接收主題。但僅限於某些設備。我不確定是什麼導致某些設備無法收到通知。謝謝 – bumblebeen

+0

設備的一個子集實現了非標準的節電技術,這些技術打破了許​​多Android API(包括FCM)。你可能會受此影響。如果是這種情況,您應該通知製造商[設備和構建版本]包含關於推送通知的錯誤。 –

0

使用STIKY服務。

重寫此方法:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return START_STICKY; 
} 

這應該讓您的服務重新啓動應用程序時destroied後。在這個方法中訂閱你的話題,因爲這個方法每次被銷燬後都會被調用。

+0

所以我應該創建另一個服務?因爲當我擴展FirebaseMessagingService時,我無法覆蓋該方法 「無法覆蓋onStartCommand(Intent,int,int),因爲overriden方法是最後的」 – bumblebeen

+0

請嘗試製作自己的服務並將值事件偵聽器添加到'announcement'主題。 –