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

Flutter集成square_in_app_payments后上架Play Store完成卡片输入时崩溃

问题原因定位及修复方案

1. 最可能诱因:R8/ProGuard混淆规则缺失

因为只有Play Store渠道的Release包复现问题,Debug包正常,90%以上的概率是Release构建时的混淆操作误删除了Square支付SDK的相关类,导致调用SDK方法时触发类找不到异常直接闪退。
修复步骤:

  • 打开项目下的android/app/proguard-rules.pro文件,添加以下Square SDK专属混淆保留规则:
-keep class com.squareup.sdk.inapppayments.** { *; }
-keep interface com.squareup.sdk.inapppayments.** { *; }
-dontwarn com.squareup.sdk.inapppayments.**
-keep class sqip.flutter.** { *; }
-keep interface sqip.flutter.** { *; }
  • 确认android/app/build.gradle中Release构建配置开启了混淆规则加载:
android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

重新构建Release包测试即可。

2. 次常见诱因:环境配置不匹配

  • 检查上传Play Store的Release包使用的squareApplicationId是否为Square后台申请的生产环境ID,不要混用测试环境ID,否则会触发SDK初始化异常。
  • 确认android/app/build.gradle中的minSdkVersion >= 21,Square In-App Payments SDK最低支持Android 5.0,低于该版本会触发兼容性闪退。

3. 代码逻辑潜在问题

你当前的_cardNonceRequestSuccess方法执行顺序存在风险:先调用InAppPayments.completeCardEntry关闭了卡片输入页,再执行setState操作,如果当前页面已经随路由销毁,会触发上下文非法异常。
修复建议调整执行顺序:

void _cardNonceRequestSuccess(CardDetails result) {
    print('Testing nonce');
    // 先处理业务逻辑再关闭卡片页
    setState(() {
      nonce = result.nonce;
    });
    print(result.nonce);

    InAppPayments.completeCardEntry(
      onCardEntryComplete: _cardEntryComplete,
    );
}

另外确认squareTwoButtonPopup传入的context是当前活跃页面的合法上下文,不要使用已经销毁的页面上下文弹窗。


内容的提问来源于stack exchange,提问作者Doing Things Occasionally

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:45:03