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

Google Pay银行卡识别库生产环境崩溃问题求助

Google Pay生产环境信用卡扫描功能崩溃问题

我集成了Google Pay库实现借记卡/信用卡(卡号、有效期、CVV)信息扫描功能,QA环境运行正常,但切换到WalletConstants.ENVIRONMENT_PRODUCTION生产环境后出现崩溃。

相关代码

private fun createPaymentsClient(activity: Activity): PaymentsClient {
    val walletOptions = Wallet.WalletOptions.Builder()
                       .setEnvironment(WalletConstants.ENVIRONMENT_PRODUCTION)
                       .build()
    return Wallet.getPaymentsClient(activity, walletOptions)
}

崩溃日志

FATAL EXCEPTION: main
Process: com.dhl.pay.google, PID: 5219
kotlin.UninitializedPropertyAccessException: lateinit property cardRecognitionPendingIntent has not been initialized
at com.dhl.pay.google.MainActivity.startPaymentCardOcr(MainActivity.kt:80)
at com.dhl.pay.google.MainActivity.onCreate$lambda$0(MainActivity.kt:38)
at com.dhl.pay.google.MainActivity.$r8$lambda$9ZIx61lkQCSM4mTsrQGymHGsZ_g(Unknown Source:0)
at com.dhl.pay.google.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7488)
at android.view.View.performClickInternal(View.java:7464)
at android.view.View.access$3700(View.java:841)
at android.view.View$PerformClick.run(View.java:28911)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:344)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)

解决方案

核心原因

生产环境下Google Pay对配置校验远严格于QA环境,卡片识别所需的PendingIntent初始化失败,导致lateinit变量未赋值就被调用,触发UninitializedPropertyAccessException。

修复步骤

  1. 验证生产环境配置合法性

    • 确认应用已在Google Pay Console完成生产环境注册,绑定的包名、签名证书指纹与当前构建完全一致。
    • 检查AndroidManifest.xml中是否正确声明Google Pay相关配置:
      <meta-data
          android:name="com.google.android.gms.wallet.api.enabled"
          android:value="true" />
      <!-- 确保已添加正确的生产环境API密钥 -->
      <meta-data
          android:name="com.google.android.geo.API_KEY"
          android:value="YOUR_PRODUCTION_API_KEY" />
      
  2. 完善PendingIntent初始化与调用逻辑

    • 替换lateinit变量为可空类型,避免未初始化访问:
      private var cardRecognitionPendingIntent: PendingIntent? = null
      
      private fun initCardRecognitionIntent() {
          val request = CardRecognitionRequest.newBuilder().build()
          paymentsClient.createCardRecognitionPendingIntent(request)
              .addOnSuccessListener { intent ->
                  cardRecognitionPendingIntent = intent
              }
              .addOnFailureListener { e ->
                  Log.e("GooglePay", "PendingIntent初始化失败", e)
                  // 添加失败提示或降级到手动输入的逻辑
              }
      }
      
    • 在触发扫描前增加非空校验:
      // 扫描按钮点击事件
      scanButton.setOnClickListener {
          cardRecognitionPendingIntent?.let { intent ->
              startIntentSenderForResult(intent.intentSender, REQUEST_CARD_OCR, null, 0, 0, 0)
          } ?: run {
              Toast.makeText(this, "卡片扫描功能暂不可用,请手动输入", Toast.LENGTH_SHORT).show()
          }
      }
      
  3. 生产环境调试建议

    • 使用Google Pay官方提供的生产环境测试卡片进行验证,避免无效卡片导致初始化失败。
    • 查看Logcat中Google Pay相关的错误日志,通常会给出初始化失败的具体原因(如签名不匹配、权限缺失等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:31:15