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) 
},