6

我正在使用 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 对象。我尝试在我的 push 调用中传递一个无效的令牌以及一个用于有效负载的空字符串:

service.push("ab", "")

但是我的 ApnsDelegate 的 messageSent 方法仍然被调用。我希望这最终会出现在 messageSendFailed 方法中,或者可能是 connectionClosed 但都没有被调用。有没有人测试过这个东西并让它工作?这是我的课程的一个例子......我实际上是在 Scala 中这样做的,但我想如果我发布 Java 会更好。当被调用时,它只会打印“Message sent to 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());
    }

}
4

1 回答 1

5

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

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

于 2012-09-11T03:58:54.633 回答