在 Firebase 通知后开始为 activity 构建任务堆栈

Building a task stack for activity started after Firebase Notification

使用 Firebase Cloud Messaging,当应用程序在后台并且有消息到达时,消息会进入系统托盘。当用户点击通知时,应用程序启动,启动器 activity 获取 Intent.

中的消息数据

在我的例子中,这个通知是关于一些新结果的,所以按下时,我想开始 ResultsActivity

为了实现这一点,我在 LauncherActivityOnStart 中执行此操作 :

Intent intent = getIntent();
String searchId = intent.getStringExtra("search_id");
if(searchId != null){
    Intent resultsIntent = new Intent(LauncherActivity.this, ResultsActivity.class);
    resultsIntent.putExtra(ResultsActivity.SEARCH_ID_EXTRA, searchId);
    startActivity(resultsIntent);
}

这一切都很好。

现在的问题是 单击应用栏上的 "up" 箭头时,应用不会转到清单中定义的父级 activity(不是启动器 activity)而是启动器 activity。 这并不奇怪,因为 ResultActivity 是从LauncherActivity,但这不是想要的行为。 想要的行为是将后退箭头发送给父级 activity,恰好是 MainActivity

我知道这里有 TaskStackBuilder for that kind of stuff, but I don't know how I can apply that pattern 我的案例,我从另一个 activity 而不是从某些 Notification Builder 启动 activity "normally"。

这里TaskStackBuilder是正确的解决方案吗?如果是这样,我如何更改上面的代码以使用它?如果不是,正确的解决方案是什么?

我最后做的是在服务器端,使用 firebase 云消息 管理员,而不是包括 firebase_admin.messaging.Notification object in the firebase_admin.messaging.Message object I am then sending, I just put the notification title and text in the Message's data, and then build a notification by myself normally in MyFirebaseMessagingService. Since I'm now building the notification by myself I can add the TaskStackBuilder normally.

我想这并不能真正回答在不使用 Notification.Builder 时如何添加返回堆栈的问题,但无论如何它可能是一个更好的解决方案。