我正在使用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行上方的路由器下获取它?我的路由器设置是否正确获取更新标签?
答案 0 :(得分:2)
passUpdatedSince={tag}
值是根据您的网络服务提供的最后一次成功回复设置的:
https://{webServiceURL}/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}
您可以通过在JSON字典响应中提供lastUpdated
的密钥来设置它。值可以是您喜欢的任何值,但最简单的方法是使用时间戳。
if-modified-since
值由与Last-Modified
和passTypeIdentifier
匹配的最后一个.pkpass包发送的serialNumber
HTTP标头设置。同样,您可以选择在此标头中发送的值。
您在上面提到的具体错误不是由于其中任何一个。这是由于您的网络服务未提供.pkpass
捆绑以响应请求:
https://{webServiceURL}/v1/passes/{passTypeIdentifier}/{serialNumber}
您可能想尝试将设备连接到Xcode,打开PassKit日志记录(设置 - >开发人员),然后在发送推送时监控设备的控制台日志。这可能会为您提供有关设备将消息发送到您的Web服务日志的详细信息。