如何从 Android 上的 deep link 应用程序恢复到启动器应用程序?

How to resume to the launcher app from the deep link app on Android?

所以我有两个应用,如下所述:

商家应用程序

  1. 用户选择他们想要的项目。
  2. 用户点击结帐按钮。这将通过 deep link
  3. 打开支付应用程序

支付应用

  1. 支付App获取商户App传过来的信息并显示出来
  2. 用户点击确认,用户将被要求刷卡以完成支付。
  3. 支付完成后,支付APP会将支付状态回传给商户APP,从而关闭自身。

问题

支付应用深陷支付应用(很少活动)后,如何从支付应用恢复到商户应用?因为目前,每次我尝试完成 activity,它都会转到支付应用程序的 Main Activity。

问题说明

Merchant App (Checkout Activity) -> Payment App (Confirm Activity) -> Payment App (Payment Activity) -> Payment App (Main Activity)

说明我正在努力实现的目标

Merchant App (Checkout Activity) -> Payment App (Confirm Activity) -> Payment App (Payment Activity) -> Merchant App (Checkout Activity) -> Merchant App (Status Activity)

代码

商家应用程序 - 结帐 Activity

Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);

//Verify if receiver app XXX this screen path
PackageManager packageManager = this.context.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
if (isIntentSafe) {
     ((Activity) context).startActivityForResult(intent, 2);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 2) {
        String message = data.getStringExtra("MESSAGE");
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }
}

支付应用-支付Activity

Intent intent = new Intent();
intent.putExtra("MESSAGE", "test");
setResult(2, intent);
finish();

请指教我哪里出错了?或者做这样的事情不是一个好习惯?

提前致谢

我的第一个想法是:

  • 在 Payment App 中使用临时 activity 调用 Payment Confirm Activity 清除 Payment App 之前的所有活动,并开始深入 link 到 Merchant App
  • 您应该使用另一个 Checkout Activity 来处理来自 Payment App 的结果,假设它是 Checkout Confirm Activity

因此流程将是:

Merchant App (Checkout Activity) -> Payment App (Confirm Activity) -> Payment App (Payment Activity) -> Payment App (Payment Confirm Activity) -> Merchant App (Checkout Confirm Activity) -> Merchant App (Status Activity)

步骤:

1/ PaymentActivity 将开始 PaymentConfirmActivity 使用此代码清除所有以前的活动:

Intent intent = new Intent(getApplicationContext(), PaymentConfirmActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

2/PaymentConfirmActivity一般为空白,它启动一个深度link到商户App通知结果,包括所有输入数据

3/ 这个CheckoutConfirmActivity 将处理上面link 的Payment App 的结果(在AndroidManifest 中配置的格式)。获取输入,获取结果并显示确认页面

已编辑:您可以通过应用 singleTop 启动模式重复使用商家应用程序 CheckoutActivity(不需要 CheckoutConfirmActivity)。找到一个博客 post hereCheckoutActivity 如果它仍然是 MerchantApp

中的最顶层 activity,则可以在 onNewIntent 中收到结果

4/ 像往常一样移动到 StatusActivity