公司需要做IOS消息推送,我负责后台代码的实现。写这篇文章也是将我踩坑得来的结果记录一下,分享一下。
APN介绍Apple 推送通知服务(APNs) 是远程通知功能的核心。它是一种强大、安全且高效的服务,可供应用程序开发人员将信息传播到 iOS(以及间接的 watchOS)、tvOS 和 macOS 设备。
在用户设备上首次启动您的应用程序时,系统会自动在您的应用程序和 APN 之间建立经过认证、加密且持久的 IP 连接。此连接允许您的应用程序执行设置以使其能够接收通知,如配置远程通知支持中所述。
用于发送通知的另一半连接——提供者服务器和 APNs 之间持久、安全的通道——需要在你的在线开发者帐户中进行配置并使用 Apple 提供的加密证书。一个供应商是一个服务器,您部署和管理,您配置工作与的APN。
Pushy框架Pushy 是一个用于发送APN(iOS、macOS 和 Safari)推送通知的 Java 库。
Pushy 使用 Apple 的基于 HTTP/2 的 APNs 协议发送推送通知,并支持 TLS 和基于令牌的身份验证。它与其他推送通知库不同,它侧重于完整的文档、异步 *** 作和工业规模 *** 作的设计。使用 Pushy,可以轻松高效地维护与 APNs 网关的多个并行连接,以向许多不同的应用程序(“主题”)发送大量通知。
我们相信 Pushy 已经是从 Java 应用程序发送 APNs 推送通知的最佳工具,我们希望您能通过错误报告和拉取请求帮助我们做得更好。
git地址:https://github.com/jchambers/pushy
完全可以根据git的说明文档进行修改代码。
com.eatthepath
pushy
0.15.0
io.netty
netty-tcnative-boringssl-static
2.0.41.Final
runtime
获取apple证书方法:https://developer.apple.com/documentation/usernotifications/registering_your_app_with_apns
因为我们项目使用的是p12证书,所以验证代码是基于p12证书编写的
final ApnsClient apnsClient = new ApnsClientBuilder()
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST) //沙盒地址,生产地址是另一个
.setClientCredentials(new File("/path/to/certificate.p12"), "p12-file-password") //p12证书的存放位置和p12证书的验证密码
.build();
因为一些不可抗因素 我这边做了端口转发,如果没有端口限制,直接用默认端口443即可
final ApnsClient apnsClient = new ApnsClientBuilder()
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
.setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File("/path/to/key.p8"),
"TEAMID1234", "KEYID67890"))
.build();
这是 github上提供的p8证书的apns客户端方法(未尝试)
2. 推送
具体代码就粘在上面了,亲测好使。
总结一下会发生的坑…
因为网上有很多 pushy推送的相关代码,但是发现用的和我这个依赖并不是一个依赖,里面的服务器地址并不对,所以一直推送报错。
还有一个致命的问题,如果你的项目pom的parent集成了netty相关的依赖,而且版本过低。会导致在apns连接时报错…提示的报错也很坑。java.lang.exception: not support using BoringSSL
还以为是证书有问题,和ios那边确认了好久…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)