0

我有新的通知,所以請不要嚴格...從通知原意是空

我收到消息從FCM,併發出通知:

int requestID = (int) System.currentTimeMillis(); 

Intent intent = new Intent(this, MainActivity.class); 
intent.putExtra(ConstantsUtil.Firebase.TOPIC_UPDATE, ConstantsUtil.Firebase.TOPIC_UPDATE); 
intent.setAction(ConstantsUtil.Firebase.TOPIC_UPDATE); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestID, intent, 
     PendingIntent.FLAG_ONE_SHOT); 

Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(R.mipmap.ic_launcher) 
     .setContentTitle(title) 
     .setContentText(messageBody) 
     .setAutoCancel(false) 
     .setSound(defaultSoundUri) 
     .setContentIntent(pendingIntent); 

NotificationManager notificationManager = 
     (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

notificationManager.notify(requestID, notificationBuilder.build()); 

如果應用程序正在運行當設備收到通知時 - 它工作正常,打開新的活動,我可以getExtras和getAction。

但是,如果應用程序關閉並收到通知,然後用戶單擊它 - 比打開新活動,但intent.getExtraString爲null,與getAction相同。

如何在應用程序關閉時從通知中獲取Action和getExtras?

+0

你是如何發送通知的? –

+0

它會變嗎?與firebase消息系統 –

+0

是的,它確實很重要,發送的消息類型(通知消息或數據消息)可以通過發送方法確定。例如:如果您從Firebase控制檯發送郵件,郵件將始終爲通知郵件,可能需要以特定方式處理郵件。 –

回答

0

使用Firebase,您無法在應用關閉時自定義通知。所以你不能自定義該通知的意圖。也許對於下一個版本的Firebase,他們會添加此功能

+1

我認爲從創建通知的位置並不重要。想象它是在其他一些後臺服務中創建的,並且關閉了應用程序。比ü點擊通知必須打開新的應用程序額外 –

0

我假設您從Firebase控制檯或FCM REST API發送通知消息。

當應用程序在後臺收到通知消息時,會顯示自動生成的通知,而不是您使用代碼生成的通知。如果該通知消息不包含數據有效內容,則在嘗試從中檢索額外內容時,您將得到空值。

當應用程序處於前臺時,您會收到onMessageReceived回調,並且您可以生成自己的通知,就像您在問題中所做的那樣,在那裏您將額外內容添加到通知的意圖中。這可以解釋爲什麼當你的應用程序處於前臺時,通知有額外的功能,但是當你在後臺時,通知不包含額外功能。

如果您要從Firebase控制檯發送通知,請務必在消息編輯器的高級選項中添加所需的自定義數據。如果您是從API發送的,那麼一定要包含數據有效載荷和通知消息。

@Stan Malcolm,你不是唯一一個被這個困惑的人,我們正在更新文檔以使其更加清晰。

+0

感謝您的答案! 但我的例子核心在裏面onMessageReceived ... 所以現在我更困惑... –

+0

onMessageReceived不會調用所有消息。 –

+0

嗨,我也面臨同樣的問題。 通知消息有兩個有效載荷,1)通知和2)數據。 我正在發送我需要在數據有效載荷中額外添加的數據。 所以根據答案,它應該工作。但是,當我做getExtras(),它給我空。我也嘗試過使用getExtra()方法,但結果是一樣的。 –