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

使用APN与Node.js自动更新iOS Wallet Pass:通知发送成功却未收到

问题排查与解决步骤

一、代码中的直接错误

  • 变量名不匹配:apnProvider.send(notification, token)里的token应为你定义的pushToken,修正后代码:
    apnProvider.send(notification, pushToken).then((response) => {
      console.log(response);
    });
    
  • 重复设置alert字段:你在Notification构造函数里已定义aps.alert,后续又通过notification.alert = message覆盖,这会造成payload冗余,且Pass更新推送不需要这类字段。

二、Pass自动更新的APN payload要求

Wallet Pass的自动更新依赖静默推送,无需显示alert或sound,正确的payload需包含content-available: 1来触发更新,修改Notification构造:

const notification = new apn.Notification({
  aps: {
    'content-available': 1 // 核心字段,触发Wallet静默拉取更新
  }
});
  • 移除notification.alert = message和非必要的payload字段,只保留触发更新的核心配置。

三、passkit-generator的Pass配置要求

生成Pass时必须配置以下两个关键字段,否则Wallet无法拉取更新:

  1. webServiceURL:后端服务地址,Wallet会向该地址请求最新Pass内容
  2. authenticationToken:验证更新请求的安全令牌

示例配置:

const pass = generator.createPass({
  // 其他Pass基础配置...
  webServiceURL: "https://your-backend-domain.com/pass-updates",
  authenticationToken: "your-secure-random-token"
});
  • 后端需实现符合Apple PassKit规范的更新接口,处理Wallet的GET请求返回最新Pass文件。

四、APN配置与环境校验

  • Topic正确性:notification.topic必须与Pass文件中的passTypeIdentifier一致(即Apple Developer后台的Pass Type ID)。
  • 环境匹配:测试设备需将options.production设为false(使用沙箱环境),正式上架的Pass保持production: true。
  • AuthKey有效性:确认AuthKey.p8文件、keyId、teamId与Apple Developer后台一致,且该密钥拥有Push Notification权限。

五、设备端验证

  • 确保设备已添加目标Pass,且网络正常(Wallet需联网拉取更新)。
  • 检查Wallet的通知权限是否开启(静默推送虽不显示通知,但基础权限需允许)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:27:33