Passbook更新标记:if-modified-since(null)

时间:2013-03-30 13:52:23

标签: passbook

我正在使用Restlet2.0(java)来构建存折服务器。当我使用PushToken向APN发送推送通知时,我从服务器日志中收到消息'if-modified-since(null)':

  

entity.getText():{“logs”:[“[2013-03-31 00:18:29 +1100]获取传递任务   (传递类型pass.xxxxxx.freehug,序列号ABC,if-modified-since   (空值);与web服务网址   http://192.168.1.43:8080/passbook/restlet)遇到错误:   服务器响应格式错误(缺少响应数据)“]}

此响应URL匹配为LoggingResource类(第4行)定义的路由器,但不匹配SerialNumbersPassWithDeviceResource类(第2行),该类定义了要为最新的pkpass比较捕获的passUpdatedSince = {tag}参数:

router.attach("/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}/{serialNumber}", DeviceRegistrationResource.class); //1/4. Registration - POST/DELETE
router.attach("/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}?passUpdatedSince={tag}", SerialNumbersPassWithDeviceResource.class);  //2. SerialNumbers - GET
router.attach("/v1/passes/{passTypeIdentifier}/{serialNumber}", LatestVersionPassResource.class);  //3. LatestVersion - GET
router.attach("/v1/log", LoggingResource.class);  //5. Logging - POST

那么我在哪里可以设置更新标记(passUpdatedSince = {tag})以及如何在第2行上方的路由器下获取它?我的路由器设置是否正确获取更新标签?

1 个答案:

答案 0 :(得分:2)

passUpdatedSince={tag}值是根据您的网络服务提供的最后一次成功回复设置的:

https://{webServiceURL}/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}

您可以通过在JSON字典响应中提供lastUpdated的密钥来设置它。值可以是您喜欢的任何值,但最简单的方法是使用时间戳。

if-modified-since值由与Last-ModifiedpassTypeIdentifier匹配的最后一个.pkpass包发送的serialNumber HTTP标头设置。同样,您可以选择在此标头中发送的值。

您在上面提到的具体错误不是由于其中任何一个。这是由于您的网络服务未提供.pkpass捆绑以响应请求:

https://{webServiceURL}/v1/passes/{passTypeIdentifier}/{serialNumber}

您可能想尝试将设备连接到Xcode,打开PassKit日志记录(设置 - >开发人员),然后在发送推送时监控设备的控制台日志。这可能会为您提供有关设备将消息发送到您的Web服务日志的详细信息。