单击FCM通知会打开当前已关闭的活动而非目标活动

时间:2017-09-13 10:27:18

标签: android firebase firebase-cloud-messaging firebase-notifications

这是我的代码,当我的应用程序在前台运行时会打开目标活动但是当应用程序关闭或在后台时,它不会打开目标活动,请帮我解决此问题

我希望通过点击通知即可开启目标活动,即使应用正在运行/关闭。

 public void onMessageReceived(RemoteMessage remoteMessage) {

    session = new Session(this);
  //  if (session.getBscloggedin() || session.getAdploggedin()) {
       // Log.d(TAG, "FROM:" + remoteMessage.getFrom());

        //Check if the message contains data
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data: " + remoteMessage.getData());
        }

        //Check if the message contains notification

        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Mesage body:" + remoteMessage.getNotification().getBody());
            sendNotification(remoteMessage.getNotification().getBody());
        }
    }


/**
 * Dispay the notification
 * @param body
 */


private void sendNotification(String body) {

    //for CS101 announcement notification
    if (body.contains("CS101")) {
        Intent intent = new Intent(this, CS101noti.class);
        intent.putExtra("body", body);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0/*Request code*/, intent, 0);
        //Set sound of notifica tion
        Uri notificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        NotificationCompat.Builder notifiBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("mine")
                .setContentText(body)
                .setAutoCancel(true)
                .setSound(notificationSound)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0 /*ID of notification*/, notifiBuilder.build());
    }

4 个答案:

答案 0 :(得分:0)

使用您发送推送通知的后端的“ click_action ”属性。在该属性值中,您必须传递活动的完全限定类路径,当您单击该通知时应该打开该路径。有关更多参考,请参阅handling firebase push

答案 1 :(得分:0)

Intent intent = new Intent(this, CS101noti.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
....

答案 2 :(得分:0)

在后台收到通知消息时,

onMessageReceived回调未被调用。如果您在后台收到此类消息,则只能在启动器活动中处理该消息。 enter image description here

解决方案是更改后端,使其仅发送数据消息并在内部处理它们,或在启动器活动中写入一些路由代码。

答案 3 :(得分:0)

请求代码应该是唯一的。

一般来说,人们与我们分享示例,例如给出请求代码0(零)。我有时是复制/粘贴开发人员之一。但最近我使用这条线路时遇到了错误。

PendingIntent.getActivity(myContext, 0, myIntent, 0);

每当应用收到通知时,意图活动会因requestCode而接收旧数据。这是关于该方法的文档。

  

返回与给定匹配的现有或新PendingIntent   参数。

因此第二个参数(requestCode)应该是intent唯一的。如果您为每个通知使用相同的请求代码,则活动将接收旧数据。所以你的requestCode应该是唯一的。

还有另一种解决方案。使用PendingIntent.FLAG_UPDATE_CURRENT作为标志。医生说:

  

如果描述的PendingIntent已经存在,那么请保留它   用这个新的Intent替换它的额外数据。