关于Apple Wallet数组SN传null及Tag交互逻辑的技术咨询
Apple Wallet PassKit 常见问题解答
1. 给Apple Wallet的SN字段传null合规吗?
绝对不合规。按照Apple PassKit的官方规范,serialNumber(也就是你说的SN字段)是每个Pass必填的非空字符串,它是Pass的唯一标识——Apple Wallet全靠这个字段来区分不同Pass、跟踪更新状态、匹配已存储的Pass记录。
要是传个null进去,Wallet根本没法识别这个Pass,大概率会直接拒绝添加,就算侥幸进了Wallet,后续的更新、同步也会彻底乱套。所以务必给每个Pass配一个唯一的、非空的字符串当serialNumber。
2. Passes表Tag(时间戳)的处理逻辑
1)收到错误Tag(比如未来日期)该怎么响应?
如果收到无效的Tag——比如时间戳是未来的、格式不对,或者服务器上压根没见过这个Tag——正确的做法是返回HTTP 200 OK,同时带上最新的Tag和所有当前有效的Pass序列号。
为啥不返回304或204?因为无效Tag意味着客户端没有提供有效的更新基准,服务器没法判断客户端手里的Pass版本是不是最新的。这时候直接把完整的有效Pass列表推过去,让客户端同步到最新状态,顺便把最新Tag给它,这样下次请求就不会再踩这个坑了。
2)收到的Tag比所有现有Pass的Tag都新,需要返回内容吗?
就像你举的例子:UpdateSinceTag = 1200,但所有Pass的Tag(950、900、200)都比这个小——这说明从这个Tag对应的时间点到现在,没有任何Pass发生过变更。
这种情况直接返回HTTP 304 Not Modified就行,啥内容都不用带。客户端收到这个状态码就知道自己手里的Pass已经是最新的了,不用做任何同步操作,既省带宽又符合PassKit的更新协议要求。
内容的提问来源于stack exchange,提问作者Dred
相关产品推荐
相关产品推荐

