uni-app 苹果支付部分设备上闪退

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app 苹果支付部分设备上闪退

开发环境 版本号 项目创建方式
Windows macOS 14 HBuilderX

产品分类:
uniapp/App

PC开发环境操作系统:
Windows

HBuilderX类型:
正式

HBuilderX版本号:
4.43

手机系统:
iOS

手机系统版本号:
iOS 18

手机厂商:
苹果

手机机型:
iPad Air 5

页面类型:
vue

vue版本:
vue2

打包方式:
云端

项目创建方式:
HBuilderX

App下载地址或H5网址:
1

操作步骤:
1

预期结果:
1

实际结果:
1

bug描述:
手机上边可以支付成功

  • Device type: iPad Air (5th generation)
  • OS version: iPadOS 18.2
    和 Ipad 9 上边支付会闪退

附件里面是苹果应用市场给错误日志

crashlog-1E4014F7-3041-4D5F-9558-B22CE6512808.txt

crashlog-6C66BFC3-A326-43F9-BBD1-963C8595FCE6.txt

crashlog-DA93AABE-CA55-4BA3-A35A-D66F49028CD1.txt


8 回复

我这边也遇到类似情况,发现是 传的值 username 必须传 字符串,不能传数字 , 在低版本没问题,高版本 iOS 会 crash


看你错误日志里 “ “exceptionReason” : {“arguments”:[“NSDecimalNumber”,“length”,“0x301b05b60”],“format_string”:"-[%s %s]: unrecognized selector sent to instance ” 应该是同样的问题

相同系统版本的手机测试有问题吗 提供一下能复现的示例吧 我这边用iOS18.2的iphone测试未复现

uni.requestPayment({ provider: ‘appleiap’, orderInfo: { } })

orderInfo 里的 username 传数字 会导致 crash

回复 1***@163.com: 在什么设备上测试的 我用iphoneXR iOS18.2 username传数字没有复现

回复 1***@163.com: 有复现示例吗 可以私信我发我一下示例

在处理uni-app中集成苹果支付(Apple Pay)时遇到的闪退问题,通常涉及几个关键方面:插件的兼容性、代码实现细节、以及设备特定的系统或硬件问题。由于无法直接提供完整的解决方案(因为闪退可能由多种原因引起),我将提供一个基本的Apple Pay集成示例代码,并强调一些调试和排查问题的方向。

uni-app Apple Pay 集成示例

首先,确保你的项目已经配置了必要的Apple Pay权限和证书。然后,在uni-app中使用plus.payment对象来调用Apple Pay。

// 检查设备是否支持Apple Pay
if (window.ApplePaySession && plus.payment) {
    // 创建Apple Pay请求
    const request = new ApplePaySession({
        version: 3,
        countryCode: 'US',
        currencyCode: 'USD',
        merchantIdentifier: 'merchant.com.example',
        supportedNetworks: ['visa', 'masterCard', 'amex'],
        billingContactFields: ['email', 'phoneNumber'],
        shippingContactFields: ['name', 'postalAddress', 'phoneNumber', 'email'],
        requiredBillingContactFields: ['postalAddress'],
        requiredShippingContactFields: ['postalAddress']
    });

    request.onvalidatemerchant = (event) => {
        // 处理有效的商家验证
        console.log('Merchant is valid:', event);
    };

    request.onpaymentauthorized = (event) => {
        // 处理支付授权
        const paymentData = event.paymentData;
        // 在这里发送paymentData到服务器进行支付处理
        console.log('Payment authorized:', paymentData);
        request.completePayment(ApplePaySession.STATUS_SUCCESS);
    };

    request.onpaymentmethodselected = (event) => {
        // 显示支付界面
        const total = new PaymentSummaryItem({
            label: 'Total',
            amount: '10.00'
        });
        request.presentPayment({
            total: total,
            items: [] // 根据需要添加商品详情
        });
    };

    // 开始支付会话
    request.begin();
} else {
    console.error('Apple Pay is not supported on this device.');
}

调试和排查方向

  1. 日志输出:增加更多的console.log输出,尤其是在支付流程的关键节点,这有助于确定闪退发生的具体位置。
  2. 错误捕获:使用try-catch块包裹支付相关的代码,捕获并记录异常信息。
  3. 设备兼容性:检查闪退是否仅发生在特定iOS版本或设备上,这可能与系统的bug或硬件兼容性问题有关。
  4. 内存管理:检查应用是否在支付流程中消耗了大量内存,导致系统强制退出。
  5. Apple开发者论坛:访问Apple开发者论坛,搜索是否有其他开发者遇到类似问题,并查看他们的解决方案。

通过这些步骤,你应该能够更接近问题的根源,并找到相应的解决方案。

回到顶部