java - 使用 Javapns 的 Apple 推送通知服务

标签 java ios apple-push-notifications

我使用以下代码将通知发送到 Apple 通知服务器。

import javapns.Push;
import javapns.communication.exceptions.CommunicationException;
import javapns.communication.exceptions.KeystoreException;

public class APN 
{
   public static void main(String[] args) {
        try {
            Push.alert("Hello World!", "keystore.p12", "mypassword", false, "myDeviceIdentifier");
        } 
        catch (CommunicationException e) {
           e.printStackTrace();
        } 
        catch (KeystoreException e) {
            e.printStackTrace();
        }
   }
}

我已经包含了 Javapns 文档中指定的所有 jar。
但是,当我执行此代码时,它抛出以下异常。

log4j:WARN No appenders could be found for logger (javapns.notification.Payload).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
javapns.communication.exceptions.CommunicationException: Communication exception:
java.net.ConnectException: Operation timed out
at javapns.communication.ConnectionToAppleServer.getSSLSocket(ConnectionToAppleServer.java:158)
at javapns.notification.PushNotificationManager.initializeConnection(PushNotificationManager.java:106)
at javapns.Push.sendPayload(Push.java:171)
at javapns.Push.alert(Push.java:47)
at com.mydomain.myapp.APN.main(APN.java:12)
Caused by: java.net.ConnectException: Operation timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:570)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:371)
at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:71)
at javapns.communication.ConnectionToAppleServer.getSSLSocket(ConnectionToAppleServer.java:155)
... 4 more

我已经创建了 .p12 证书,并且获得了 64 个字长的设备标识符。

请给我建议解决方案。
任何帮助将不胜感激。

最佳答案

关键信息是:

java.net.ConnectException:操作超时

您确定运行此代码的服务器可以连接到您指定的端口上的 Apple apn 服务器吗?

提示:使用telnet验证。

关于java - 使用 Javapns 的 Apple 推送通知服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934049/

相关文章:

Java 构造函数需要一个依赖于另一个构造函数的条件,而另一个构造函数又依赖于第一个构造函数。 (蛇咬住尾部)

ios - 收到错误 "No visible @interface for ' CIImage' 声明选择器 'size' “在之前运行的 iOS 7 之前的项目上

ios - 将 GKGameCenterControllerDelegate 与 SKScene 结合使用

ios - 通过 View 传递数据 Xcode 4.2 Storyboard

ios - 使用生产服务器证书向开发应用程序发送推送通知

java - 使用 MiGLayout 修复基于百分比的网格

调用 JFrame 类时 Java 程序不会暂停等待用户输入

Java 8 流排序字符串列表

iphone - Apple 推送通知无法在共享服务器上运行

c# - 在 Windows Server 2012 R2 上发送 http/2 请求