FCM推送通知在前台和后台工作,但在应用关闭时无效

时间:2017-07-11 10:21:12

标签: android ios

我已经实施了Firebase,但不幸的是,通知仅在app位于Foreground或Background时才有效,但在应用关闭时无法收到任何通知。我尝试在网上冲浪,但无法获得任何结果。 有没有办法让应用程序在关闭后保持活动状态? 如果是,我认为这将有助于接收通知。任何有用的建议都是受理的。感谢

2 个答案:

答案 0 :(得分:0)

我做的一件事是我不依赖于通知响应,我宁愿传递数据对象并自己制作自定义通知。

以下是可以帮助您的代码,因为即使应用程序处于打开状态和关闭状态,我们也可以访问数据对象:

Map<String, String> dataMap = remoteMessage.getData();
String notif = dataMap.get("title");

然后我使用此功能发出通知

 private void notificationManager(Context context, String message) {

    try {
        long when = System.currentTimeMillis();

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        Log.v("message", "," + message);

        Intent notificationIntent = new Intent(context, SplashActivity.class);


        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        builder.setAutoCancel(true);
        builder.setContentTitle(context.getString(R.string.app_name));
        builder.setStyle(new NotificationCompat.BigTextStyle().bigText(message));
        builder.setContentText(message);
        builder.setTicker(message);
        builder.setLights(Color.GREEN, 500, 500);
        builder.setWhen(when);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setContentIntent(intent);


        Notification notification = builder.build();
        notification.ledARGB = 0xFFff0000;
        notification.flags = Notification.FLAG_SHOW_LIGHTS;
        notification.ledOnMS = 100;
        notification.ledOffMS = 100;
        notificationManager.notify(1, notification);

        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
        wl.acquire(15000);

    } catch (Exception e) {
        e.printStackTrace();
    }

}

希望这有帮助。

答案 1 :(得分:0)

FCM有两种消息传递服务

  1. 显示消息
  2. 数据信息
  3. 可能您正在使用显示消息。您应该使用数据消息而不是显示消息。应用关闭时,显示消息功能无法正常工作。