我的目标最终目标是通过SNS向iOS应用发送推送通知.我正在逐步完成本教程:http://docs.aws.amazon.com/sns/latest/dg/mobile-push-apns.html.
我已在我的AWS凭据中添加,并添加了相应的apns凭据,用于我的应用程序的开发密钥,证书,私钥和当前推送令牌.当我运行教程时,我得到:
Exception in thread "main" java.lang.NullPointerException
at com.amazonaws.sns.samples.tools.AmazonSNSClientWrapper.getValidNotificationAttributes(AmazonSNSClientWrapper.java:162)
at com.amazonaws.sns.samples.tools.AmazonSNSClientWrapper.publish(AmazonSNSClientWrapper.java:80)
at com.amazonaws.sns.samples.tools.AmazonSNSClientWrapper.demoNotification(AmazonSNSClientWrapper.java:131)
at com.amazonaws.sns.samples.mobilepush.SNSMobilePush.demoAppleSandboxAppNotification(SNSMobilePush.java:438)
at com.amazonaws.sns.samples.mobilepush.SNSMobilePush.main(SNSMobilePush.java:68)
Run Code Online (Sandbox Code Playgroud)
在SNSMobilePush.java的顶部有一个名为attributesMap的Map.对于密钥Platform.APNS和Platform.APNS_SANDBOX,它最初的值设置为null.在代码期间,这些值永远不会改变,并且负责导致空指针异常.本教程未指示更改这些值.
我没有做任何超出教程说明的内容.
我知道我的凭据是正确的,因为我通过Amazon Management Console使用这些相同的凭据向我的iOS应用程序发送消息.
任何人都可以表示
更新我在null检查中添加了getValidNotificationAttributes(),现在我可以使用本教程使用sns和apns发送推送通知.
push-notification amazon-web-services apple-push-notifications amazon-sns javaapns
让我快速解释一下我要做什么。我正在尝试用 Java 构建我自己的 Apple 推送通知服务(用于测试目的)。这项服务的工作归功于 TLS 套接字。
我有一个 java 客户端来创建一个 TLS 套接字来向 APNs 发送推送通知。我更改了主机 url 以将套接字重定向到 localhost:2195。现在我正在尝试编写一个 java 套接字服务器来获取通知请求。
但是,我在握手过程中遇到异常并且无法找到解决方法。
注意:我在双方使用相同的证书,它是一个标准的 .p12 文件,用于向 APNs 发送推送通知。
这是客户端(简化):
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream(certificatePath), password.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
kmf.init(ks, password.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509");
tmf.init((KeyStore)null);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory ssf = sc.getSocketFactory();
SSLSocket socket = (SSLSocket) ssf.createSocket(InetAddress.getLocalHost(), 2195);
socket.startHandshake();
Run Code Online (Sandbox Code Playgroud)
这是服务器:
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream(certificatePath), password.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
kmf.init(ks, password.toCharArray());
SSLContext context = SSLContext.getInstance("TLS"); …Run Code Online (Sandbox Code Playgroud) 我正在使用Java APNS(com.notnoop.apns,v0.2.3)将推送通知发送到我的iOS应用程序.我正在使用以下行创建APNS服务:
private ApnsService createApnsService() throws IOException {
ApnsServiceBuilder serviceBuilder = APNS.newService().withCert(certResource.getInputStream(), certPassword);
serviceBuilder.withSandboxDestination();
return serviceBuilder.build();
}
Run Code Online (Sandbox Code Playgroud)
并收到以下异常:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.notnoop.exceptions.NetworkIOException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:647)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:728)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)... <<...the stacktrace is much longer, but I've cut it of here, since nobody would read it anyway...>>
Run Code Online (Sandbox Code Playgroud)
我猜我的P12证书不正确.(我也已经尝试过PEM证书.)目前我已经以这种方式创建了P12证书,然后应用了密码:

创建与Java APNS兼容的证书的正确方法是什么?