[英]Firebase Console Messaging when app is in background
我在Firebase控制台(而非api)的通知正文中發送JSON,然后在onMessageReceived方法中對其進行轉換。 當應用程序位於前台時,當應用程序位於后台時,不會調用onMessageReceived方法,並且通知主體在通知托盤中顯示為字符串,此方法有效。
有什么辦法或解決方法嗎?
注意:由於具有定位功能,我正在通過控制台發送。
來自官方文檔
大多數消息類型都提供onMessageReceived,但以下情況除外:
在后台接收時同時具有通知和數據有效負載的消息。 在這種情況下,通知將傳遞到設備的系統托盤,而數據有效載荷將在啟動器活動的意圖之外傳遞。
這意味着,默認情況下,通知將由android系統顯示,您對此無能為力。 但是,您可以在通知中附加鍵值數據有效負載,該有效負載將作為活動的預期附加信息提供。 您可以接收這些數據值並執行您想做的任何事情。
我已經創建了一個如下所示的輔助函數,並將其放在活動的onCreate()
中
public void FCM()
{
if (getIntent().getExtras() != null) {
String pack=(String) getIntent().getExtras().get(YOUR_KEY);
if(pack!=null) {
Log.e("fcm main pack", pack);
try {
Uri uri = Uri.parse("market://details?id=" + pack);
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(goToMarket);
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + pack)));
}
}
}
//else Log.e("fcm main","null");
}
在控制台中,它會在通知數據中添加"notification"
,而當應用程序在后台運行時,firebase會自行處理"notification"
數據。 即使您在"data"
對象中還有任何其他數據! 您將無法訪問。
因此,從控制台您無法觸發onMessageReceived()
您必須通過刪除"notification"
數據來手動發送推送,以在應用程序處於后台時觸發onMessageReceived()
像這樣
{
"to":"/topics/topic_name",//or token id of specified user
"data" : {
"x" : "true",
"y" : "Abc",
"z" : "123"
}
}
更新資料
如果要更改系統生成的通知(如圖標),可以將其添加到manifest.xml
文件中
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon" />
<meta-data android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/google_blue" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.