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

React Native中PKAddPaymentPassViewController点击cancel无法dismiss问题

问题根因

点击cancel按钮无法关闭弹窗是以下两个常见原因导致:

  • 你创建的PKAddPaymentPassDelegate实例是局部变量,作用域结束后会被ARC自动回收,代理回调无法正常触发
  • 未完整实现PKAddPaymentPassViewControllerDelegate的必填方法,尤其是点击取消/完成后会触发的结束回调

解决方案

1. 全局持有代理实例

不要在弹出视图的逻辑中声明局部delegate变量,改为在你当前的原生模块类中添加属性持有,避免被提前释放:

// 原生模块类内部属性
private var paymentPassDelegate: PKAddPaymentPassDelegate?

2. 修改弹窗弹出逻辑

修改原有弹出代码,将代理实例赋值给全局属性持有,同时增加配置合法性判断:

self.paymentPassDelegate = PKAddPaymentPassDelegate()
guard let config = pkAddPaymentPassRequestConfiguration,
      let pkAddPaymentPassViewController = PKAddPaymentPassViewController(
          requestConfiguration: config,
          delegate: self.paymentPassDelegate!
      ) else {
    // 配置无效的容错处理
    return
}
DispatchQueue.main.async {
    RCTPresentedViewController()?.present(
        pkAddPaymentPassViewController,
        animated: true
    )
}

3. 完整实现代理方法

PKAddPaymentPassViewControllerDelegate有两个必填方法必须实现,其中addPaymentPassViewControllerDidFinish会在用户点击取消、添加成功、添加失败三种场景都触发,在该方法内手动执行dismiss即可:

extension PKAddPaymentPassDelegate: PKAddPaymentPassViewControllerDelegate {
    // 操作结束回调(含取消场景)
    func addPaymentPassViewController(
        _ controller: PKAddPaymentPassViewController,
        didFinishAdding pass: PKPaymentPass?,
        error: Error?
    ) {
        // 手动关闭弹窗
        controller.dismiss(animated: true)
        // 这里可以补充添加结果的回调逻辑到RN层
    }
    
    // 发卡请求生成回调,必须实现,否则会崩溃
    func addPaymentPassViewController(
        _ controller: PKAddPaymentPassViewController,
        generateRequestWithCertificateChain certificates: [Data],
        nonce: Data,
        nonceSignature: Data,
        completionHandler: @escaping (PKAddPaymentPassRequest) -> Void
    ) {
        // 此处实现你自己的业务逻辑:把证书、nonce等参数传给后端,生成PKAddPaymentPassRequest后调用completionHandler
    }
}

额外注意点

  • 确认主线程没有被其他耗时任务阻塞,导致dismiss动画无法正常执行
  • 检查pkAddPaymentPassRequestConfiguration的配置是否合法,配置错误也可能导致视图生命周期异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:27:02