【问题标题】:Firebase Get Notification data on tapFirebase 随时获取通知数据
【发布时间】:2016-12-07 08:52:34
【问题描述】:

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

当您的应用处于后台时,Android 会发送通知 消息到系统托盘。用户点击通知会打开 默认应用启动器。

这包括同时包含通知和数据负载的消息 (以及从通知控制台发送的所有消息)。在这些 在这种情况下,通知会发送到设备的系统托盘,并且 数据有效负载是在您的意图的附加内容中交付的 启动器活动。

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

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

【问题讨论】:

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


    【解决方案1】:

    我丢弃了 extras bundle 并找到了答案。

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

    google.sent_time(长)
    来自(字符串)
    google.message_id(字符串)
    折叠键(字符串)

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

    当我们从 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,从而将再次发送消息的所有痛苦保存为单独的密钥以及如果删除通知会丢失数据的问题。但是在这里您必须设置自己的通知应用程序/服务器

    【讨论】:

    • 当用户按下推送通知时,我们如何使用 firebase sdk 在 Activity 中获取推送通知消息。 ?
    • 我无法检索该消息,因为它未在附加意图中找到,我将其副本发送到另一个键中,例如 myMessage
    • OK yourkey 在 Notification 对象下,对吗?如果可能的话,你能在这里分享一个代码,这样我就可以查看它了。
    • 当应用处于被杀后台时,我无法获取密钥。
    【解决方案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>
    

    这可能对我们有帮助

    【讨论】:

    猜你喜欢
    • 2018-03-22
    • 2018-06-02
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多