1

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

entity.getText() : {"logs":["[2013-03-31 00:18:29 +1100] 获取传球任务(传球类型pass.xxxxxx.freehug, 序列号ABC, if-modified-since (null ); 使用 Web 服务 url http://192.168.1.43:8080/passbook/restlet) 遇到错误:服务器响应格式错误(缺少响应数据)"]}

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

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 行上方的路由器下获取它?获取更新标签的路由器设置是否正确?

4

1 回答 1

3

passUpdatedSince={tag}值是根据您的 Web 服务对请求的最后一次成功响应设置的:

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

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

if-modified-since值由Last-Modified与接收到的最后一个 .pkpass 捆绑包一起发送的 HTTP 标头设置,与passTypeIdentifier和匹配serialNumber。同样,您可以选择在此标头中发送什么值。

The specific error that you mention above is not due to either of these. It is caused by your web service not providing a .pkpass bundle in response to the request to:

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

You may want to try hooking your device up to Xcode, turning on PassKit logging (Settings -> Developer), then monitoring the device's console log as you send the push. This may give you more detail as to why the device sent the message to your web service log.

于 2013-03-30T14:46:01.717 回答