无法从FCM服务启动活动

时间:2016-09-23 20:33:26

标签: android firebase-cloud-messaging

我正在使用fcm在我的应用中发送通知。我想在用户点击通知时启动MsgViewActivity。现在,当应用程序处于前台时此功能正常,但当应用程序未运行时,只需将我带到主要活动。另请注意,我正在使用数据消息,因此即使在后台也会调用onMessageRecived。

这是我的FirebaseMessagingService.class代码

public class FirebaseMessagingSer extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher);

        Intent intent = new Intent(this, MsgViewActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

        if(remoteMessage.getData().size()>0) {
            String id = remoteMessage.getData().get("id");
            Bundle bundle = new Bundle();
            bundle.putString("id",id);
            intent.putExtras(bundle);
        }
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setContentTitle("FCM NOTIFICATION");
        notificationBuilder.setContentText(remoteMessage.getNotification().getBody());
        notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
        notificationBuilder.setLargeIcon(bmp);
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setContentIntent(pendingIntent);

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


    }
}

1 个答案:

答案 0 :(得分:1)

From your example you are using a message with both notification: {..} and data: {..} payload.

this means that your message is considered a notification-message and as result the method onMessageReceived() is executed only when the app is in foreground. (this explains your issue)

You have two solutions:

  1. use data only messages. Don't sent anything in the notification: {..} part of the message. You can set body and title as additional key-value in the data payload.

  2. you can use notification-messages with the parameter click_action="intent_to_activity2".
    You will also need to add the intent filter to your activity manifest.