Java推送IOS通知消息

Java推送IOS通知消息

公司需要做IOS消息推送,我负责后台代码的实现。写这篇文章也是将我踩坑得来的结果记录一下,分享一下。

APN介绍

Apple 推送通知服务(APNs) 是远程通知功能的核心。它是一种强大、安全且高效的服务,可供应用程序开发人员将信息传播到 iOS(以及间接的 watchOS)、tvOS 和 macOS 设备。

在用户设备上首次启动您的应用程序时,系统会自动在您的应用程序和 APN 之间建立经过认证、加密且持久的 IP 连接。此连接允许您的应用程序执行设置以使其能够接收通知,如配置远程通知支持中所述。

用于发送通知的另一半连接——提供者服务器和 APNs 之间持久、安全的通道——需要在你的在线开发者帐户中进行配置并使用 Apple 提供的加密证书。一个供应商是一个服务器,您部署和管理,您配置工作与的APN。

Java推送IOS通知消息_第1张图片

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的说明文档进行修改代码。

IOS推送

推送流程

  1. 首先ios端开发需要去申请Apple的加密证书 (p8或p12)
  2. iOS端开发需要提供手机的唯一token
  3. 服务端加密证书验证通过后,调用pushy的api进行消息推送

代码示例

  1. 首先项目导入maven依赖

    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();

Java推送IOS通知消息_第2张图片
因为一些不可抗因素 我这边做了端口转发,如果没有端口限制,直接用默认端口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. 推送
Java推送IOS通知消息_第3张图片
具体代码就粘在上面了,亲测好使。

总结一下会发生的坑…
因为网上有很多 pushy推送的相关代码,但是发现用的和我这个依赖并不是一个依赖,里面的服务器地址并不对,所以一直推送报错。
还有一个致命的问题,如果你的项目pom的parent集成了netty相关的依赖,而且版本过低。会导致在apns连接时报错…提示的报错也很坑。java.lang.exception: not support using BoringSSL
还以为是证书有问题,和ios那边确认了好久…

你可能感兴趣的:(Java自学,ios,java)