0

我正在使用FCM進行通知,並且它在前臺和後臺的所有場景中運行良好。我的問題是,當我從我的應用程序註銷並且另一個用戶向我發送消息時,我沒有收到任何通知,因爲我註銷時沒有問題,但是當我再次登錄到應用程序時,我想要收到舊的未讀通知,以便如何這樣做的任何幫助,將不勝感激下面是我用從fcm獲取舊通知Android

public class FirebaseIDService extends FirebaseInstanceIdService { 
    private static final String TAG = "FirebaseIDService"; 
    Context ctx = this; 

    @Override 
    public void onTokenRefresh() { 

     // Get updated InstanceID token. 
     try { 
      String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 

      Log.d(TAG, "Refreshed token: " + refreshedToken); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 


} 

    public class MyFirebaseMessagingService extends FirebaseMessagingService { 
     private static final String TAG = "FCM Service"; 


     @Override 
     public void onMessageReceived(RemoteMessage remoteMessage) { 
      super.onMessageReceived(remoteMessage); 
      FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
      Log.e("remote", remoteMessage.getData().get("type") + ""); 
      Log.e("remoteMessage", remoteMessage.getData() + ""); 
      Log.e("remoteMessagebody", remoteMessage.getData().get("body") + ""); 

// handling other data also according to my app which i am not mentioning 

    } 
    } 

我已經使用這個代碼獲取老的通知,但因此未工作

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

和清單

<service 
      android:name=".MyFirebaseMessagingService" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
      </intent-filter> 
     </service> 
     <service android:name=".FirebaseIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
      </intent-filter> 
     </service> 
代碼

和gradle這個

compile 'com.google.firebase:firebase-messaging:9.2.1' 
+0

您從後臺得到通知,PHP是指接到通知? – Saif

回答

0

的FCM消息都有自己的lifetime - 4周內默認情況下,可以通過在你的有效載荷設置time_to_live進行修改。此後,該消息將被丟棄。

你可以做的是實現每個notif保存在你的服務器數據庫中,如果它還沒有被讀取,並且你檢測到用戶重新登錄,重新發送它們作爲推送通知,或者只是檢索它們在你的應用程序中,並將它們顯示爲通知

0

1.爲什麼會發生這種情況?

有在FCM(火力地堡雲消息)兩種類型的消息:

顯示信息:這些消息觸發只有當你的應用程序是在前臺

數據電文的onMessageReceived()回調:即使您的應用處於前臺/後臺/終止狀態,這些消息也會觸發onMessageReceived()回調 Firebase團隊尚未開發用於將數據消息發送到設備的UI。

2.如何?

要做到這一點,你必須執行POST到以下網址:

POSThttps://fcm.googleapis.com/fcm/send 而下面的標題:

重點:內容類型,值:應用程序/ JSON 關鍵字:授權,值:鍵= 機身採用主題:

{ 
    "to": "/topics/my_topic", 
    "data": { 
     "my_custom_key" : "my_custom_value", 
     "other_key" : true 
    } 
} 

或者,如果你想將它發送到特定設備:

{ 
    "data": { 
     "my_custom_key" : "my_custom_value", 
     "other_key" : true 
    }, 
    "registration_ids": ["{device-token}","{device2-token}","{device3-token}"] 
} 

注:確保你不加入JSON關鍵字通知 注意:爲了讓您的服務器密鑰,你可以找到它在火力控制檯:你的項目 - >設置 - >項目設置 - >雲消息傳遞 - >服務器密鑰

3。如何處理推送通知消息?

這是你如何處理收到的消息:

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Map<String, String> data = remoteMessage.getData(); 
    String myCustomKey = data.get("my_custom_key"); 

    // Manage data 
}