2017-05-14 41 views
0

我對收到帶有通知和數據有效負載的Firebase消息有疑問。數據將以「意圖的附加數據」到達。如何在Android應用程序中處理/處理Firebase雲消息傳遞的數據有效負載(包括通知)?

我的問題是哪個意圖(或活動)?在將應用程序切換到背景時,用戶將離開屏幕。那麼,我是否需要嘗試在我的應用中檢索所有意圖/活動的Extra?

一旦應用程序進入前臺,在哪裏以及如何實際編碼以檢索數據有效載荷?

謝謝!

新增:

我的意思是,我alraedy有10+的活動,而且會有更多的時,應用程序就完成了。那麼,我是否必須檢索所有活動的Extra,以查看該應用是否已經使用任何Push數據有效載荷重新打開?

+0

我更新了我的答案,以包含如何覆蓋默認行爲的說明。 –

回答

2

在你在你的問題鏈接的文檔,它指出:

與消息通知與數據有效載荷,背景和前景 。在這種情況下,通知被傳遞到 設備的系統盤,數據有效載荷在您發射活動

的意圖的額外 傳遞的發射活動是在清單中使用類別指定發射器。例如:

<activity 
     android:name="com.example.MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

您可以覆蓋默認行爲來指定另一個活動。在您的message notification data中,使用操作字符串的值添加屬性click_action。然後創建該活動並在清單中爲該活動指定一個意圖過濾器。例如,對於消息:

{ 
    "to": "dhVgCGVkTSR:APA91b...mWsm3t3tl814l", 
    "notification": { 
    "title": "New FCM Message", 
    "body": "Hello World!", 
    "click_action": "com.example.FCM_NOTIFICATION" 
    }, 
    "data": { 
    "score": "123" 
    } 
} 

定義意圖過濾器是這樣的:

<activity android:name=".MyFcmNotificationActivity"> 
     <intent-filter> 
      <action android:name="com.example.FCM_NOTIFICATION" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

並澄清本文檔的位,數據有效載荷不傳遞到接收到所述消息時的活性;它在用戶點擊通知時發送。

1

您將不得不擴展FirebaseMessagingService類。

並覆蓋onMessageReceived方法。

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
// ... 

// TODO(developer): Handle FCM messages here. 

Log.d(TAG, "From: " + remoteMessage.getFrom()); 

// Check if message contains a data payload. 
if (remoteMessage.getData().size() > 0) { 
    Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 

    if (/* Check if data needs to be processed by long running job */ true) { 
     // For long-running tasks (10 seconds or more) use Firebase Job Dispatcher. 
     scheduleJob(); 
    } else { 
     // Handle message within 10 seconds 
     handleNow(); 
    } 

} 

// Check if message contains a notification payload. 
if (remoteMessage.getNotification() != null) { 
    Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
} 

// Also if you intend on generating your own notifications as a result of a received FCM 
// message, here is where that should be initiated. See sendNotification 
method below. 
} 

確保您在清單中註冊該服務。

+0

我已經這樣做了。但文檔說,如果有效載荷同時包含數據和通知,它將不會到達onMessageReceived,但將「額外的意圖」。 – ikevin8me

相關問題