如何在应用程序为后台 FCM 时检索通知消息 intent.getExtras()
How to retrieve notification message intent.getExtras() when app is background FCM
我正在使用 FCM 进行简单通知
当应用程序在前台运行时,一切正常。我在 onMessageReceived
方法中收到通知和数据消息。
但是当应用程序在后台运行时,我会在系统托盘中收到通知。当我单击控件时,它会转到主 activity。当我解析 intent.getExtras();
时,我只得到这个关键数据 - google.sent_time
、from
、google.message_id
、collapse_key
.
如何从intent.getExtras()
获取系统托盘中可见的通知消息标题和消息?
我正在使用 FCM 控制台发送通知我没有专门的服务器来执行此操作。
接收消息的代码:
final Bundle extras = intent.getExtras();
final Set<String> keySet = extras.keySet();
final Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
final String key = iterator.next();
final Object o = extras.get(key);
System.out.println(key + ":" + o);
}
如Handling Messages for Android FCM docs中所见,如果您发送的payload既有通知又有数据,将被分开处理。通知部分将由通知托盘处理,而数据部分将在意图的附加部分中。
据我所知,当应用程序处于后台时(始终由通知托盘处理),无法获取通知负载。但是,您可以改为将自定义键值对添加到您的数据负载中,如下所示:
{
"data": {
"notification_title": "title here",
"notification_message": "message here"
}
}
当然,您必须确保 notification_title
和 notification_message
的数据值与您在通知负载中设置的值相同。然后像往常一样从 Intent extras 中检索它。
只需覆盖 FirebaseMessagingService 的 handleIntent() 方法。class 它会在前台和后台模式下调用,您可以在这里获取和解析通知密钥和有效负载数据
public void handleIntent(Intent intent)
{
String title = bundle.getString("gcm.notification.title");
String body = bundle.getString("gcm.notification.body");
}
注意:它适用于播放服务 11
当您的应用程序处于后台或被终止时,Firebase 通知将表现为数据消息。在这些场景中,如果您想检索通知消息,则必须在
下的键值对中定义它
FCM 控制台的高级选项
然后在您的 activity 中使用此 键 检索此消息,它将通过点击通知打开。
if (getIntent().getExtras() != null) {
Object value ;
for (String key : getIntent().getExtras().keySet()) {
if(key.equals("Message Key")) {
value = getIntent().getExtras().get(key); // value will represend your message body... Enjoy It
Log.d("NotificationTag" , key+"____" + value);
}
}
}
我正在使用 FCM 进行简单通知
当应用程序在前台运行时,一切正常。我在 onMessageReceived
方法中收到通知和数据消息。
但是当应用程序在后台运行时,我会在系统托盘中收到通知。当我单击控件时,它会转到主 activity。当我解析 intent.getExtras();
时,我只得到这个关键数据 - google.sent_time
、from
、google.message_id
、collapse_key
.
如何从intent.getExtras()
获取系统托盘中可见的通知消息标题和消息?
我正在使用 FCM 控制台发送通知我没有专门的服务器来执行此操作。
接收消息的代码:
final Bundle extras = intent.getExtras();
final Set<String> keySet = extras.keySet();
final Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
final String key = iterator.next();
final Object o = extras.get(key);
System.out.println(key + ":" + o);
}
如Handling Messages for Android FCM docs中所见,如果您发送的payload既有通知又有数据,将被分开处理。通知部分将由通知托盘处理,而数据部分将在意图的附加部分中。
据我所知,当应用程序处于后台时(始终由通知托盘处理),无法获取通知负载。但是,您可以改为将自定义键值对添加到您的数据负载中,如下所示:
{
"data": {
"notification_title": "title here",
"notification_message": "message here"
}
}
当然,您必须确保 notification_title
和 notification_message
的数据值与您在通知负载中设置的值相同。然后像往常一样从 Intent extras 中检索它。
只需覆盖 FirebaseMessagingService 的 handleIntent() 方法。class 它会在前台和后台模式下调用,您可以在这里获取和解析通知密钥和有效负载数据
public void handleIntent(Intent intent)
{
String title = bundle.getString("gcm.notification.title");
String body = bundle.getString("gcm.notification.body");
}
注意:它适用于播放服务 11
当您的应用程序处于后台或被终止时,Firebase 通知将表现为数据消息。在这些场景中,如果您想检索通知消息,则必须在
下的键值对中定义它FCM 控制台的高级选项
然后在您的 activity 中使用此 键 检索此消息,它将通过点击通知打开。
if (getIntent().getExtras() != null) {
Object value ;
for (String key : getIntent().getExtras().keySet()) {
if(key.equals("Message Key")) {
value = getIntent().getExtras().get(key); // value will represend your message body... Enjoy It
Log.d("NotificationTag" , key+"____" + value);
}
}
}