1

我正在使用Firebase向我的应用发送推送通知,并希望将一些值保存到sharedpreferences。它的工作完美时,应用程序是前景,但它不保存应用程序在后台时的值。 我的代码如下所示:FCM通知问题

@Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Log.e("Remotemessage",remoteMessage.toString()); 

     String Heading = remoteMessage.getNotification().getTitle(); 
     String message = remoteMessage.getNotification().getBody(); 
     Map<String, String> data = remoteMessage.getData(); 
     Log.e("Firebase notification ", " KEY1"); 
     sessionManager=new SessionManager(this); 

     Log.e("Firebase notification ", " KEY"+data.get("click_action")); 
     Log.e("Firebase notification ", " KEY new"+data.get("key")); 
     int studentid= Integer.parseInt(data.get("student_id")); 
     Log.e("STUDENT ID",""+studentid); 
     if(studentid!=0) 
     { 
      sessionManager.saveStudentId(studentid); 

     } 
} 

但在通知显示这两种情况。如何解决这个问题?

+0

当应用程序处于后台时,该文档还提到了接收通知的以下情况:在这些情况下,通知被传递到设备的系统托盘,并且数据有效载荷以附加意图你的发射器活动。 –

+0

''替换sessionManager =新的SessionManager(this);'用'sessionManager = new SessionManager(getBaseContext());' –

+0

从服务器发送通知时只使用数据字段。 –

回答

1

从您的帖子开始,我假设您发送的邮件中包含notificationdata邮件。有关更多详细信息,请参阅Message Types

Handling Messages for Android文档可以看出,当应用程序在后台发送包含消息类型的有效载荷时,消息(notification数据)将由Android系统托盘处理。

有两两件事你可以做:

  1. 发送data - 只有消息负载,使onMessageReceived()将被处理的消息,无论您的应用是否在前台或后台。

  2. 在用户点击Android系统托盘中的通知后,执行处理以获取您的data负载中的详细信息。看到我的回答here

+0

如果用户不点击通知并清除通知,该怎么办? –

+0

@MayuraDevani然后它将不会进行该活动。这本身就是*用户的选择*。 –

+0

是的,您的信息是正确的,但在@Saneness的案例中将数据保存在共享偏好设置中不起作用 –