带有设备系统托盘中的有效负载的FCM通知未传递给App

时间:2017-01-20 04:59:17

标签: android firebase firebase-notifications

Android应用程序正在后台运行状态。在Firebase控制台中创建了一条通知消息,其中包含高级选项中的有效内容。收到通知并显示在设备的系统托盘上后,单击通知将返回到应用程序,并且数据有效负载未在启动器活动的意图中附加。默认情况下,通知不会按照文档中的指定打开应用程序启动器。为什么设备的系统托盘中的通知正在启动活动,但有时它只是通常点击应用程序图标进入应用程序?

3 个答案:

答案 0 :(得分:0)

您在MainActivity中使用了什么,如果您要发送通知并且应用程序位于前台,那么它将带您进入该特定页面。但如果您的应用是后台应用,那么点击通知托盘即可启动您的应用。在这里,如果您想要点击通知,它应该引导您到特定页面,那么您必须在MainActivity中使用这段代码。

 if (getIntent().getExtras() != null) { 
        Intent intent = new Intent(MainActivity.this, NotificationActivity.class); 
        startActivity(intent); 
    } 

答案 1 :(得分:0)

检查您的启动器活动清单中是否有android:launchMode =“ singleTop”,并且您尝试读取onCreate()方法中的其他内容。

如果是这种情况,则只会创建该类的1个实例,因此,当用户在任务栏中触摸通知时活动处于后台时,调用的方法是onNewIntent()。在这种方法中,您可以通过以下方式获得额外内容并将其放入一般意图中:

@Override
public void onNewIntent(Intent intent){
    super.onNewIntent(intent);
    setIntent(intent);
}

然后onResume()可以使用getIntent()。getExtras()来访问其他内容。

编码愉快!

答案 2 :(得分:0)

当您的应用程序处于后台时,您将在启动程序活动中将所有数据捆绑在一起。要获取这些值,请确保覆盖启动器活动中的onNewIntent。就我而言,这是启动屏幕。

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (intent.getExtras() != null) {
            for (String key : intent.getExtras().keySet()) {
                Object value = intent.getExtras().get(key);
                Log.d("data ", "Key: " + key + " Value: " + value);
            }
        }
    }