存折更新标签:if-modified-since (null)



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

entity.getText(): {"logs":["[2013-03-31 00:18:29 +1100] Get pass task(pass类型pass.xxxxxx.freehug,序号ABC, if-modified-since(空);使用web服务urlhttp://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行以上的路由器下获得它?我的路由器设置获得更新标签正确吗?

passUpdatedSince={tag}值是根据web服务给请求的最后一个成功响应设置的:

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

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

if-modified-since值由Last-Modified HTTP头设置,与passTypeIdentifierserialNumber匹配的最后一个。pkpass包发送。同样,你可以选择在这个头中发送什么值。

您上面提到的特定错误不是由上述任何一个引起的。这是由于您的web服务没有在响应请求时提供.pkpass包引起的:

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

你可能想尝试将你的设备连接到Xcode,打开PassKit logging (Settings -> Developer),然后在你发送推送时监控设备的控制台日志。这可以让您更详细地了解设备为什么将消息发送到web服务日志。

最新更新