如何从 Android 上的 deep link 应用程序恢复到启动器应用程序?
How to resume to the launcher app from the deep link app on Android?
所以我有两个应用,如下所述:
商家应用程序
- 用户选择他们想要的项目。
- 用户点击结帐按钮。这将通过 deep link
打开支付应用程序
支付应用
- 支付App获取商户App传过来的信息并显示出来
- 用户点击确认,用户将被要求刷卡以完成支付。
- 支付完成后,支付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 here。 CheckoutActivity
如果它仍然是 MerchantApp
中的最顶层 activity,则可以在 onNewIntent
中收到结果
4/ 像往常一样移动到 StatusActivity
所以我有两个应用,如下所述:
商家应用程序
- 用户选择他们想要的项目。
- 用户点击结帐按钮。这将通过 deep link 打开支付应用程序
支付应用
- 支付App获取商户App传过来的信息并显示出来
- 用户点击确认,用户将被要求刷卡以完成支付。
- 支付完成后,支付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 here。 CheckoutActivity
如果它仍然是 MerchantApp
onNewIntent
中收到结果
4/ 像往常一样移动到 StatusActivity