连接到APNS时出错(https://api.development.push.apple.com/)

问题描述 投票:1回答:1

我正在尝试使用HttpsUrlConnection(Java代码)连接到APNS(https://api.development.push.apple.com/)。我已经从https://api.development.push.apple.com/下载了证书并将其添加到Java密钥库中。

CODE:

public class HttpsUrlConnectionClient {

    public static void main(String[] args) {

        {
            try {
                URL obj = new URL("https://api.development.push.apple.com/3/device/<device-token>");
                HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
                con.setRequestMethod("POST");
                con.setRequestProperty("apns-topic", "<apns-topic-name>");
                con.setRequestProperty("authorization", "bearer <apns-auth-key>");
                con.setRequestProperty("content-type", "application/json");
                con.setDoOutput(true);
                DataOutputStream wr = new DataOutputStream(con.getOutputStream());
                wr.writeBytes("{ \"aps\" : { \"alert\" : \"Hello\" } }");
                wr.flush();
                wr.close();

                int responseCode = con.getResponseCode();
                System.out.println(responseCode);


                BufferedReader in = new BufferedReader(
                        new InputStreamReader(con.getInputStream()));
                String inputLine;
                StringBuffer response = new StringBuffer();

                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();


            } catch (Exception e) {

            }

        }
    }
}

我按照https://github.com/escline/InstallCert所述的步骤获取服务器证书并在本地存储。

我总是将responseCode设为-1(无效的http响应)。

[请帮助我,因为我不知道这是由于证书还是其他原因。

apple-push-notifications httpsurlconnection javaapns pushy
1个回答
0
投票

请问您是否找到解决此问题的方法?我现在遇到了完全相同的问题。我尝试使用HttpUrlConnection以及Apache HttpClient,但它给出了相同的响应(Http status = -1),这导致我的应用抛出异常。

2020-06-09 18:20:56.869 [Thread-135]错误:ApnClient.sendToDevices =>新的APNS错误:无效的Http响应堆栈跟踪:[Ljava.lang.StackTraceElement; @ 3d3c3bd0java.io.IOException:无效的Http响应    在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)〜[?:1.8.0_181]    在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)〜[?:1.8.0_181]    在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)〜[?:1.8.0_181]    在java.lang.reflect.Constructor.newInstance(Constructor.java:423)〜[?:1.8.0_181]    在sun.net.www.protocol.http.HttpURLConnection $ 10.run(HttpURLConnection.java:1944)〜[?:1.8.0_181]    在sun.net.www.protocol.http.HttpURLConnection $ 10.run(HttpURLConnection.java:1939)〜[?:1.8.0_181]    在java.security.AccessController.doPrivileged(本机方法)〜[?:1.8.0_181]    在sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1938)〜[?:1.8.0_181]    在sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1508)〜[?:1.8.0_181]    在sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)〜[?:1.8.0_181]    在sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)〜[?:1.8.0_181]    在phillip.pushnotification.apn.ApnMessageService.processRequest(ApnMessageService.java:217)〜[classes :?]    在phillip.pushnotification.apn.ApnMessageService.sendMessage(ApnMessageService.java:174)〜[classes :?]    在phillip.pushnotification.apn.ApnClient.sendToDevices(ApnClient.java:132)〜[classes :?]    在phillip.pushnotification.apn.PushNotificationClientFactory.sendToDevices(PushNotificationClientFactory.java:25)〜[classes :?]    在phillip.pushnotification.listener.CommonQueueListener.onReceived(CommonQueueListener.java:69)〜[classes :?]    在pmobile.push.jms.Listener.lambda $ start $ 0(Listener.java:94)〜[JMSCore-0.0.1.jar :?]    在java.lang.Thread.run(Thread.java:748)[?:1.8.0_181]引起原因:java.io.IOException:无效的Http响应    在sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1606)〜[?:1.8.0_181]    在sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)〜[?:1.8.0_181]    在java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)〜[?:1.8.0_181]    在sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)〜[?:1.8.0_181]    在phillip.pushnotification.apn.ApnMessageService.processRequest(ApnMessageService.java:189)〜[classes :?]    ...另外6个
© www.soinside.com 2019 - 2024. All rights reserved.