无法通过FCM

时间:2017-08-18 14:21:49

标签: android firebase

我遇到此问题:如果我点击通知并关闭了我的应用,则会打开HomeActivity而不是请求的。{/ p>

我提出这样的通知:

Intent intent = new Intent(context, ArticleActivity_.class);
intent.putExtra(ArticleActivity.KEY_ARTICLE_ID, articleId);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 , intent,
            PendingIntent.FLAG_UPDATE_CURRENT);


Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(notification.getTitle())
            .setContentText(notification.getBody())
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

Notification n = notificationBuilder.build();
n.flags |= Notification.FLAG_AUTO_CANCEL;

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

notificationManager.notify(0 , n);

如果打开应用程序,一切正常。但如果我关闭它,在点击通知后,将打开HomeActivity而不是我配置的那个。

1 个答案:

答案 0 :(得分:1)

您遇到此问题,因为这就是FCM的工作原理。推送通知有两种类型。第一种类型是"通知"第二种类型是"数据"。两者都可以显示为JSON有效负载:

"notification": {
    //key values
}

"data": {
    //your custom key values
}

第三种类型是两者的组合。

"通知"当应用程序不在前台时,type将创建具有默认行为的默认可视通知。当应用程序打开时,它将执行onMessageReceived内的任何写入。第二种类型"数据"将始终执行您在onMessageReceived内编码的内容。

从Firebase网络控制台,您可以发送"通知"类型或组合类型。仅用于发送"数据"您需要从Firebase功能或服务器(符合FCM要求)发送它。

您可以采取一些措施来实现目标。可以从Firebase Web控制台发送的组合有效负载包含" notification"和"数据"。 "数据"用户单击通知后可以使用键值。该信息可作为打开默认启动器Activity的意图的额外数据,因此您可以更改您的活动。

在您的启动器活动中,添加以下内容:

String notification = getIntent().getStringExtra("your-key");
if (notification != null) {
    startActivity(new Intent(this, YourActivity.class));
}

通过这种方式,您可以验证是否因为单击了默认通知而打开了Activity,并且始终是String,因为push FCM中的有效负载必须始终为String。在其他情况下,如果用户只是打开了应用程序,那么字符串将为空,并且您不会重定向用户。