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

如何使用React JS在iPhone Safari浏览器中将条形码添加到Apple Wallet

React + iPhone Safari 实现条形码添加到Apple Wallet方案

核心逻辑

Apple Wallet的凭证是固定格式的.pkpass签名文件,iPhone Safari原生支持识别该格式文件,打开后会直接弹出「添加到钱包」的引导弹窗,不需要额外调用原生API。React端只需要负责触发合法.pkpass文件的下载即可。

前置准备

  • 你需要持有有效的苹果开发者账号,开通Wallet功能,生成对应的Pass Type ID和签名证书,交由后端用来生成带官方合法签名的pkpass文件,未签名/签名无效的pkpass文件会被Safari直接拦截无法打开
  • 后端需要提前做好pkpass生成的接口开发,支持传入条形码内容、自定义展示字段等参数,返回格式正确的pkpass文件

React端实现步骤

  • 给添加按钮绑定点击事件,调用后端生成凭证的接口
  • 接口返回成功后,将返回的文件流转为Blob格式,通过临时URL跳转触发Safari识别
  • 核心代码示例:
// 添加到Apple Wallet点击事件
const handleAddToWallet = async () => {
  try {
    const response = await fetch("你的后端pkpass生成接口地址", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      // 按需传入后端需要的业务参数,比如条形码内容、用户信息、有效期等
      body: JSON.stringify({
        barcodeContent: "你的条形码字符串",
        barcodeType: "PKBarcodeFormatCode128", // 常用的还有PKBarcodeFormatQR 对应二维码
        username: "用户姓名",
        expireDate: "2024-12-31"
      })
    });
    if (!response.ok) throw new Error("凭证生成失败");
    const passBlob = await response.blob();
    const tempUrl = window.URL.createObjectURL(passBlob);
    // 直接跳转临时地址即可触发Safari识别pkpass
    window.location.href = tempUrl;
    // 1秒后释放临时URL资源
    setTimeout(() => window.URL.revokeObjectURL(tempUrl), 1000);
  } catch (error) {
    console.error("添加失败", error);
    alert("添加到钱包失败,请稍后重试");
  }
};

Safari适配注意事项

  • 不需要给a标签加download属性,Safari识别application/vnd.apple.pkpass类型的文件会自动触发添加流程,加download反而可能导致识别失败
  • 后端接口返回pkpass时必须设置正确的响应头:Content-Type: application/vnd.apple.pkpass
  • 不需要提前将条形码转为图片传入pass,生成pkpass时只需要传入条码内容和格式,苹果会自动生成符合Wallet规范的条形码展示,兼容性更好
  • 测试必须在真实iPhone的Safari浏览器中进行,模拟器和第三方浏览器都不支持触发添加到Wallet的流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:09:05