问候,
我正在创建一个基于Java的服务器来为Apple的iOS APN服务创建推送通知。我在谷歌代码上发现了Javapns,它似乎提供了一个简单的基本框架来与APN进行通信,而且似乎使用起来相当广泛。
http://code.google.com/p/javapns/
然而,阅读Apple的文档时,对于支持“到期”的通知有一种“增强格式”,即如果通知尚未交付,则设置一个时间(以秒为单位)。我没有看到使用Javapns设置此方法的任何方法,如果您没有明确设置,我不确定APNs服务如何处理通知的到期。所以,
提前致谢。
安德鲁
答案 0 :(得分:5)
我最近为JavaPNS项目做出了重大贡献,该项目几天前就发布了JavaPNS 2.0。该版本完全支持增强的通知格式,包括设置自己的到期日期的能力。
西尔
答案 1 :(得分:0)
很高兴您发现了java库......很糟糕,您没有阅读那里的文档。
我将在下面发布一些亮点:
现有代码使用“简单通知格式”,该格式不会返回错误。
我已尝试更新为“增强通知格式”,该格式应该会返回错误,但我无法从APNS返回任何错误。 (也在上面的链接中)
使用增强格式,发送数据后不会立即删除连接,但我没有从socket.getInputSocket.read()调用中获取任何内容。
在我有更多时间进行问题排查之前,必须先提交此问题。
(其他人评论过) 非常感谢您对此进行调查。 我得到了与你相同的结果。也许它与Apple Gateway有关。
所以...你可以: 1)建立自己的 2)帮助改进现有的库 3)尝试另一个库,如:https://github.com/notnoop/java-apns 4)什么都不做
答案 2 :(得分:-1)
增强的ios推送here。 要发送通知,您可以分三步完成:
设置连接
ApnsService service =
APNS.newService()
.withCert("/path/to/certificate.p12", "MyCertPassword")
.withSandboxDestination()
.build();
创建并发送消息
String payload = APNS.newPayload().alertBody("Can't be simpler than this!").build();
String token = "fedfbcfb....";
service.push(token, payload);
查询非活动设备的反馈服务:
Map<String, Date> inactiveDevices = service.getInactiveDevices();
for (String deviceToken : inactiveDevices.keySet()) {
Date inactiveAsOf = inactiveDevices.get(deviceToken);
...
}