這是這個問題的一個副本:Firebase FCM notifications click_action payload
但是,這是由這個問題的作者接受了答案只是說,它是不可能的火力地堡控制檯,但它是 - 與一個簡單的解決方法。 This answer by diidu到相同的問題解釋我將使用的解決方法。
UPDATE:
爲了詳細說明他的答案:
添加的輔助類(或以某種方式實現startActivity()
法):
public class ClickActionHelper {
public static void startActivity(String className, Bundle extras, Context context){
Class cls;
try {
cls = Class.forName(className);
}catch(ClassNotFoundException e){
//means you made a wrong input in firebase console
}
Intent i = new Intent(context, cls);
i.putExtras(extras);
context.startActivity(i);
}
}
在您的應用程序的啓動活動,請致電請檢查onCreate()
和onNewIntent()
(如果活動是以單頂標誌啓動的,則只調用onNewIntent()
而不是onCreate()
)中的任何新意圖:
@Override
protected void onCreate(Bundle bundle) {
[...]
checkIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
[...]
checkIntent(intent);
}
public void checkIntent(Intent intent) {
if (intent.hasExtra("click_action")) {
ClickActionHelper.startActivity(intent.getStringExtra("click_action"), intent.getExtras(), this);
}
}
而且在onMessageReceived()
:
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
if (data.containsKey("click_action")) {
ClickActionHelper.startActivity(data.get("click_action"), null, this);
}
}
發送通知與火力控制檯中,將鍵值對,如自定義的數據是這樣的:
Key: click_action
Value: <fully qualified classname of your activity>
現在,當通知被接收並點擊,它會打開你的活動。如果您的應用程序處於前景中,它也會立即轉換爲活動 - 向用戶詢問他是否想要參加此活動可能會很好(通過在onMessageReceived()
中顯示對話框)。
您所描述的行爲是奇數。根據文檔(https://firebase.google.com/docs/notifications/android/console-device#receive_and_handle_messages),onMessageReceived應該*只在*應用程序在前臺*時被調用(因爲您有通知和數據有效載荷)。你所描述的是它是相反的。那是對的嗎? –
對不起,我交換了前景和背景。我編輯了這個問題。 – Alex
[Firebase FCM通知單擊\ _action有效內容]的可能重複(http://stackoverflow.com/questions/37407366/firebase-fcm-notifications-click-action-payload) –