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)
'handshake_failure'是SSL的問題。確保你在服務器上使用了正確的證書。 – neilco
我發現這個問題是我的證書文件的路徑..因爲ClassLoader.class.getResourceAsStream(「/ WEB-INF/cert.p12」)返回null。 –