Firebase Получение данных уведомлений при нажатии

Я был консолью firebase для отправки уведомлений. Он отправляет уведомления непосредственно в системный трей. Я хочу получать от них полезную нагрузку, когда пользователь нажимает на них.

Когда ваше приложение работает в фоновом режиме, Android направляет уведомления на панель задач. При нажатии на уведомление пользователем по умолчанию открывается панель запуска приложений.

Сюда входят сообщения, содержащие как уведомление, так и полезные данные (и все сообщения, отправленные из консоли уведомлений). В этих случаях уведомление доставляется на панель задач устройства, а полезные данные доставляются в дополнениях к цели вашей активности запуска.

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

Я могу получать уведомления, отправленные с консоли. Как мне получить полезные данные уведомления от дополнительных моих намерений?


person Varun Garg    schedule 02.08.2016    source источник


Ответы (2)


Скинул бандл дополнений и нашел ответ.

Вот те ключи, которые я искал:

google.sent_time (long)
from (строка)
google.message_id (String)
collapse_key (String)

Помимо этого, вы можете напрямую использовать ключи, которые вы использовали для пользовательских данных (при отправке сообщения).

когда мы запускаем сообщения из консоли firebase, я думаю, что только пользовательские данные, которые мы отправили, могут быть получены из дополнительных намерений. Название, сообщение и т. Д. Я не могу получить отсюда

Обновлять

Как также отмечают другие, я не думаю, что можно извлечь заголовок и сообщение из намерения дополнений. Я нашел обходной путь, передав их снова с отдельным ключом. Некоторый код, как извлекать данные из намерения дополнительных,

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

Точных имен не помню, но есть 2 режима отправки сообщения.

  1. Первый режим - это то, что использует консоль firebase. Он отправляет сообщения напрямую

    1. To system tray if in background (as a notification)
    2. В onMessageReceived, если на переднем плане.

Вам придется обрабатывать и то, и другое, я закончил тем, что отправил уведомление из самого приложения в системный трей, если я получил его в onMessageReceived, чтобы я мог управлять ими из того же кода, который обрабатывает дополнительные функции в основном действии.

Вы также потеряете данные, если потеряете уведомление.

  1. Отправляйте сообщение прямо с сервера или приложения на сервер firebase. Я думаю, что сообщение всегда будет отправляться в onMessageReceived, что избавит вас от боли, связанной с повторной отправкой сообщения в виде отдельного ключа, и проблемы потери данных, если уведомление будет удалено. Но здесь вам нужно будет настроить собственное приложение / сервер уведомлений.
person Varun Garg    schedule 02.08.2016
comment
когда пользователь нажимает на push-уведомление, то как мы можем получить push-уведомление в Activity с помощью firebase sdk. ? - person Teraiya Mayur; 19.05.2017
comment
Мне не удалось получить сообщение, так как оно не было найдено в намерении дополнений, я отправил ему его копию в другом ключе, таком как myMessage - person Varun Garg; 19.05.2017
comment
ОК, ваш ключ находится под объектом уведомления, верно? и, если возможно, вы можете поделиться кодом здесь, чтобы я мог его просмотреть. - person Teraiya Mayur; 19.05.2017
comment
И я не могу получить ключ, когда приложение убито в фоновом режиме. - person Teraiya Mayur; 19.05.2017

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>

Это может нам помочь

person Teraiya Mayur    schedule 19.05.2017
comment
Следует иметь в виду: этот класс объявлен устаревшим на уровне API 26.1.0. developer.android.com/reference/android/support/v4/content/ - person Dacre Denny; 19.08.2019