java - Spring项目中APN的休息控制器(推送通知)
问题描述
MOD - 我正在努力使用 APNs 服务在 iOS 设备上发送推送通知。我的代码是:
try {
ApnsService apnsService =
APNS.newService()
.withCert(localCertPath, "psw")
//.withProductionDestination() --> why apns prod point at "gateway.push.apple.com", 2195 ???
.withGatewayDestination("api.push.apple.com", 443) --> is this right production endpoint? I think yes..reading official apple documentation
.build();
apnsService.start();
String payload = APNS.newPayload()
.alertBody("test notification")
.sound("default")
.build();
apnsService.push(DEVICE_TOKEN, payload);
System.out.println("Message sent!");
apnsService.stop();
} catch (NetworkIOException nE) {
nE.printStackTrace();
}
响应为 200 ok,但问题是:
Message sent!
2019-10-08 15:02:17.938+0200 [com.project.pushSender] INFO [Thread-9] [//] [c.n.a.i.ApnsConnectionImpl.run] - Exception while waiting for error code
java.io.IOException: Unexpected command byte 0
at com.notnoop.apns.internal.ApnsConnectionImpl$1MonitoringThread.run(ApnsConnectionImpl.java:118)
我也尝试过 curl 但它似乎发送了 0 字节的有效负载。
{ [5 bytes data]
* Connection state changed (MAX_CONCURRENT_STREAMS == 1000)!
} [5 bytes data]
* We are completely uploaded and fine
{ [5 bytes data]
HTTP/2 200
apns-id: xxx-XXX-xxx
{ [0 bytes data]
100 256 0 0 100 256 0 387 --:--:-- --:--:-- --:--:-- 387
* Connection #0 to host api.push.apple.com left intact
我正在尝试使用“com.notnoop.apns”库 1.0.0.Beta6(以及更低版本),但没有向设备发送任何通知。也许我错了?
解决方案
找到解决方案!使用 java 8 时,我们需要通过-Xbootclasspath/p:/path/to/the/alpn.jar将 ALPN 协议添加到 bootclasspath因为 java 8(及更低版本)不支持本机协商握手,因此请求不成功。将此命令添加到 VM 选项允许您发送推送通知,但是对于想要选择另一种方式的人,还有另一个包含此 alpn 协议的库:pushy。易于实现且比 notnoop 简单。我能够使用这两个库发送通知,但最后,我选择了 pushy。我认为这篇文章已关闭!
推荐阅读
- ubuntu - 连接到以太网电缆时如何将外部设备用作模拟器
- firebase - 从 Firebase 检索数据时出现短错误
- visual-studio-code - 使用单个快捷方式折叠/展开
- java - Spring Elastic Search:如何通过映射到不同对象的多个索引进行搜索
- c# - 如何在 Visual Studio for Windows 中向 Winform 应用程序添加 Internet 权限
- android - Flutter:如何使用 JSON 数据从 ListView.builder 创建搜索栏?
- flutter - Flutter本地化和sdk可能不兼容android studio
- amazon-web-services - AWS Databricks Spark - 数据类型
- cherrypy - server.socket_host: '0.0.0.0' 有必要吗?
- reactjs - redux mapDispatchToProps 渲染