Firebase获取通知数据

时间:2016-08-02 06:16:37

标签: android android-intent firebase firebase-cloud-messaging firebase-notifications

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

  

当您的应用在后台时,Android会指示通知   消息到系统托盘。用户点击通知即可打开   应用程序启动器默认情况下。

     

这包括同时包含通知和数据有效负载的消息   (以及从Notifications控制台发送的所有消息)。在这些   例如,通知被传送到设备的系统托盘,和   数据有效负载是在您的意图的附加内容中提供的   发射器活动。

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

我可以收到我从控制台发送的通知 如何从额外的意图中获得通知有效负载?

2 个答案:

答案 0 :(得分:4)

我倾倒额外的捆绑并找到答案。

这些是我一直在寻找的钥匙:

google.sent_time(长)
来自(字符串)
google.message_id(String)
collapse_key(String)

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

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

更新

正如其他人所观察到的那样,我认为不可能从额外的意图中提取标题和消息。我找到了一个工作区,再次用一把钥匙传递它们。一些代码如何从extras intent中提取数据是

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

我不记得确切的名字,但有2种模式可以发送信息。

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

    1. 如果在后台(作为通知)到系统托盘
    2. 如果在前台,则为onMessageReceived。
  2. 你必须处理这两个问题,我最后通过我的应用程序本身向系统托盘发送通知,如果我在onMessageReceived中获取它,以便我可以从处理主要活动中额外意图的相同代码中管理它们。

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

    1. 直接从服务器或应用程序向firebase服务器发送消息。我认为消息将始终发送到onMessageReceived,从而节省了作为单独密钥再次发送消息的所有痛苦以及如果删除通知则丢失数据的问题。但在这里你必须设置自己的通知app / server

答案 1 :(得分:1)

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>

这可能有助于我们