PassBook伴随着IOS6的推出已经快接近半年了.相信很多技术工作者已经熟悉掌握了PassBook的制作方法.但是对于推送更新这一块可能还是不太理解.小编在这里就分享一下PassBook的更新过程.
小编在这里只是从技术角度去描述PassBook整个更新的动作,如果你需要更好的使用它一定要加入自己系统的业务逻辑.
1.注册PassBook,获取lastupdate,获取最新版本;大家一定会有所误解,为什么一下子写这么多的流程.其实不然,当我们打开一张新的PassBook,点击添加按钮的时候;PassBook第一个动作是Registering a Device。
   A. Registering a Device 动作我们能捕获到设备的唯一值deviceLibraryIdentifier,PushToken,Pass的Type id和serialNumber。
   B. 当服务端返回201状态,即注册成功后,Pass立即使用Getting the Serial Numbers请求
   C. 不要奇怪,我觉的苹果是要为当前的Pass获取一个lastUpdated标记,我们可以把它看成一个版本号,当然它也可以是时间片类型。这里的返回类型是   JSON里面有2个属性值:lastUpdated (string) serialNumbers (array of strings)
   D. 有人说serialNumbers可以返回为[];但是我觉得这里要反馈你刚刚注册的这张Pass的serialNumber的值。意思是:告诉设备你这个serialNumber这个时候的更新Tag是什么。
   E.  此后PassBook还会调用一个Getting the Latest接口,你可以再次返回这个pkpass,也可以返回304,告诉pass没有变化
   值得注意的地方:
          A. Getting the Latest的返回值是pkpass文件,和下载pkpass那些差不多,需要一些header头的操作
          B. Getting the Serial Numbers,这步骤尤为重要,很多业务逻辑需要在这里处理。
2. Push的流程
    Pass的Push是一个,PassBook被动接受服务端更新要求的过程
    1.  服务端挑选PushToken列表,这个过程完全取决于您的设计方案;Push的内容就是一个空JSON字典{},推送所用的证书是生成pkpass用的p12(c#),pem(php);推送代码自行选择。
    2.  当设备收到push消息后,会带着自己的deviceLibraryIdentifier,Pass的Type id和updateTag,这个tag就是在添加新的pass之后返回的lastUpdated。
    3.  服务端收到deviceLibraryIdentifier,Pass的Type id,后找到已经注册了的SerialNumbers,然后当前最新的SerialNumbers对比,如果有变动就得返回这个SerialNumbers,并带上新的lastUpdated。
    4.   注意:同一张passkit在更新的时候SerialNumbers是不能改动的。
    5.    我感觉pass的更新是针对pass typeid的,不是针对单张passkit的;所有的更新与否完全取决于服务端。lastupdate 一定要管理好


欢迎大家加入PassBook交流群:253194344

By admin on 2012-10-11 21:06:00