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

如何在服务器端获取Pass的PassUrl以打开iPhone Passbook中的凭证

如何获取Pass唤起链接(shoebox://card/)并实现网页唤起Passbook

首先得给你澄清一个关键误区:shoebox://card/[pass-id]这种格式的链接是用户把Pass添加到Passbook后,设备本地生成的唤起路径,服务器端没办法提前直接拿到这个链接,因为它和用户的设备、已安装的具体Pass实例绑定。

不过要实现“从网页打开指定Pass”的需求,有两种靠谱的方案可以走:

方案1:先关联Pass标识,再生成唤起链接

当你在服务器端创建Pass时,一定要在pass.json里给它设置一个唯一的serialNumber(这是Pass的核心唯一标识)。

当用户下载并添加Pass到Passbook后,你可以通过Pass的webServiceURL回调机制,让设备向你的服务器发送一个请求,把这个serialNumber和用户设备的信息关联起来(比如存到你的数据库里)。

之后,当你需要在网页中唤起这个Pass时,就可以拼接出shoebox://card/${serialNumber}的链接。不过要注意:

  • 这个链接只有在用户已经把对应Pass添加到设备的Passbook里时才有效,否则点击后要么没反应,要么提示找不到Pass。
  • 你可以在前端做个简单的容错:尝试唤起后,如果一段时间内没成功,就引导用户去下载Pass。

方案2:直接用下载链接+系统自动唤起逻辑

如果用户还没添加过Pass,你直接提供.pkpass文件的下载链接就行——在iPhone上点击这个链接时,iOS系统会自动唤起Passbook,要么提示添加Pass,要么如果已经添加过,直接打开对应的凭证。

你可以在网页里做个智能处理的按钮,示例代码如下:

function openOrAddPass() {
  // 替换成你的Pass唯一序列号和下载地址
  const passSerial = "your-pass-unique-serial";
  const shoeboxLink = `shoebox://card/${passSerial}`;
  const passDownloadUrl = "https://your-server.com/passes/your-pass.pkpass";

  // 先尝试唤起已添加的Pass
  const start = Date.now();
  window.location.href = shoeboxLink;

  // 如果500ms内没唤起成功(说明用户没添加过),跳转到下载链接
  setTimeout(() => {
    if (Date.now() - start < 1000) {
      window.location.href = passDownloadUrl;
    }
  }, 500);
}

额外提醒

  • 你的Pass文件必须正确配置pass.json里的必填字段:teamIdentifier、passTypeIdentifier、serialNumber一个都不能少,否则Passbook会拒绝识别这个Pass。
  • 如果用第三方Pass生成工具,有些工具会封装好唤起逻辑,你可以查它们的文档,但核心还是基于Pass的唯一标识来做关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:32:49