0

我是 firebase 控制台发送通知。它直接向系统托盘发送通知。当用户点击它们时,我想从它们那里获取有效负载。

当您的应用程序处于后台时,Android 会将通知消息定向到系统托盘。默认情况下,用户点击通知会打开应用启动器。

这包括同时包含通知和数据负载的消息(以及从通知控制台发送的所有消息)。在这些情况下,通知会被传递到设备的系统托盘,而数据负载会在启动器 Activity 的意图的附加部分中传递。

https://firebase.google.com/docs/notifications/android/console-audience

我能够获取从控制台发送的通知 如何从我的额外意图中获取通知有效负载?

4

2 回答 2

5

我丢弃了额外的捆绑包并找到了答案。

这些是我正在寻找的钥匙:

google.sent_time (long)
from (string)
google.message_id (String)
collapse_key (String)

除此之外,您可以直接使用用于自定义数据的键(在发送消息时)。

当我们从 firebase 控制台触发消息时,我认为只有我们发送的自定义数据才能从 extra 的意图中接收。标题、消息等我无法从这里检索

更新

正如其他人所观察到的,我认为不可能从额外意图中提取标题和消息。我通过使用单独的密钥再次传递它们找到了一种解决方法。一些如何从额外意图中提取数据的代码是

Bundle Extras = getIntent().getExtras(); 
public static String Content_KEY = "NotificationContent"; //alterative to message
String Content = Extras.getString(Content_KEY);

我不记得确切的名字,但有两种发送消息的模式。

  1. 第一种模式是 firebase 控制台使用的模式。它直接发送消息

    1. 如果在后台,则发送到系统托盘(作为通知)
    2. 如果在前台,则发送到 onMessageReceived。

你必须同时处理这两个问题,如果我在 onMessageReceived 中获得通知,我最终会从我的应用程序本身向系统托盘发送通知,以便我可以从处理主要活动中的额外意图的相同代码管理它们。

如果通知丢失,您也会丢失数据。

  1. 直接从服务器或应用程序向 firebase 服务器发送消息。我认为消息将始终发送到 onMessageReceived,从而将再次发送消息的所有痛苦保存为单独的密钥以及如果删除通知会丢失数据的问题。但是在这里您必须设置自己的通知应用程序/服务器
于 2016-08-02T12:12:37.173 回答
2
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v4.content.WakefulBroadcastReceiver;


public class FirebaseDataReceiver extends WakefulBroadcastReceiver {

private final String TAG = "FirebaseDataReceiver";

public void onReceive(Context context, Intent intent) {

String dataBundle intent.getExtras().getString("gcm.notification.message");

}
}


<receiver
        android:name="PACKAGENAME.FirebaseDataReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
</receiver>

这可能对我们有帮助

于 2017-05-19T09:42:36.070 回答