如何在销毁应用时使用firebase显示推送通知

时间:2017-06-15 19:07:53

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

我有一个应用程序,它使用firebase消息传递服务来接收推送通知。

我已经搜索了使用"通知"之间的差异或"数据"将通知信息发送给FCM发送服务器时。

当应用被销毁时,我的通知不会显示,只有当它在前台或后台时才会显示。

我需要这样做,以便我的服务器偶尔会每隔一段时间(大约每周两次)向设备发送推送通知,但应用程序应该能够在关闭时显示通知。

知道我怎么能这样做吗?这是我发送给FCM发送服务器的通知json编码字符串:

{
"to":"d_kQKDkq5V4:APA91bG4hIyqbr2a_24nUIe6jVbySS90FMnVKwwuTfG1dV3OooeAc_555XkB2e_h_oWzEOMde8uIt2ESvv_Thl1J1sEXDHWPsLCE7EdMXkZ_AS6xlVq8uJIjVojz1WPxqiUjWZm65Ypf",
"data":{
            "title":"App in background again",
            "body":"asdsad"
       }
}

因此,当应用在背景或前景时会显示通知,但在销毁时不会显示通知。我如何制作它以便它可以在应用程序被销毁时仍然收到并显示通知?

这是我的onMessageRecieved()方法:

public void onMessageReceived(RemoteMessage remoteMessage) {
        /*String title = remoteMessage.getNotification().getTitle();
        String message = remoteMessage.getNotification().getBody();
          */
        Log.e("REG_TOKEN",remoteMessage.getData().get("title"));
        Map<String,String> data = remoteMessage.getData();
        String title = data.get("title");
        String message = data.get("body");
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setContentTitle(title)
                .setContentText(message)
                .setSmallIcon(R.mipmap.ic_launcher_round)
                .setAutoCancel(true)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());


    }

2 个答案:

答案 0 :(得分:0)

我看到这种方法不适用于自定义OS手机。

答案 1 :(得分:0)

当您收到消息时,您所看到的行为可能是由于您的设备处于打盹或待机模式。由于您要发送数据信息,如果您希望立即唤醒设备以接收信息,则需要按照the documentation中的说明高优先级发送设备:

  

默认情况下,通知消息以高优先级发送,并且   数据消息以正常优先级发送。普通优先级优化   客户端应用程序的电池消耗,应该使用,除非   需要立即交货。对于具有正常优先级的消息,   应用程序可能会收到未指定延迟的邮件。

这是您的消息的一行补充:

{
"to": "d_kQKDkq5V4:APA91bG4hIy...qiUjWZm65Ypf",
"priority": "high",
"data":{
            "title":"App in background again",
            "body":"asdsad"
       }
}

如果发送具有高优先级的消息没有帮助,那么您可能正在测试其中一种型号的手机,这些手机会以某种方式将应用程序置于Stopped State内(例如从最近的任务清单)。有关详细信息,请参阅this answer