You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin实现支付完成后自动关闭Clover Sales App返回自研应用

实现Clover Sales App交易完成后自动返回自研应用的方案

要实现交易完成后从Clover Sales App自动返回自研应用,核心是利用Android的Activity回调机制,并遵循Clover的Intent交互规范,具体步骤如下:

1. 替换startActivity为Activity Result API

由于startActivityForResult已被废弃,推荐使用Activity Result API来接收Clover的返回结果,确保交易状态变更时能触发回调。

注册Activity Result回调

在你的主Activity中注册回调处理器:

private val cloverPaymentResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    when (result.resultCode) {
        Activity.RESULT_OK -> {
            // 交易成功完成,可在此处理后续逻辑(如更新订单状态)
            // 此时Clover会自动关闭,自研应用回到前台
        }
        Activity.RESULT_CANCELED -> {
            // 用户取消交易,处理取消逻辑
        }
        else -> {
            // 处理其他异常状态
            Log.e("CloverSales", "交易返回未知状态:${result.resultCode}")
        }
    }
}

2. 重构Clover支付Intent的构造逻辑

不要直接启动Clover的主Activity,而是使用Clover官方定义的支付Action(Intents.ACTION_PAY),并明确指定回调目标,确保Clover能正确返回你的应用:

private fun openCloverSalesApp(amountInCents: Long) {
    val packageManager: PackageManager = packageManager
    val payIntent = Intent(Intents.ACTION_PAY).apply {
        // 指定Clover Sales App的包名,避免Intent被其他应用拦截
        setPackage(CLOVER_SALES_PACKAGE)
        // 传递支付参数
        putExtra(Intents.EXTRA_AMOUNT, amountInCents)
        putExtra("CustomerId", customerId.toString())
        // 指定回调的自研应用Activity,确保返回目标正确
        component = ComponentName(packageName, YourMainActivity::class.java.name)
        // 设置Flags,避免创建重复的Activity实例
        flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
    }

    if (payIntent.resolveActivity(packageManager) != null) {
        cloverPaymentResultLauncher.launch(payIntent)
    } else {
        Log.e("CloverSales", "未安装Clover Sales App")
    }
}

3. 配置Manifest文件,允许Clover回调

在自研应用的AndroidManifest.xml中,给接收回调的Activity添加Intent Filter,并设置android:exported="true",确保Clover能启动该Activity:

<activity
    android:name=".YourMainActivity"
    android:exported="true">
    <!-- 其他已有的intent-filter -->
    <intent-filter>
        <action android:name="com.clover.intent.action.PAY_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

关键注意事项

  • 确认Clover版本兼容性:部分旧版Clover可能需要调整Intent参数,需匹配官方规范使用。
  • 处理返回数据:可通过result.data?.getStringExtra(Intents.EXTRA_TRANSACTION_ID)获取交易ID等详情,用于后续业务逻辑。
  • 避免多实例:通过FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP确保回到自研应用时使用已存在的Activity实例,避免栈混乱。

内容的提问来源于stack exchange,提问作者Priya Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:12:46