代理背后的服务器端 APNs 推送通知

Server side APNs push notification behind proxy

我需要使用服务器的控制面板发送推送通知。

服务器是一个 Linux 虚拟云盒,它位于代理后面。控制面板使用 J2EE 设计 Tomcat

我正在使用基于 JAVA 的 https://github.com/notnoop/java-apns/releases API 进行推送

代码

ApnsService service = APNS.newService().withSandboxDestination().withCert("mycert.p12", "mypassword").build();
String messageTobeSent = APNS.newPayload()
    .alertBody("Message with badge 2")
    .badge(2)
    .alertTitle("Message with badge 2")
    .sound("ding.wav")
    .build();
service.push("d81f0080ed7bf05ac96261dc1805fbf00230073f606f1388a644469b1893446f",  messageTobeSent, new Date());

我遇到错误无法连接到 APNS 服务器,我的问题是

  1. 这是代理的原因吗?
  2. APNs 是否适用于代理?
  3. 这个库是否支持代理连接?

是您的 APNS 客户端无法连接到该机器上的 APNS 服务器。请测试从您的应用程序 运行 所在的计算机到 APNS 服务器的 TCP 连接。您可以使用 nc 命令从 linux 框中测试与 APNS 服务器的连接。是的,APNS 与代理无关,因为 APNS 连接在 TCP 上工作。如果您可以将防火墙配置为连接到 APNS,那么它应该可以工作。

nc apns_server_host apns_server_port

回答你的第 3 个问题,这将解决前两个问题。 NotNoop Java-Apns绝对支持代理。

参考提供的 Java 文档 ApnsServiceBuilder withProxy(java.net.Proxy)

Specify the proxy to be used to establish the connections to Apple Servers

在你的代码中你可以输入如下内容

ApnsService service = APNS
.newService()
.withSandboxDestination()
.withProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("<your proxy host>", <your proxy port>)))
.build();

现在图书馆本身将通过代理连接