2012-09-05 78 views
6

我正在使用Java-APNS框架向iOS設備發送推送通知。它工作得很好(感謝開發人員!),並且我可以在所有設置正確時發送給我的設備。但是,我希望能夠妥善處理失敗案例。有跡象表明,應某些情況下收到了一些文件APNS錯誤代碼:使用java-apns檢測推送問題

http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1

我怎麼會創造出一些的失敗案例?我有我自己的類來實現ApnsDelegate並用我的委託構造我的ApnsService對象。我試圖傳遞一個無效的標記在我的電話來推動,以及一個空字符串有效載荷:

service.push("ab", "") 

但我ApnsDelegate的messageSent方法仍然被調用。我希望這最終在messageSendFailed方法,或者也許connectionClosed但都不被調用。有沒有人測試過這個東西,並得到它的工作?這裏是我的課程的一個例子...我實際上在斯卡拉這樣做,但我認爲如果我發佈Java,我會有更好的運氣。當被調用時,這隻會打印「發送給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()); 
    } 

} 
+0

如果有人仍然想要答案,我會留下問題,但我現在正在查看[JavaPNS](http://code.google.com/p/javapns)作爲替代方案。似乎在失敗情況下啓用得更好,並且最近在上個月進行了更新。我已經能夠輕鬆發送我的推送通知以及創建失敗案例。 java-apns在一年內似乎沒有被觸及。 – ShatyUT

回答

5

正如我在評論中提及,我看着JavaPNS作爲替代,這是一個更好的框架來使用。這也是目前的工作(最後提交2天前在發佈時間)其中java-apns自2011年12月以來尚未更新。

我建議使用java-apns替換爲任何人使用JavaPNS試圖將推送通知發送到iOS設備。它對接收到的錯誤包作出反應,並以易於訪問的方式將結果傳遞給調用者。

+1

現在翻譯似乎是正確的(2014 for java-apns | 2012 for javaPNS) – Enigma