向 IOS 问题推送通知 CodeName One

Posted

技术标签:

【中文标题】向 IOS 问题推送通知 CodeName One【英文标题】:Push Notification to IOS issue CodeName One 【发布时间】:2016-01-25 10:14:05 【问题描述】:

我尝试将通知从 java 服务器推送到 ios 客户端 我有这个错误(来自代号服务器的响应)

"error":"向 APNS 发送推送失败:com.notnoop.exceptions.NetworkIOException: javax.net.ssl.SSLHandshakeException: 握手期间远程主机关闭连接"

    String GOOGLE_SERVER_KEY = "********************************************";
    HttpsURLConnection connection;
    String url = "https://push.codenameone.com/push/push"; 
    String TOKEN = "******-****-*****-*****-**************";
    String URL_ENCODED_LINK_TO_YOUR_P12_FILE =
        "https://dl.dropboxusercontent.com/*/******************/Certificates.p12";
    String URL_ENCODED_CERTIFICATE_PASSWORD = "******";

    String deviceId =
        "cn1-gcm-*******************************************************";
    String deviceId2 =
        "cn1-ios-***************************************************";
    String MESSAGE_BODY = "This notification  message coming from server";
    try 

        connection = (HttpsURLConnection)new URL(url).openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        String query =
            "token=" + TOKEN + "&device=" + deviceId + "&device=" +
            deviceId2 + "&type=1&auth=" + GOOGLE_SERVER_KEY +
            "&certPassword=" + URL_ENCODED_CERTIFICATE_PASSWORD +
            "&cert=" + URL_ENCODED_LINK_TO_YOUR_P12_FILE + "&body=" +
            URLEncoder.encode(MESSAGE_BODY, "UTF-8") + "&production=false";
        try 
            OutputStream output = connection.getOutputStream();
            output.write(query.getBytes("UTF-8"));
         catch (Exception e) 
            e.printStackTrace();
        

        System.out.println("ResponseCode : " + connection.getResponseCode());
        System.out.println("ResponsenMessage : " +
                           connection.getResponseMessage());
        BufferedReader br =new BufferedReader(new InputStreamReader((connection.getInputStream())));

        String output;
        String result = "";
        System.out.println("Output  .... \n");
        while ((output = br.readLine()) != null) 
            System.out.println(output);
            result += output + "\n";
        

        connection.disconnect();
     catch (Exception e) 
        e.printStackTrace();
    

代号一台服务器的输出

响应代码:200

响应消息:好的

输出 ....

"error":"发送推送到 APNS 失败:com.notnoop.exceptions.NetworkIOException: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake"

【问题讨论】:

【参考方案1】:

握手异常通常意味着Codename One 服务器由于安全问题而无法连接。这可能意味着您的 P12 不正确。

您确定您使用了正确的 P12 文件吗?请记住,有 2 个推送证书(不要与 2 个签名证书混淆),根据沙盒标志的值,只能使用其中的一个。

您是否使用过证书向导?

【讨论】:

是的,我正在使用有效的 P12 文件,但我的 P12 链接可能无法被代号为一台服务器理解!!!!如果你能告诉我我可以把我的 P12 放在哪里,可以通过代号一台服务器访问。 .和我的P12一样是我用来发IOS构建的P12(代号一服务器) 如果您的 P12 文件是构建证书,那么这就是您的问题! iOS 每个应用程序需要 4 个证书(使用推送时)。 2个构建证书与推送过程无关。您需要创建特定于应用程序的新 P12 证书以进行推送。这可以通过证书向导来完成。【参考方案2】:

我认为 2195 和 2196 端口在服务器端或客户端都被禁用,需要为苹果推送通知启用。

【讨论】:

以上是关于向 IOS 问题推送通知 CodeName One的主要内容,如果未能解决你的问题,请参考以下文章

将 Codename One iOS AppStore 构建发送到 App Store

向 iOS 发送推送通知的问题,(云功能)

向 iOS PushSharp 证书发送推送通知

iOS 向大量用户推送通知

从 Firebase 向 Android 和 iOS 发送推送通知

Web 应用程序如何向 iOS 设备发送推送通知? [关闭]