应用程序被杀时,Android Firebase Push通知无效

时间:2017-07-07 11:27:41

标签: android firebase push-notification firebase-cloud-messaging

我已经创建了android应用程序来接收来自服务器的推送通知,但它无法正常工作。

当应用程序处于前台时,它可以完美运行。但是,当我们从系统托盘强制关闭应用程序时,它不起作用。

以下是我发给FCM的json代码。

{"to":"\/topics\/global","data":{"title":"Title","body":"Body"}}

下面是我的android功能

public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        Log.d("Msg", "Message received ["+remoteMessage+"]");

        Map<String, String> data = remoteMessage.getData();


        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
        db.addData(data.get("body"));

        Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
        resultIntent.putExtra("message", data.get("body"));

        showNotificationMessage(getApplicationContext(), data.get("title"), data.get("body"), "", resultIntent);
    }

以下是显示通知的代码。

private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) {
        notificationUtils = new NotificationUtils(context);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        notificationUtils.showNotificationMessage(title, message, timeStamp, intent);
    }

我找不到任何问题,任何人都可以帮助我。

非常感谢你。

编辑:

我已经通过更换手机解决了我的问题,在三星设备代码工作正常,但它与MI设备本身的问题。

我也有MI设备的解决方案,使用以下步骤启用该应用程序的自动启动。

转到设置 - &gt;权限 - &gt;自动开启。从那里,选择您想要接收通知的应用,并切换开关以将其打开。

2 个答案:

答案 0 :(得分:3)

根据doc,通知到达时有两种可能性。

  1. 应用程序位于前台。
  2. 您将在onMessageReceived中收到通知,您可以使用此方法获取数据。您需要在系统托盘中生成本地通知。

    处理通知

    您已完成相关提及的此代码。

    1. 应用程序在后台。
    2. 您会在系统托盘中收到通知。您无需在此处生成通知。您将在启动器活动的Intent中获取数据。

      处理通知

      以下是启动器活动的代码

      @Override
          protected void onCreate(@Nullable Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              Intent intent = getIntent();
              if (intent == null || intent.getExtras() == null) {
                  // your code to handle if there is no notification
              } else {
                  // handle notification
                  String body = intent.getStringExtra("body");
                  String title = intent.getStringExtra("title");
                  //TODO your code to open activity as per notification
              }
          }
      

      我做到了这一点,它对我有用。

答案 1 :(得分:0)

来自here

  

在后台,应用会在通知托盘中收到通知有效负载,并且仅在用户点击通知时处理数据有效负载。

来自this

  

这包括包含通知和数据有效负载的消息(以及从Notifications控制台发送的所有消息)。在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递

您可以从receive message tutorial

获得完整的帮助