2

push.apns.send方法不调用success回调。因此,在成功执行的情况下,我们无法确定此操作何时完成。

这是我的代码(它是在其中一个数据表的插入事件上运行的服务器端脚本的一部分):

  push.apns.send(message.deviceToken, {
    alert: message.alert,
    badge: message.badge,
    sound: message.sound,
    payload: {
      message: message.alert,
      appID: message.appID
    }
  }, {
    success: function(resp) {
      console.log(resp)
    },
    error: function(err) {
      console.error(err)
    }
  })

error回调有效。例如,当我通过 invalid 时deviceToken,我可以在日志中看到错误消息。但是在成功执行的情况下,日志中没有任何内容。似乎它根本不调用success回调。

此示例中未显示,但在我的情况下,我需要success回调来更改记录的状态并保存它。

4

2 回答 2

5

不幸的是,这就是Apple 推送通知服务 (APNS)的工作方式。基本上,在幕后打开一个 TCP 连接到 APNS,并将与您的消息相对应的字节(正确格式化)发送到服务。如果推送成功,APNS 不会发回任何响应。如果没有,它可能会立即响应(这是调用错误回调的情况),也可能不会 - 稍后当您尝试访问反馈服务时,它可能会告诉您出现错误。

因此,鉴于没有可靠的方法告诉调用者push.apns.send推送成功,团队认为添加success回调没有意义(这会产生推送成功的错误印象)。

您可能想要使用的一种启发式方法是首先发送推送,然后等待 ( setTimeout) 一段时间,如果未调用错误回调,则假设推送成功。请注意,正如我上面提到的,它不是 100% 准确的,但对于您的场景来说可能就足够了。

于 2013-03-26T20:50:08.117 回答
-2

在您的代码中更改以下内容将起作用。

success: function(data) {
  console.log(data)
},
于 2013-11-26T11:29:51.293 回答