2013-12-20 43 views
2

iOS push notification由於handshake_failure失敗,但它在本地機器上正常工作,並且在服務器上部署時出錯。由於handshake_failure導致IOS推送通知失敗

我使用APNS-0.1.5.jar

代碼:

static 
    { 
     service = APNS.newService() 
      .withCert(ClassLoader.class.getResourceAsStream("cert.p12"), "pwd") 
      .withSandboxDestination() 
      .build(); 
    } 


    public static void pushMSG(String msg,String deviceToken) 
    { 

     String payload = APNS.newPayload().alertBody(msg).build(); 

     AppLog.info("Message : "+msg+", deviceToken "+deviceToken); 

     service.push(deviceToken, payload); 

    } 

錯誤日誌

com.notnoop.exceptions.NetworkIOException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 
com.notnoop.apns.internal.Utilities.wrapAndThrowAsRuntimeException(Utilities.java:268) 
com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:173) 
com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:46) 
com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:52) 
com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36) 
com.gcash.notification.APNSManager.pushMSG(APNSManager.java:35) 
com.gcash.TestServlet.doGet(TestServlet.java:58) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    root cause 

    javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 
com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) 
com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136) 
com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1720) 
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954) 
com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) 
com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632) 
+0

'handshake_failure'是SSL的問題。確保你在服務器上使用了正確的證書。 – neilco

+2

我發現這個問題是我的證書文件的路徑..因爲ClassLoader.class.getResourceAsStream(「/ WEB-INF/cert.p12」)返回null。 –

回答

1

我有同樣的問題,我通過以下步驟固定它。

  1. 檢查您的.p12文件和.cer文件。確保它們相互對應。
  2. 您是否導出.p12文件並直接在您的代碼中使用它?如果是這樣,請參考answer。 「我們應該從您的私鑰生成一個p12,並從Apple下載證書。」

希望它有效。