2

push.apns.send方法不会调用success回调。因此,如果执行成功,我们无法确定此操作何时完成。Azure移动服务`push.apns.send`成功回调`

这里是我的代码(它是在插入时运行该数据表的一个服务器端脚本的一部分):

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回调的作品。例如,当我通过无效的deviceToken时,我可以在日志中看到错误消息。但是如果成功执行,日志中什么也没有。看起来它根本不叫success回调。

这个例子没有显示,但在我的情况下,我需要success回调来更改记录的状态并保存它。

回答

5

不幸的是,这就是Apple Push Notification Service (APNS)的工作原理。基本上,在覆盖范围内,TCP连接对APNS打开,并且与您的消息相对应的字节(正确格式化)被发送到服务。如果推送成功,APNS不会发送任何回应。如果不是,它可能会立即作出响应(这是错误回调被调用的情况),或者它可能不会 - 当您尝试访问反馈服务时,它可能会可能会告诉您存在错误。

因此,鉴于没有可靠的方式告诉调用者push.apns.send推送成功,团队决定添加一个success回调没有意义(这会给人错误的印象,推送成功)。

您可能想要使用的一种启发式方法是首先发送推送,然后等待(setTimeout)一段时间,如果未调用错误回调,则假定推送成功。请注意,如上所述,它不是100%准确的,但对于您的情况可能已足够。

+0

现在我明白了,感谢您的澄清和解决方法。我认为这会对我们有用。 – 2013-03-28 14:38:04

-2

更改以下代码它将起作用。

success: function(data) { 
    console.log(data) 
},