0

在 JavaPNS 文档中,我看到了这个:

要确定推送是否成功发送到 Apple 并且 Apple 没有返回任何错误响应数据包,只需调用 pushNotification.isSuccessful() 方法。如果发生以下任何一种情况,通知可能不会成功

  • 由于明显的规范违规,图书馆拒绝了您提供的令牌(例如:令牌不是 64 字节长等)
  • 库拒绝了您提供的有效负载,因为明显违反规范(例如:有效负载太大等)
  • 发生连接错误,库无法与 Apple 服务器通信
  • 您的证书或密钥库发生错误(例如:密码错误、密钥库格式无效等)
  • 从 Apple 服务器接收到有效的错误响应数据包

以及许多其他可能的错误...

但是提供的代码片段确实如此

for (PushedNotification notification : notifications) {
    if (notification.isSuccessful()) {
        /* Apple accepted the notification and should deliver it */  
        System.out.println("Push notification sent successfully to: " + notification.getDevice().getToken());
    /* Still need to query the Feedback Service regularly */  
    } else {
        String invalidToken = notification.getDevice().getToken();
        /* Add code here to remove invalidToken from your database */  

        /* Find out more about what the problem was */  
        Exception theProblem = notification.getException();
        theProblem.printStackTrace();

        /* If the problem was an error-response packet returned by Apple, get it */  
        ResponsePacket theErrorResponse = notification.getResponse();
        if (theErrorResponse != null) {
            System.out.println(theErrorResponse.getMessage());
        }
     }
 }

这似乎暗示 isSuccess() == false 意味着不可恢复的错误,并且设备令牌无效。

但是,可能的原因列表确实表明 isSUccess() 可能是错误的,因为返回了合法的错误数据包。我不知道,但我想如果 Apple 由于运营商问题未能发送通知,可能会被退回,例如,这意味着令牌不一定无效。

那么,isSuccess() == false 在发送消息时是一个不可恢复的错误,但不是需要异常的错误,例如密钥库失败或根本无法连接到服务器?

换句话说 - id isSuccessful() == false,我真的应该按照建议从我的数据库中删除设备令牌吗?片段说是的,但在我看来,文档似乎另有建议......

链接:http ://code.google.com/p/javapns/wiki/ManagingPushErrors

提前感谢任何勇敢地提出这个冗长而漫无边际的问题的人。

-- 浮潜

4

1 回答 1

0

文档说您是正确的。从技术上讲,这意味着推送失败,但并不是因为异常而失败。它可能由于合法的失败而失败。(我定义为我们成功连接的合法失败,消息没有明显缺陷,但服务器拒绝接受。)关键行如下:

IETo find out if a push was successfully sent to Apple and that Apple did not return any error-response packet, simply invoke the pushedNotification.isSuccessful() method.

不过,您的整个问题似乎很迂回。简单来说,你的推送失败了。异常和失败之间的区别真的很重要吗?无论哪种方式,它都无法恢复,您需要检查日志以确切了解发生了什么。

于 2012-12-07T20:57:48.177 回答