我使用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头设置,与passTypeIdentifier
和serialNumber
匹配的最后一个。pkpass包发送。同样,你可以选择在这个头中发送什么值。
您上面提到的特定错误不是由上述任何一个引起的。这是由于您的web服务没有在响应请求时提供.pkpass
包引起的:
https://{webServiceURL}/v1/passes/{passTypeIdentifier}/{serialNumber}
你可能想尝试将你的设备连接到Xcode,打开PassKit logging (Settings -> Developer),然后在你发送推送时监控设备的控制台日志。这可以让您更详细地了解设备为什么将消息发送到web服务日志。