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

基于Expo的CRNA模板集成react-native-payments的步骤与无原生模块方案问询

在Expo CRNA项目中集成react-native-payments的步骤及原生配置疑问解答

嘿,我来帮你梳理清楚这个问题,分两部分来解答:

一、集成react-native-payments的具体步骤

首先要明确CRNA(Create React Native App)分为两种状态:未 eject 的纯Expo托管工作流和已 eject 的裸工作流,两者的集成流程差异很大:

1. 未 eject 的纯Expo托管工作流

纯Expo项目不允许直接修改iOS/Android原生代码,而react-native-payments依赖原生端的支付能力配置,所以这种情况下你有两个选择:

  • 方案一:eject到裸工作流,生成iOS和Android原生目录(和react-native init创建的项目结构一致),然后按照普通RN项目的流程配置;
  • 方案二:改用Expo官方提供的支付库(比如expo-apple-pay、expo-stripe),这些库已经封装好了原生配置,无需你手动修改原生代码,直接在JS层调用即可。

2. 已 eject 的裸工作流(已有原生目录)

这种情况和普通react-native init创建的项目流程完全一致,步骤如下:

  • 安装依赖:执行 yarn add react-native-payments 或 npm install react-native-payments --save
  • 原生模块链接:如果你的RN版本低于0.60,需要手动执行 react-native link react-native-payments;RN 0.60+版本会自动完成链接,无需额外操作
  • iOS端Apple Pay配置:
    • 打开Xcode中的iOS项目,进入Signing & Capabilities面板,添加Apple Pay能力,并关联你在Apple开发者后台创建的Merchant ID;
    • 在项目的Info.plist文件中,添加NSApplePayMerchantIdentifier字段,值为你的Merchant ID;
    • 在JS代码中配置支付请求参数,指定支持的支付网络(如Visa、MasterCard)、商家信息等;
  • Android端Google Pay配置:
    • 打开Android项目的AndroidManifest.xml,添加Google Pay相关权限(如INTERNET)和meta-data(指定Merchant ID);
    • 前往Google Pay Console注册商家账号,获取有效的Merchant ID;
    • 在JS代码中配置Google Pay的支付请求参数,关联你的Merchant ID并指定支持的支付方式;
  • 最后在React Native代码中调用react-native-payments的PaymentRequest API发起支付即可。

二、关于是否无需react-native init即可完成配置的疑问

答案很明确,分情况来看:

  • 纯托管CRNA项目:无法直接用react-native-payments完成完整支付集成,因为它必须修改原生配置,而托管工作流不允许操作原生目录。你要么eject到裸工作流(生成原生目录,无需再用react-native init创建新项目),要么改用Expo官方支付库;
  • 已eject的裸CRNA项目:本身已经拥有iOS和Android原生目录,完全不需要用react-native init创建新的原生项目,直接在现有目录中完成Apple Pay/Google Pay的配置即可,和普通RN项目的配置逻辑一致;
  • 补充一点:react-native-payments确实是跨平台框架,但它只是封装了原生平台的支付API,底层还是依赖iOS/Android的原生支付能力,所以原生端的配置(比如Merchant ID注册、能力开启)是绕不开的,除非你用Expo官方封装的库,它们已经帮你处理了原生层的配置细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:34:16