如何在Apple Wallet卡片添加后发送自定义推送通知?
实现Apple Wallet卡片添加后推送通知的有效方案
一、先搞定基础配置
- 你的Wallet卡片(Pass文件)里必须包含
webServiceURL和authenticationToken字段——这俩是Apple在用户添加/更新卡片时,给你服务器发回调的关键,少了就拿不到用户设备的推送令牌。 - 确保你的APNs推送证书(或认证令牌)有效,对应的App ID得同时开启PassKit和Push Notifications权限。
二、获取用户设备的推送令牌(核心步骤)
当用户把Pass添加到Wallet时,Apple服务器会主动给你配置的webServiceURL发一个POST请求,路径是/v1/devices/<device-id>/registrations/<pass-type-id>/<serial-number>。你得在自己的服务器上实现这个接口,做两件事:
- 从请求体里提取
pushToken字段——这就是该设备的APNs推送令牌,后续发推送全靠它。 - 把这个
pushToken和对应的Pass信息(比如serialNumber)存在你的数据库里,关联起来。
三、正确构造APNs推送请求
你之前的请求缺了几个关键项,正确的请求得这么写:
1. 必须加的请求头
Authorization: 用APNs认证令牌(推荐)或者证书签名的Bearer令牌。令牌格式是bearer <你的JWT令牌>;如果用证书,请求时要带上对应的SSL证书。apns-topic: 填你的Pass Type ID(比如pass.com.yourcompany.yourpass),或者关联App的Bundle ID。Content-Type: 固定填application/json
2. 请求地址要分环境
- 生产环境:
https://gateway.push.apple.com/3/device/<拿到的pushToken> - 测试环境:
https://api.sandbox.push.apple.com/3/device/<拿到的pushToken>
别搞混环境,测试机用沙箱地址,正式用户用生产地址。
3. 合理的请求体
如果只是发添加成功的通知,用这个格式就够了,比你之前的更友好:
{ "aps": { "alert": { "title": "卡片已添加成功", "body": "你的Wallet卡片已存入,随时可以查看使用" }, "sound": "default" } }
四、常见坑点排查
- 别手动硬编码pushToken:你之前用的是示例令牌,实际必须从Apple的回调里动态获取,硬编码肯定发不出去。
- 检查证书/令牌有效性:确认APNs的认证信息没过期,权限也开对了。
- Pass配置要正确:
webServiceURL得是公网可访问的地址,authenticationToken不能错,不然Apple的回调请求根本到不了你的服务器。
内容的提问来源于stack exchange,提问作者Sahil Sharma
相关产品推荐
相关产品推荐

