Spring项目中APN的休息控制器(推送通知)

Posted

技术标签:

【中文标题】Spring项目中APN的休息控制器(推送通知)【英文标题】:Rest controller for APN in spring project(push notification) 【发布时间】:2019-09-27 14:42:34 【问题描述】:

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(以及更低版本),但没有向设备发送任何通知。 也许我错了什么?

【问题讨论】:

【参考方案1】:

找到解决方案!使用 java 8,我们需要通过 -Xbootclasspath/p:/path/to/the/alpn.jar 将 ALPN 协议添加到 bootclasspath 因为 java 8(及更低版本)不支持本机协商握手,因此请求不成功。 将此命令添加到 VM 选项允许您发送推送通知,但对于想要选择另一种方式的人,还有另一个库包含此 alpn 协议:pushy。 易于实现且比 notnoop 简单。 我能够使用这两个库发送通知,但最后,我选择了 pushy。 我认为这篇文章已关闭!

【讨论】:

嗨!我快速提问,我怎样才能使用这个发送批量通知?例如,如果我想向 1000 台设备发送通知。

以上是关于Spring项目中APN的休息控制器(推送通知)的主要内容,如果未能解决你的问题,请参考以下文章

从 php 推送到 GCM/APN 的最佳实践

推送到设备后过期推送通知

取消订阅 Apple 推送通知服务

通过 FCM 发送时未收到推送通知,但在 IOS 上通过 APN 发送时收到

iOS APN 推送通知 - 设备令牌

Cordova 推送通知 ios