2016-08-18 49 views
1

我的應用程序中的共享首選項有一種奇怪的情況。我正在使用Firebase郵件服務,並且我希望在收到郵件時在共享首選項中將布爾值設置爲true。當應用程序處於後臺時,SharedPreferences將在Firebase服務中進行編輯後更改值

這裏有一個簡單的代碼我又寫道:

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
getApplicationContext().getSharedPreferences(ApplicationConstants.SHARED_PREFRENCES_KEY, MODE_PRIVATE).edit().putBoolean(getString(R.string.badge_settings_key), true).apply(); 
} 

我在活動中的一個後訪問該布爾值。正如你所看到的,我在這個方法中爲布爾值設置了true。

奇怪的是,當我的應用程序在forground(其中一個活動是可見的),這完美的作品,每當我訪問這個值它仍然是真實的。但是當我的應用程序處於後臺並收到消息時,值仍然是錯誤的並且不會更改。服務將無法正確觸發,或者共享首選項文件無法正確保存。

我能做些什麼來解決這個問題?

+0

如果用戶從未觸摸通知並直接啓動應用程序,該怎麼辦?我可以爲這個塞納里奧做些什麼? – roostaamir

+0

然後就不需要通知了。 –

+0

對於我的應用程序senario,有。我想向用戶顯示某事發生的通知,並在共享首選項中設置該布爾值 – roostaamir

回答

1

onMessageReceived如果您的應用程序處於後臺或被終止並且通知是從Firebase控制檯發送的,則不會被調用。

你的情況發生了什麼,你已經收到通知,但方法onMessageReceived從未被調用,並且SharedPref給你false作爲任何布爾變量的默認值。

解決方案: 不要通過Firebase控制檯發送通知,請使用其API。

Check this out.

編輯:

你不能把JSON鍵「通知」的要求,以使其在onMessageReceived降落在應用程序中的所有三種情形:前景,背景和殺害。

+0

我使用他們的API,我使用他們的POST web服務發送消息。我的信息中既有數據又有通知,我應該怎麼做才能實現我的目標? (我希望通知和''onMessageRecieve'和'data') – roostaamir

+1

爲了使它工作:你不能把json關鍵字「通知」放在你對firebase api的請求中,而是使用「data」。運氣不好。 –

+0

但我需要'通知'鍵才能讓它通知用戶soemthig已經發生,並且我需要這些數據用於內部作業。如果我想同時做什麼,該怎麼辦? – roostaamir

相關問題