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

NativeScript实现Apple Pay时payment变量为空问题求助

解决NativeScript中Apple Pay授权时payment变量为空的问题

我来帮你排查这个困扰你的问题——不管是沙箱测试还是TestFlight环境下,paymentAuthorizationViewControllerDidAuthorizePaymentHandler里的payment变量都为空,结合你的代码来看,主要有几个关键问题需要调整:

1. Delegate方法签名不匹配(核心问题)

Apple的PKPaymentAuthorizationViewControllerDelegate协议里,授权完成的正确方法签名是:

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus status))completion;

你代码里用的paymentAuthorizationViewControllerDidAuthorizePaymentHandler并不是系统能识别的方法名,NativeScript对Objective-C方法的绑定要求严格匹配命名规则(去掉冒号,将每个分段的首字母大写),所以系统根本不会触发这个回调,自然payment参数为空。

修正方法:把方法名改成正确的paymentAuthorizationViewControllerDidAuthorizePaymentCompletion,确保参数数量和类型完全对应:

PKPaymentAuthorizationViewControllerDelegateIml.prototype.paymentAuthorizationViewControllerDidAuthorizePaymentCompletion = function(controller, payment, completion){
    console.log('authorization', payment.token?.paymentData) // 用可选链避免空值报错
    completion(PKPaymentAuthorizationStatus.Success)
}

2. Delegate对象被垃圾回收

你创建的listener是局部变量,NativeScript的垃圾回收机制可能会在回调触发前就回收这个对象,导致Delegate失效,无法传递payment参数。

修正方法:把listener保存到组件的实例属性中,避免被GC回收:

methods:{
    applePay(){
        // ... 其他配置代码 ...
        // 保存listener到实例属性
        this.applePayListener = PKPaymentAuthorizationViewControllerDelegateIml.new();
        let applePayController = new PKPaymentAuthorizationViewController(paymentRequest);
        applePayController.delegate = this.applePayListener;
        // ... 后续present代码 ...
    }
}

3. 额外的配置检查

除了代码问题,还要确保这些配置项正确:

  • 确认ApplePaySwagMerchantID和你在Apple开发者后台创建的Merchant ID完全一致,并且已经关联到你的App ID,开启了Apple Pay服务。
  • 沙箱测试时,必须使用Apple官方提供的沙箱测试账号和对应的沙箱测试信用卡,不能用真实账号。
  • TestFlight环境下,要确保Merchant ID已经配置了生产环境的Apple Pay证书,并且你的真实信用卡支持Apple Pay(部分地区或卡种可能有限制)。

按照以上步骤调整后,应该就能正常获取到payment参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:40:32