简体   繁体   English

APNS-无法使用Java将通知发送到iOS设备

[英]APNS - Can't send notification to iOS device using Java

I need to get this working but I'm completely out of options...any help would be greatly appreciated. 我需要使它正常工作,但我完全没有选择...任何帮助将不胜感激。

I'm trying to send notifications to my iOS device using Java and have followed many tutorials and forum posts, mainly these: raywenderlich.com , JavaPNS Basic Example , and the java-apns example shown below. 我正在尝试使用Java将通知发送到我的iOS设备,并遵循了许多教程和论坛文章,主要包括: raywenderlich.comJavaPNS Basic Example和下面显示的java-apns示例。

I am, however, able to send notifications using PHP. 但是,我可以使用PHP发送通知。 Can someone see anything I'm doing wrong? 有人可以看到我做错了什么吗? I've been working for several days on this and can't figure out what the issue is b/c I've copied the exact code that other people claim works. 我已经为此工作了好几天,无法弄清问题是什么,我已经复制了其他人认为有效的代码。 Here's my code: 这是我的代码:

public static void main(String[] args) {
    try {
        // Not my real token
        String token = "2919333333333545F19B427AE7E98307B1B2AA9390A38BC0E533E77E11111111";
        ApnsService service = APNS.newService()
                .withCert("C://code//Dev.p12", "password")  // (path to cert, password)
                .withSandboxDestination()
                //.withProductionDestination()
                .build();

        //System.out.println("Testing the connection...");
        //service.testConnection();
        //System.out.println("...Successful!");

        String payload = APNS.newPayload()
                .alertBody("Java test message!")
                .sound("default")
                .build();

        System.out.println("About to send the message...");
        service.push(token, payload);
        System.out.println("...message sent!");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Here is the exception I get: 这是我得到的异常:

About to send the message...
com.notnoop.exceptions.NetworkIOException: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at com.notnoop.apns.internal.Utilities.wrapAndThrowAsRuntimeException(Utilities.java:284)
at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:342)
at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:312)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:46)
at com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:56)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36)
at com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:45)
at utilities.APNSTestUtility.main(APNSTestUtility.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:992)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at java.io.OutputStream.write(OutputStream.java:75)
at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:328)
... 11 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:505)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
... 16 more

When I include a wrong password I get an exception for an incorrect password so I know it's finding the .p12 file. 当我输入错误的密码时,我会得到一个错误密码的异常,因此我知道它正在查找.p12文件。 I can send notifications with the PHP example I found online but there MUST be something I'm missing with the Java code. 我可以使用在线找到的PHP示例发送通知,但Java代码一定缺少某些内容。 I have tried both the java-apns library (shown above) and the JavaPNS library and I get the same results. 我已经尝试了java-apns库(如上所示)和JavaPNS库,都得到了相同的结果。

We should not use the private key p12 file, instead we should generate a p12 from your private key and the cert download from Apple. 我们不应该使用私钥p12文件,而是应该根据您的私钥和从Apple下载的证书生成p12。 execute the following OpenSSL command to get the correct p12 file: 执行以下OpenSSL命令以获取正确的p12文件:

developer_identity.cer <= download from Apple
mykey.p12 <= Your private key

openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM