React Native Expo Android端Stripe PaymentSheet初始化失败问题
React Native Expo集成Stripe Android端初始化报错解决方案
问题核心
Android端Stripe SDK对初始化配置的要求比iOS更严格,你遇到的PaymentConfiguration was not initialized报错,主要是URL Scheme配置错误、初始化时机不当或Expo Android配置缺失导致的。
具体解决方案
1. 修正URL Scheme配置
你在initStripe中使用的"https://website.com/"是HTTP协议地址,Android端要求使用自定义协议的URL Scheme,需和initPaymentSheet中的returnURL保持一致:
useEffect(() => { const setupStripe = async () => { await initStripe({ publishableKey: api.stripe_key, urlScheme: "app://stripe-redirect", // 与returnURL匹配 }); }; setupStripe(); }, []);
2. 确保Stripe初始化完成后再调用PaymentSheet
initStripe是异步操作,Android上可能出现后续代码先执行的情况,添加状态标记初始化完成:
const [stripeReady, setStripeReady] = useState(false); useEffect(() => { const setupStripe = async () => { await initStripe({ publishableKey: api.stripe_key, urlScheme: "app://stripe-redirect", }); setStripeReady(true); }; setupStripe(); }, []); const initializePaymentSheet = async (fee: number) => { if (!stripeReady) { console.log("Stripe初始化未完成"); return; } // 原有初始化逻辑... };
3. 补充Expo Android Intent Filter配置
在app.json中添加Intent Filter,让Android正确识别Stripe的返回URL:
{ "expo": { "android": { "intentFilters": [ { "action": "VIEW", "data": [ { "scheme": "app", "host": "stripe-redirect" } ], "category": ["BROWSABLE", "DEFAULT"] } ] } } }
4. 验证依赖版本兼容性
Expo 52推荐搭配@stripe/stripe-react-native 0.39.x及以上版本,你当前使用的0.38.6可能存在兼容问题,升级依赖:
npx expo install @stripe/stripe-react-native@latest
完成以上配置后,重新构建Android项目(npx expo run:android)即可解决报错。
内容的提问来源于stack exchange,提问作者Ankur
相关产品推荐
相关产品推荐

