Android端Stripe PaymentSheet回调未触发问题求助
Android Stripe PaymentSheet 回调未触发排查方案
以下是针对你遇到的「同代码下一个项目PaymentSheet回调正常,另一个项目回调完全不触发(后端支付已完成)」问题的排查方向:
1. 检查Activity生命周期与实例持有
- 确保
mPaymentSheet是Activity的全局成员变量,而非局部变量(避免被GC回收),且在onCreate中初始化,不要在异步请求回调里重复创建。 - 对比两个项目的Activity配置:若异常项目的Activity未配置
android:configChanges处理屏幕旋转等变更,支付过程中Activity被销毁重建会导致回调丢失。可添加android:configChanges="orientation|screenSize|smallestScreenSize"到对应Activity的Manifest配置中。
2. 对齐Stripe SDK版本
异常项目可能使用了存在回调bug的旧版本SDK,直接将其Stripe依赖版本修改为与正常项目完全一致,再测试回调是否恢复。
3. 检查Activity启动模式
若异常项目的Activity使用了singleInstance/singleTask等特殊启动模式,会干扰PaymentSheet的结果回调传递。暂时将启动模式改为standard,验证是否解决问题。
4. 排查Activity结果拦截逻辑
- 检查异常项目中是否重写了
onActivityResult但未调用super.onActivityResult,这会阻断Stripe的回调传递。 - 排查是否有第三方框架(如路由、权限库)拦截了Activity结果,需确保Stripe的结果能正常传递到目标Activity。
5. 验证初始化上下文与混淆规则
- 初始化PaymentSheet时传入的上下文必须是当前活跃的Activity实例,避免传入Application Context或已销毁的Activity引用。
- 检查异常项目的ProGuard/R8混淆规则,确保未混淆Stripe相关类:
-keep class com.stripe.android.** { *; } -keep class com.stripe.android.view.** { *; }
6. 开启详细日志排查
手动开启Stripe SDK的详细日志,查看是否有隐藏的错误信息:
// 在Application初始化或PaymentSheet初始化前调用 Stripe.api.setLogLevel(java.util.logging.Level.VERBOSE);
额外验证步骤
- 暂时移除Google Pay配置,使用最基础的PaymentSheet参数发起支付,排除Google Pay相关配置冲突。
- 测试在异常项目中创建一个全新的空白Activity,仅实现PaymentSheet逻辑,看回调是否触发,排查原有Activity的其他代码干扰。
内容的提问来源于stack exchange,提问作者AndreiBogdan
相关产品推荐
相关产品推荐

