我在Firebase控制台(而不是api)的通知正文中发送JSON,然后在其中进行转换 onMessageReceived方法。当应用程序位于前景中,应用程序处于背景中,不会调用onMessageReceived方法并且通知主体在通知托盘中显示为字符串时,此方法有效。
有什么办法或解决方法吗?
注意:由于定位功能,我正在通过控制台发送邮件。
答案 0 :(得分:1)
From官方文档
onMessageReceived为大多数消息类型提供,但以下情况除外:
在后台接收时带有通知和数据有效负载的消息。在这种情况下,通知将传递到设备的系统托盘,数据有效载荷将在启动器活动的意图之外传递。
这意味着,默认情况下,该通知将由android系统显示,您对此无能为力。但是,您可以在通知中附加键值数据有效负载,该有效负载将作为活动的预期附加信息提供。您可以接收这些数据值并执行您想做的任何事情。
我已经创建了如下所示的辅助函数,并将其放入活动的onCreate()
public void FCM()
{
if (getIntent().getExtras() != null) {
String pack=(String) getIntent().getExtras().get(YOUR_KEY);
if(pack!=null) {
Log.e("fcm main pack", pack);
try {
Uri uri = Uri.parse("market://details?id=" + pack);
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(goToMarket);
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + pack)));
}
}
}
//else Log.e("fcm main","null");
}
答案 1 :(得分:0)
在控制台中,它会在通知数据中添加"notification"
,并且当应用程序处于后台Firebase时会自行处理"notification"
数据。即使您在"data"
对象中还有任何其他数据!您将无法访问。
因此,从控制台您无法触发onMessageReceived()
,您必须通过删除"notification"
数据来手动发送推送,以在应用程序处于后台时触发onMessageReceived()
像这样
{
"to":"/topics/topic_name",//or token id of specified user
"data" : {
"x" : "true",
"y" : "Abc",
"z" : "123"
}
}
更新
如果您想更改系统生成的图标之类的通知,可以将其添加到manifest.xml
文件中
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon" />
<meta-data android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/google_blue" />