使用java-apns来检测push的问题

时间:2012-09-05 11:53:56

标签: java apple-push-notifications

我正在使用Java-APNS框架向iOS设备发送推送通知。它工作得非常好(感谢开发人员!)我能够在所有设置正确的情况下发送到我的设备。但是,我想妥善处理失败案件。对于某些情况,应该收到一些记录的APNS错误代码:

http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1

我如何创建一些失败案例?我有自己的类实现ApnsDelegate并使用我的委托构造我的ApnsService对象。我已经尝试在我的调用中传递一个无效的令牌以及有效载荷的空字符串:

service.push("ab", "")

但我的ApnsDelegate的messageSent方法仍然被调用。我希望这最终会在messageSendFailed方法中结束,或者可能是connectionClosed,但都不会被调用。有没有人测试过这些东西并让它发挥作用?这是我班级的一个例子......我实际上是在Scala中这样做但是如果我发布Java,我会好运。调用时,只会打印“发送给AB的消息”。

public class ApnsSender implements ApnsDelegate {

    public void send(Notification Notification) {
        ApnsService service = getApnsService();

        String payload = getPayload(notification);

        service.push("ab", "");
    }

    private ApnsService getApnsService() { ... }

    private String getPayload(Notification notification) { ... }

    public void messageSent(ApnsNotification message) {
        String token = Utilities.toHexString(message.getDeviceToken());
        System.out.println("Message sent to " + token);
    }

    public void messageSendFailed(ApnsNotification message, Throwable e) {
        System.out.println("Message failed");
    }

    public void messageSent(DeliveryError e, Int messageIdentifier) {
        System.out.println("Message closed with error code " + e.code());
    }

}

1 个答案:

答案 0 :(得分:5)

正如我在评论中所提到的,我调查了JavaPNS作为替代方案,这是一个更好的框架。它目前正在进行中(在发布时的2天前最后一次提交),其中java-apns自2011年12月以来尚未更新。

对于试图向iOS设备发送推送通知的任何人,我建议使用java-apns替换使用Java-apns。它对收到的错误数据包作出反应,并以易于访问的方式将结果传递给调用者。