如何使用Javapns支持Apple的增强通知格式

时间:2011-04-28 13:22:04

标签: java ios apple-push-notifications

问候,

我正在创建一个基于Java的服务器来为Apple的iOS APN服务创建推送通知。我在谷歌代码上发现了Javapns,它似乎提供了一个简单的基本框架来与APN进行通信,而且似乎使用起来相当广泛。

http://code.google.com/p/javapns/

然而,阅读Apple的文档时,对于支持“到期”的通知有一种“增强格式”,即如果通知尚未交付,则设置一个时间(以秒为单位)。我没有看到使用Javapns设置此方法的任何方法,如果您没有明确设置,我不确定APNs服务如何处理通知的到期。所以,

  1. 有谁知道如何支持APN的增强通知格式,具体如何设置到期日期?
  2. 如果没有明确设置,有没有人知道Apple如何处理通知到期?
  3. 有没有人有任何不需要我从头开始的建议,因为服务器目前正常运作?
  4. 提前致谢。

    安德鲁

3 个答案:

答案 0 :(得分:5)

我最近为JavaPNS项目做出了重大贡献,该项目几天前就发布了JavaPNS 2.0。该版本完全支持增强的通知格式,包括设置自己的到期日期的能力。

西尔

答案 1 :(得分:0)

很高兴您发现了java库......很糟糕,您没有阅读那里的文档。

我将在下面发布一些亮点:


现有代码使用“简单通知格式”,该格式不会返回错误。

请参阅以下文档: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html

我已尝试更新为“增强通知格式”,该格式应该会返回错误,但我无法从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);
    ...
}