应用程序在后台时的Firebase控制台消息传递

时间:2019-01-10 06:58:41

标签: android firebase-cloud-messaging

我在Firebase控制台(而不是api)的通知正文中发送JSON,然后在其中进行转换 onMessageReceived方法。当应用程序位于前景中,应用程序处于背景中,不会调用onMessageReceived方法并且通知主体在通知托盘中显示为字符串时,此方法有效。

有什么办法或解决方法吗?

注意:由于定位功能,我正在通过控制台发送邮件。

2 个答案:

答案 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" />