我遇到此问题:如果我点击通知并关闭了我的应用,则会打开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
而不是我配置的那个。
答案 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。在其他情况下,如果用户只是打开了应用程序,那么字符串将为空,并且您不会重定向用户。