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

React Native集成Apple Wallet添加Pass功能遇阻求助

Expo环境下React Native集成Apple Wallet问题解决指南

问题背景

你已完成Google Wallet的集成,但iOS端因使用Expo无法依赖需要修改Podfile的第三方Wallet库,手动调用NativeModules也无任何反馈。

可行解决方案

1. 转Bare Workflow(最直接方案)

若可接受脱离纯Expo Managed环境,通过预构建生成原生项目:

  • 执行 npx expo prebuild 生成iOS/Android原生代码文件
  • 安装react-native-passkit-wallet这类原生库,按照官方文档配置Podfile
  • 重新编译项目,正常调用库的API完成Pass添加

2. 自定义Expo模块(保留Managed特性)

不想完全转Bare Workflow的话,自行封装兼容Expo的原生模块:

  • 编写iOS原生模块,封装PassKit的addPass逻辑(对应你提到的RNPassKit)
  • 使用expo-module-scripts配置模块,确保符合Expo模块规范
  • 构建自定义Dev Client,将该模块集成进客户端
  • 在Expo项目中调用自定义模块的API,传入base64编码的.pkpass文件

3. 临时方案:文件分享让用户手动添加

不想触碰原生代码的话,用Expo自带API绕开原生模块限制:

  • 将base64格式的.pkpass文件保存到本地
  • 调用系统分享功能,iOS会自动识别.pkpass格式并弹出添加到Wallet的选项
  • 示例代码:
import * as FileSystem from 'expo-file-system';
import * as Sharing from 'expo-sharing';

async function addPassToWallet(base64Pass) {
  const localPassPath = `${FileSystem.documentDirectory}custom-pass.pkpass`;
  await FileSystem.writeAsStringAsync(localPassPath, base64Pass, { encoding: FileSystem.EncodingType.Base64 });
  await Sharing.shareAsync(localPassPath);
}

关于NativeModules调用无反应的原因

你直接调用NativeModules.RNPassKit.addPass没有效果,是因为Expo Managed环境未加载该自定义模块——自定义模块必须通过Expo的模块注册流程才能被识别,未注册的模块调用不会报错,但也不会执行任何操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:13